From edeeebd6163cd0832c8a7d4518c34cc2965be881 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 17 Sep 2026 09:07:54 -0400 Subject: [PATCH 01/79] Placeholder programmatic settings window --- Rectangle.xcodeproj/project.pbxproj | 4 + Rectangle/AppDelegate.swift | 3 +- Rectangle/Base.lproj/Main.storyboard | 60 +- .../SettingsWindowController.swift | 72 ++ Rectangle/mul.lproj/Main.xcstrings | 672 ++++++++++-------- 5 files changed, 466 insertions(+), 345 deletions(-) create mode 100644 Rectangle/PrefsWindow/SettingsWindowController.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 624312ed7..05eaa1ac6 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -107,6 +107,7 @@ 988D067F22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D067E22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift */; }; 988D068322EB4EF3004EABD7 /* MoveUpDownCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D068222EB4EF3004EABD7 /* MoveUpDownCalculation.swift */; }; 98910B3E231130AF0066EC23 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98910B3D231130AF0066EC23 /* SettingsViewController.swift */; }; + 98985839305C1B6400459AFF /* SettingsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98985838305C1B6400459AFF /* SettingsWindowController.swift */; }; 98987AA42391890400BE72C4 /* LogViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98987AA22391890300BE72C4 /* LogViewer.storyboard */; }; 98987AA52391890400BE72C4 /* LogViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98987AA32391890400BE72C4 /* LogViewer.swift */; }; 989DA30E243FC0DF008C7AA4 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989DA30D243FC0DF008C7AA4 /* WelcomeViewController.swift */; }; @@ -334,6 +335,7 @@ 988D067E22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveLeftRightCalculation.swift; sourceTree = ""; }; 988D068222EB4EF3004EABD7 /* MoveUpDownCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveUpDownCalculation.swift; sourceTree = ""; }; 98910B3D231130AF0066EC23 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; + 98985838305C1B6400459AFF /* SettingsWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsWindowController.swift; sourceTree = ""; }; 98987AA22391890300BE72C4 /* LogViewer.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LogViewer.storyboard; sourceTree = ""; }; 98987AA32391890400BE72C4 /* LogViewer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LogViewer.swift; sourceTree = ""; }; 989DA30D243FC0DF008C7AA4 /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = ""; }; @@ -742,6 +744,7 @@ isa = PBXGroup; children = ( 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */, + 98985838305C1B6400459AFF /* SettingsWindowController.swift */, 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, 98910B3D231130AF0066EC23 /* SettingsViewController.swift */, 983DD03F28A844BE00BF1EEE /* SnapAreaViewController.swift */, @@ -1073,6 +1076,7 @@ 98A009BF251253AB00CFBF0C /* BottomRightSixthCalculation.swift in Sources */, 6490B39527BF96880056C220 /* TopLeftEighthCalculation.swift in Sources */, D04CE30227817A6100BD47B3 /* TopCenterNinthCalculation.swift in Sources */, + 98985839305C1B6400459AFF /* SettingsWindowController.swift in Sources */, 98A009B52512537800CFBF0C /* TopLeftSixthCalculation.swift in Sources */, 9824704F22B189250037B409 /* BestEffortWindowMover.swift in Sources */, 30166BD024F27D6A00A38608 /* SpecifiedCalculation.swift in Sources */, diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index ec8202efb..c871ffa2c 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -255,7 +255,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { @IBAction func openPreferences(_ sender: Any) { if prefsWindowController == nil { - prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController + prefsWindowController = SettingsWindowController() +// prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController } NSApp.activate(ignoringOtherApps: true) prefsWindowController?.showWindow(self) diff --git a/Rectangle/Base.lproj/Main.storyboard b/Rectangle/Base.lproj/Main.storyboard index eec478932..360f230d7 100644 --- a/Rectangle/Base.lproj/Main.storyboard +++ b/Rectangle/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -2428,10 +2428,10 @@ - + - + @@ -2537,6 +2537,8 @@ + + @@ -2549,6 +2551,8 @@ + + @@ -2683,7 +2687,7 @@ - + @@ -3876,24 +3880,24 @@ DQ - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - @@ -4025,67 +4225,90 @@ DQ - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + @@ -4100,51 +4323,51 @@ DQ - - + + - - - + + + - + - + - + - + - - + + - - + + - + - - - + + + - + - + - + - + @@ -4159,61 +4382,61 @@ DQ - - + + - - - + + + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + @@ -4230,12 +4453,8 @@ DQ - - - - - - + + @@ -4248,283 +4467,48 @@ DQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - + + + + + + + + + + + + + - - - - + + + + diff --git a/Rectangle/PrefsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindowController.swift index b57a5ec8e..f0938eabc 100644 --- a/Rectangle/PrefsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindowController.swift @@ -31,11 +31,11 @@ class SettingsTabViewController: NSTabViewController { shortcutsItem.image = NSImage(imageLiteralResourceName: "keyboardToolbarTemplate") addTabViewItem(shortcutsItem) - let advancedVC = AdvancedSettingsViewController() - let advancedItem = NSTabViewItem(viewController: advancedVC) - advancedItem.label = "Advanced" - advancedItem.image = NSImage(systemSymbolName: "slider.horizontal.3", accessibilityDescription: "Advanced") - addTabViewItem(advancedItem) + let snapAreaVC = NSViewController.newControllerFromStoryboard(identifier: "SnapAreaViewController") + let snapAreaItem = NSTabViewItem(viewController: snapAreaVC) + snapAreaItem.label = "Snap Areas" + snapAreaItem.image = NSImage(imageLiteralResourceName: "snapAreaTemplate") + addTabViewItem(snapAreaItem) let generalVC = GeneralSettingsViewController() let generalItem = NSTabViewItem(viewController: generalVC) diff --git a/Rectangle/PrefsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/ShortcutsViewController.swift index 4d088c02f..cd9aa3349 100644 --- a/Rectangle/PrefsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/ShortcutsViewController.swift @@ -11,13 +11,38 @@ final class ShortcutItem: NSObject { } } -final class ShortcutSection: NSObject { +final class SpacerItem: NSObject {} + +final class ShortcutCategory: NSObject { + let items: [Any] + + init(actions: [WindowAction], includeSpacer: Bool = true) { + var categoryItems: [Any] = actions.map { ShortcutItem($0) } + if includeSpacer { + categoryItems.append(SpacerItem()) + } + self.items = categoryItems + } +} + +final class ShortcutGroup: NSObject { let title: String - let items: [ShortcutItem] + let items: [Any] - init(title: String, actions: [WindowAction]) { + init(title: String, categories: [ShortcutCategory]) { self.title = title - self.items = actions.map { ShortcutItem($0) } + + var flatItems: [Any] = [] + for (index, category) in categories.enumerated() { + // Include action items + flatItems.append(contentsOf: category.items.compactMap { $0 as? ShortcutItem }) + + // Add spacer after each category except the last inside the group + if index < categories.count - 1 { + flatItems.append(SpacerItem()) + } + } + self.items = flatItems } } @@ -104,7 +129,7 @@ final class ShortcutActionCellView: NSTableCellView { titleLabel.trailingAnchor.constraint(equalTo: iconImageView.leadingAnchor, constant: -8), titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor), - titleLabel.leadingAnchor.constraint(greaterThanOrEqualTo: leadingAnchor, constant: 8) + titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20) ]) } @@ -136,37 +161,10 @@ class ShortcutsViewController: NSViewController { private let shortcutRecordingObserver = ShortcutRecordingObserver() private var allowAnyShortcutObserver: NSObjectProtocol? - private let sections: [ShortcutSection] = [ - ShortcutSection(title: WindowActionCategory.halves.displayName, actions: [ - .leftHalf, .rightHalf, .centerHalf, .topHalf, .bottomHalf - ]), - ShortcutSection(title: WindowActionCategory.corners.displayName, actions: [ - .topLeft, .topRight, .bottomLeft, .bottomRight - ]), - ShortcutSection(title: WindowActionCategory.max.displayName, actions: [ - .maximize, .almostMaximize, .maximizeHeight, .center, .restore - ]), - ShortcutSection(title: WindowActionCategory.size.displayName, actions: [ - .larger, .smaller - ]), - ShortcutSection(title: WindowActionCategory.thirds.displayName, actions: [ - .firstThird, .centerThird, .lastThird, .firstTwoThirds, .centerTwoThirds, .lastTwoThirds - ]), - ShortcutSection(title: WindowActionCategory.move.displayName, actions: [ - .moveLeft, .moveRight, .moveUp, .moveDown - ]), - ShortcutSection(title: WindowActionCategory.fourths.displayName, actions: [ - .firstFourth, .secondFourth, .thirdFourth, .lastFourth, .firstThreeFourths, .centerThreeFourths, .lastThreeFourths - ]), - ShortcutSection(title: WindowActionCategory.sixths.displayName, actions: [ - .topLeftSixth, .topCenterSixth, .topRightSixth, .bottomLeftSixth, .bottomCenterSixth, .bottomRightSixth - ]), - ShortcutSection(title: WindowActionCategory.display.displayName, actions: [ - .nextDisplay, .previousDisplay - ]) - ] + private var rootItems: [Any] = [] override func loadView() { + setupGroups() let containerView = NSView(frame: NSRect(x: 0, y: 0, width: 480, height: 500)) scrollView.translatesAutoresizingMaskIntoConstraints = false @@ -206,10 +204,40 @@ class ShortcutsViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() - outlineView.expandItem(nil, expandChildren: true) +// outlineView.expandItem(nil, expandChildren: true) subscribeToAllowAnyShortcutToggle() } + private func setupGroups() { + let standardCategories: [ShortcutCategory] = [ + ShortcutCategory(actions: [.leftHalf, .rightHalf, .centerHalf, .topHalf, .bottomHalf]), + ShortcutCategory(actions: [.topLeft, .topRight, .bottomLeft, .bottomRight]), + ShortcutCategory(actions: [.maximize, .almostMaximize, .maximizeHeight, .larger, .smaller, .center, .restore]), + ShortcutCategory(actions: [.nextDisplay, .previousDisplay], includeSpacer: false) + ] + + let moreCategories: [ShortcutCategory] = [ + ShortcutCategory(actions: [.firstThird, .centerThird, .lastThird, .firstTwoThirds, .centerTwoThirds, .lastTwoThirds]), + ShortcutCategory(actions: [ + .firstFourth, .secondFourth, .thirdFourth, .lastFourth, .firstThreeFourths, .centerThreeFourths, .lastThreeFourths + ]), + ShortcutCategory(actions: [ + .topLeftSixth, .topCenterSixth, .topRightSixth, .bottomLeftSixth, .bottomCenterSixth, .bottomRightSixth + ]), + ShortcutCategory(actions: [.moveLeft, .moveRight, .moveUp, .moveDown], includeSpacer: false), + ] + + var items: [Any] = [] + for category in standardCategories { + items.append(contentsOf: category.items) + } + + let moreGroup = ShortcutGroup(title: "More", categories: moreCategories) + items.append(moreGroup) + + rootItems = items + } + deinit { if let observer = allowAnyShortcutObserver { NotificationCenter.default.removeObserver(observer) @@ -223,41 +251,44 @@ class ShortcutsViewController: NSViewController { self.outlineView.expandItem(nil, expandChildren: true) } } - } +// MARK: - NSOutlineViewDataSource + extension ShortcutsViewController: NSOutlineViewDataSource { func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int { if item == nil { - return sections.count + return rootItems.count } - if let section = item as? ShortcutSection { - return section.items.count + if let group = item as? ShortcutGroup { + return group.items.count } return 0 } func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool { - return item is ShortcutSection + return item is ShortcutGroup } func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any { if item == nil { - return sections[index] + return rootItems[index] } - if let section = item as? ShortcutSection { - return section.items[index] + if let group = item as? ShortcutGroup { + return group.items[index] } fatalError("Unexpected outline view item: \(String(describing: item))") } } +// MARK: - NSOutlineViewDelegate + extension ShortcutsViewController: NSOutlineViewDelegate { func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { - if let section = item as? ShortcutSection { + if let group = item as? ShortcutGroup { let cell = outlineView.makeView(withIdentifier: ShortcutSectionCellView.identifier, owner: self) as? ShortcutSectionCellView ?? ShortcutSectionCellView() cell.identifier = ShortcutSectionCellView.identifier - cell.configure(title: section.title) + cell.configure(title: group.title) return cell } @@ -268,9 +299,23 @@ extension ShortcutsViewController: NSOutlineViewDelegate { return cell } + if item is SpacerItem { + let spacerView = NSView() + spacerView.translatesAutoresizingMaskIntoConstraints = false + spacerView.heightAnchor.constraint(equalToConstant: 14).isActive = true + return spacerView + } + return nil } + func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat { + if item is SpacerItem { + return 14 + } + return 28 + } + func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { return false } diff --git a/Rectangle/PrefsWindow/SnapAreaViewController.swift b/Rectangle/PrefsWindow/SnapAreaViewController.swift index 2b65a509f..059d2be64 100644 --- a/Rectangle/PrefsWindow/SnapAreaViewController.swift +++ b/Rectangle/PrefsWindow/SnapAreaViewController.swift @@ -290,3 +290,13 @@ class SnapAreaViewController: NSViewController { } } } + +extension NSViewController { + static func newControllerFromStoryboard(storyboardName: String = "Main", identifier: String) -> NSViewController { + let storyboard = NSStoryboard(name: storyboardName, bundle: nil) + guard let viewController = storyboard.instantiateController(withIdentifier: identifier) as? NSViewController else { + fatalError("Unable to find \(identifier) in \(storyboardName)") + } + return viewController + } +} From 410d2226d75dd024df693e61b0e23e3f33686547 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 17 Sep 2026 17:29:21 -0400 Subject: [PATCH 05/79] Minor adjustments for the outline view --- .../PrefsWindow/ShortcutsViewController.swift | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/Rectangle/PrefsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/ShortcutsViewController.swift index cd9aa3349..c1eb5e315 100644 --- a/Rectangle/PrefsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/ShortcutsViewController.swift @@ -68,7 +68,7 @@ final class ShortcutSectionCellView: NSTableCellView { addSubview(titleLabel) NSLayoutConstraint.activate([ - titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 4), + titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10), titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -4), titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor) ]) @@ -173,13 +173,13 @@ class ShortcutsViewController: NSViewController { scrollView.autohidesScrollers = true scrollView.drawsBackground = false - outlineView.translatesAutoresizingMaskIntoConstraints = false outlineView.headerView = nil outlineView.selectionHighlightStyle = .none outlineView.rowHeight = 28 outlineView.indentationPerLevel = 16 outlineView.columnAutoresizingStyle = .uniformColumnAutoresizingStyle - + outlineView.indentationPerLevel = 0 + let column = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("ShortcutColumn")) column.resizingMask = .autoresizingMask column.width = 460 @@ -315,8 +315,28 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } return 28 } + + // MARK: - NSOutlineViewDelegate Dynamic Sizing Fix + + func outlineViewItemDidExpand(_ notification: Notification) { + scheduleScrollViewUpdate() + } + + func outlineViewItemDidCollapse(_ notification: Notification) { + scheduleScrollViewUpdate() + } - func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { - return false + private func scheduleScrollViewUpdate() { + // Defer execution until NSOutlineView completes its internal row animation and index updates + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + + // Recalculate document frame height safely after row changes have finalized + if let documentView = self.scrollView.documentView { + documentView.frame.size.height = self.outlineView.intrinsicContentSize.height + } + + self.scrollView.reflectScrolledClipView(self.scrollView.contentView) + } } } From f42d926cbc913e38701d29881650e7166784f734 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Fri, 18 Sep 2026 10:02:18 -0400 Subject: [PATCH 06/79] Size and position adjusments --- .../PrefsWindow/ShortcutsViewController.swift | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Rectangle/PrefsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/ShortcutsViewController.swift index c1eb5e315..066475d06 100644 --- a/Rectangle/PrefsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/ShortcutsViewController.swift @@ -117,7 +117,7 @@ final class ShortcutActionCellView: NSTableCellView { addSubview(shortcutView) NSLayoutConstraint.activate([ - shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), + shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -56), shortcutView.centerYAnchor.constraint(equalTo: centerYAnchor), shortcutView.widthAnchor.constraint(equalToConstant: 160), shortcutView.heightAnchor.constraint(equalToConstant: 19), @@ -156,6 +156,7 @@ final class ShortcutActionCellView: NSTableCellView { class ShortcutsViewController: NSViewController { + private let initialSize = NSSize(width: 480, height: 610) private let scrollView = NSScrollView() private let outlineView = NSOutlineView() private let shortcutRecordingObserver = ShortcutRecordingObserver() @@ -165,8 +166,15 @@ class ShortcutsViewController: NSViewController { override func loadView() { setupGroups() - let containerView = NSView(frame: NSRect(x: 0, y: 0, width: 480, height: 500)) + let containerView = NSView(frame: NSRect(origin: .zero, size: initialSize)) + containerView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + containerView.widthAnchor.constraint(equalToConstant: initialSize.width), + containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: 200) // Minimum height allowed + ]) + scrollView.translatesAutoresizingMaskIntoConstraints = false scrollView.hasVerticalScroller = true scrollView.hasHorizontalScroller = false @@ -176,13 +184,12 @@ class ShortcutsViewController: NSViewController { outlineView.headerView = nil outlineView.selectionHighlightStyle = .none outlineView.rowHeight = 28 - outlineView.indentationPerLevel = 16 outlineView.columnAutoresizingStyle = .uniformColumnAutoresizingStyle outlineView.indentationPerLevel = 0 let column = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("ShortcutColumn")) column.resizingMask = .autoresizingMask - column.width = 460 + column.width = 300 outlineView.addTableColumn(column) outlineView.outlineTableColumn = column @@ -193,9 +200,9 @@ class ShortcutsViewController: NSViewController { containerView.addSubview(scrollView) NSLayoutConstraint.activate([ - scrollView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor), + scrollView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20), scrollView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), - scrollView.topAnchor.constraint(equalTo: containerView.topAnchor), + scrollView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), scrollView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) ]) @@ -204,10 +211,14 @@ class ShortcutsViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() -// outlineView.expandItem(nil, expandChildren: true) subscribeToAllowAnyShortcutToggle() } - + + override func viewWillAppear() { + super.viewWillAppear() + view.window?.setContentSize(initialSize) + } + private func setupGroups() { let standardCategories: [ShortcutCategory] = [ ShortcutCategory(actions: [.leftHalf, .rightHalf, .centerHalf, .topHalf, .bottomHalf]), From a5048ff70c3e514166835c06b883d0fa489f8c47 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Fri, 18 Sep 2026 12:07:25 -0400 Subject: [PATCH 07/79] Save/restore size of each settings tab --- .../SettingsWindowController.swift | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/Rectangle/PrefsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindowController.swift index f0938eabc..e1d958e60 100644 --- a/Rectangle/PrefsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindowController.swift @@ -9,7 +9,7 @@ class SettingsWindowController: NSWindowController { let window = NSWindow(contentViewController: contentViewController) window.styleMask = [.titled, .closable, .miniaturizable, .resizable] - window.title = "Preferences" + window.title = "Shortcuts" window.setContentSize(NSSize(width: 480, height: 540)) window.minSize = NSSize(width: 420, height: 350) window.center() @@ -20,6 +20,8 @@ class SettingsWindowController: NSWindowController { class SettingsTabViewController: NSTabViewController { + private var savedTabSizes: [Int: NSSize] = [:] + override func viewDidLoad() { super.viewDidLoad() @@ -43,6 +45,37 @@ class SettingsTabViewController: NSTabViewController { generalItem.image = NSImage(systemSymbolName: "gearshape", accessibilityDescription: "General") addTabViewItem(generalItem) } + + override var selectedTabViewItemIndex: Int { + willSet { + if selectedTabViewItemIndex != -1, let window = view.window { + savedTabSizes[selectedTabViewItemIndex] = window.frame.size + } + } + didSet { + guard selectedTabViewItemIndex != -1 else { return } + let selectedItem = tabViewItems[selectedTabViewItemIndex] + tabDidSwitch(to: selectedItem, at: selectedTabViewItemIndex) + } + } + + private func resizeWindow(to newSize: NSSize, animated: Bool) { + guard let window = view.window else { return } + + var frame = window.frame + frame.origin.y -= (newSize.height - frame.size.height) + frame.size = newSize + + window.setFrame(frame, display: true, animate: animated) + } + + private func tabDidSwitch(to item: NSTabViewItem, at index: Int) { + view.window?.title = item.label + + if let savedSize = savedTabSizes[selectedTabViewItemIndex] { + resizeWindow(to: savedSize, animated: true) + } + } } // Example View Controllers From 9c1470696b2ba5f85a9ee26d5061281a9a14e4ad Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Fri, 18 Sep 2026 12:24:50 -0400 Subject: [PATCH 08/79] Moved extra settings popover into its own file --- Rectangle.xcodeproj/project.pbxproj | 4 + Rectangle/AppDelegate.swift | 4 +- .../PrefsWindow/ExtraSettingsPopover.swift | 979 +++++++++++++++++ .../PrefsWindow/SettingsViewController.swift | 987 +----------------- 4 files changed, 996 insertions(+), 978 deletions(-) create mode 100644 Rectangle/PrefsWindow/ExtraSettingsPopover.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 31f13073e..97c98fee9 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -138,6 +138,7 @@ 98D16A442592AD55005228CB /* MASShortcutMigration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D16A432592AD55005228CB /* MASShortcutMigration.swift */; }; 98D16A492592B460005228CB /* NotificationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D16A482592B460005228CB /* NotificationExtension.swift */; }; 98D4B6C525B6256C009C7BF6 /* TodoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */; }; + 98ED7038305D9AEE0077BD10 /* ExtraSettingsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -367,6 +368,7 @@ 98D16A432592AD55005228CB /* MASShortcutMigration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutMigration.swift; sourceTree = ""; }; 98D16A482592B460005228CB /* NotificationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtension.swift; sourceTree = ""; }; 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoManager.swift; sourceTree = ""; }; + 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettingsPopover.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -750,6 +752,7 @@ 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, 98910B3D231130AF0066EC23 /* SettingsViewController.swift */, + 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */, 983DD03F28A844BE00BF1EEE /* SnapAreaViewController.swift */, 98C97FFC25893B040061F01F /* Config.swift */, ); @@ -1038,6 +1041,7 @@ 7B4C0A212F1B000100C0FFEE /* RepeatedMaximizeRestore.swift in Sources */, 7BE578F32EFE11010083DAE3 /* ActiveSideSplitRatios.swift in Sources */, 9821403722B3D16700ABFB3F /* MaximizeHeightCalculation.swift in Sources */, + 98ED7038305D9AEE0077BD10 /* ExtraSettingsPopover.swift in Sources */, 9824704122B186D00037B409 /* WindowManager.swift in Sources */, F05220000000000000000002 /* WindowSizeWarning.swift in Sources */, 982470432EFA00010037B409 /* WindowManager+CooperativeCornerResize.swift in Sources */, diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index c871ffa2c..b3d7e0be5 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -255,8 +255,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { @IBAction func openPreferences(_ sender: Any) { if prefsWindowController == nil { - prefsWindowController = SettingsWindowController() -// prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController +// prefsWindowController = SettingsWindowController() + prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController } NSApp.activate(ignoringOtherApps: true) prefsWindowController?.showWindow(self) diff --git a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift new file mode 100644 index 000000000..0ced89c6e --- /dev/null +++ b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift @@ -0,0 +1,979 @@ +/// ExtraSettingsPopover.swift + +import MASShortcut + +extension SettingsViewController { + + func showExtraSettingsPopover(_ sender: NSButton) { + if extraSettingsPopover == nil { + let popover = NSPopover() + popover.behavior = .transient + let viewController = NSViewController() + + let mainStackView = NSStackView() + mainStackView.orientation = .vertical + mainStackView.alignment = .leading + mainStackView.spacing = 5 + mainStackView.translatesAutoresizingMaskIntoConstraints = false + + let headerLabel = NSTextField(labelWithString: NSLocalizedString("Extra Shortcuts", tableName: "Main", value: "", comment: "")) + headerLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) + headerLabel.alignment = .center + headerLabel.translatesAutoresizingMaskIntoConstraints = false + + let tileRowsLabel = NSTextField(labelWithString: NSLocalizedString("tileRows.title", tableName: "Main", value: "Tile Windows in Rows", comment: "")) + tileRowsLabel.alignment = .right + tileRowsLabel.translatesAutoresizingMaskIntoConstraints = false + let tileColumnsLabel = NSTextField(labelWithString: NSLocalizedString("tileColumns.title", tableName: "Main", value: "Tile Windows in Columns", comment: "")) + tileColumnsLabel.alignment = .right + tileColumnsLabel.translatesAutoresizingMaskIntoConstraints = false + + let tileRowsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let tileColumnsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + tilingShortcutViews = [tileRowsShortcutView, tileColumnsShortcutView] + + let largerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Larger Width", tableName: "Main", value: "", comment: "")) + largerWidthLabel.alignment = .right + let smallerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Smaller Width", tableName: "Main", value: "", comment: "")) + smallerWidthLabel.alignment = .right + let widthStepLabel = NSTextField(labelWithString: NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) + widthStepLabel.alignment = .right + + let topVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Top Third", tableName: "Main", value: "", comment: "")) + topVerticalThirdLabel.alignment = .right + let middleVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Middle Third", tableName: "Main", value: "", comment: "")) + middleVerticalThirdLabel.alignment = .right + let bottomVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Third", tableName: "Main", value: "", comment: "")) + bottomVerticalThirdLabel.alignment = .right + let topVerticalTwoThirdsLabel = NSTextField(labelWithString: NSLocalizedString("Top Two Thirds", tableName: "Main", value: "", comment: "")) + topVerticalTwoThirdsLabel.alignment = .right + let bottomVerticalTwoThirdsLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Two Thirds", tableName: "Main", value: "", comment: "")) + bottomVerticalTwoThirdsLabel.alignment = .right + + let topLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Left Eighth", tableName: "Main", value: "", comment: "")) + topLeftEighthLabel.alignment = .right + let topCenterLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Center Left Eighth", tableName: "Main", value: "", comment: "")) + topCenterLeftEighthLabel.alignment = .right + let topCenterRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Center Right Eighth", tableName: "Main", value: "", comment: "")) + topCenterRightEighthLabel.alignment = .right + let topRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Right Eighth", tableName: "Main", value: "", comment: "")) + topRightEighthLabel.alignment = .right + let bottomLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Left Eighth", tableName: "Main", value: "", comment: "")) + bottomLeftEighthLabel.alignment = .right + let bottomCenterLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Center Left Eighth", tableName: "Main", value: "", comment: "")) + bottomCenterLeftEighthLabel.alignment = .right + let bottomCenterRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Center Right Eighth", tableName: "Main", value: "", comment: "")) + bottomCenterRightEighthLabel.alignment = .right + let bottomRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Right Eighth", tableName: "Main", value: "", comment: "")) + bottomRightEighthLabel.alignment = .right + + largerWidthLabel.translatesAutoresizingMaskIntoConstraints = false + smallerWidthLabel.translatesAutoresizingMaskIntoConstraints = false + widthStepLabel.translatesAutoresizingMaskIntoConstraints = false + topVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false + middleVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false + bottomVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false + topVerticalTwoThirdsLabel.translatesAutoresizingMaskIntoConstraints = false + bottomVerticalTwoThirdsLabel.translatesAutoresizingMaskIntoConstraints = false + topLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false + topCenterLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false + topCenterRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false + topRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false + bottomLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false + bottomCenterLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false + bottomCenterRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false + bottomRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false + + let largerWidthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let smallerWidthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + + let topVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let middleVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let bottomVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let topVerticalTwoThirdsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let bottomVerticalTwoThirdsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + + let topLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let topCenterLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let topCenterRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let topRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let bottomLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let bottomCenterLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let bottomCenterRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let bottomRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + + let widthStepField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + widthStepField.stringValue = String(Int(Defaults.widthStepSize.value)) + widthStepField.delegate = self + widthStepField.defaults = Defaults.widthStepSize + widthStepField.translatesAutoresizingMaskIntoConstraints = false + widthStepField.refusesFirstResponder = true + widthStepField.alignment = .right + + let integerFormatter = NumberFormatter() + integerFormatter.allowsFloats = false + integerFormatter.minimum = 1 + widthStepField.formatter = integerFormatter + + let splitRatioHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) + splitRatioHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) + splitRatioHeaderLabel.alignment = .center + splitRatioHeaderLabel.translatesAutoresizingMaskIntoConstraints = false + + let hSplitLabel = NSTextField(labelWithString: NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) + hSplitLabel.alignment = .right + hSplitLabel.translatesAutoresizingMaskIntoConstraints = false + + let vSplitLabel = NSTextField(labelWithString: NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) + vSplitLabel.alignment = .right + vSplitLabel.translatesAutoresizingMaskIntoConstraints = false + + let percentFormatter = NumberFormatter() + percentFormatter.allowsFloats = false + percentFormatter.minimum = 1 + percentFormatter.maximum = 99 + + let hSplitField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + hSplitField.stringValue = String(Int(Defaults.horizontalSplitRatio.value)) + hSplitField.delegate = self + hSplitField.defaults = Defaults.horizontalSplitRatio + hSplitField.fallbackValue = 50 + hSplitField.translatesAutoresizingMaskIntoConstraints = false + hSplitField.refusesFirstResponder = true + hSplitField.alignment = .right + hSplitField.formatter = percentFormatter + + let hSplitPopUpButton = HalfSplitRatioPopUpButton() + hSplitPopUpButton.translatesAutoresizingMaskIntoConstraints = false + hSplitPopUpButton.target = self + hSplitPopUpButton.action = #selector(didSelectHalfSplitRatioPreset(sender:)) + hSplitPopUpButton.defaults = Defaults.horizontalSplitRatio + hSplitPopUpButton.customField = hSplitField + configureHalfSplitRatioPopUpButton(hSplitPopUpButton) + + let vSplitField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + vSplitField.stringValue = String(Int(Defaults.verticalSplitRatio.value)) + vSplitField.delegate = self + vSplitField.defaults = Defaults.verticalSplitRatio + vSplitField.fallbackValue = 50 + vSplitField.translatesAutoresizingMaskIntoConstraints = false + vSplitField.refusesFirstResponder = true + vSplitField.alignment = .right + vSplitField.formatter = percentFormatter + + let vSplitPopUpButton = HalfSplitRatioPopUpButton() + vSplitPopUpButton.translatesAutoresizingMaskIntoConstraints = false + vSplitPopUpButton.target = self + vSplitPopUpButton.action = #selector(didSelectHalfSplitRatioPreset(sender:)) + vSplitPopUpButton.defaults = Defaults.verticalSplitRatio + vSplitPopUpButton.customField = vSplitField + configureHalfSplitRatioPopUpButton(vSplitPopUpButton) + + hSplitField.defaultsSetAction = { [weak hSplitPopUpButton] in + hSplitPopUpButton?.selectCurrentValue() + } + vSplitField.defaultsSetAction = { [weak vSplitPopUpButton] in + vSplitPopUpButton?.selectCurrentValue() + } + + tileRowsShortcutView.setAssociatedUserDefaultsKey(WindowAction.tileRows.name, withTransformerName: MASDictionaryTransformerName) + tileColumnsShortcutView.setAssociatedUserDefaultsKey(WindowAction.tileColumns.name, withTransformerName: MASDictionaryTransformerName) + + largerWidthShortcutView.setAssociatedUserDefaultsKey(WindowAction.largerWidth.name, withTransformerName: MASDictionaryTransformerName) + smallerWidthShortcutView.setAssociatedUserDefaultsKey(WindowAction.smallerWidth.name, withTransformerName: MASDictionaryTransformerName) + + topVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.topVerticalThird.name, withTransformerName: MASDictionaryTransformerName) + middleVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.middleVerticalThird.name, withTransformerName: MASDictionaryTransformerName) + bottomVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomVerticalThird.name, withTransformerName: MASDictionaryTransformerName) + topVerticalTwoThirdsShortcutView.setAssociatedUserDefaultsKey(WindowAction.topVerticalTwoThirds.name, withTransformerName: MASDictionaryTransformerName) + bottomVerticalTwoThirdsShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomVerticalTwoThirds.name, withTransformerName: MASDictionaryTransformerName) + + topLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftEighth.name, withTransformerName: MASDictionaryTransformerName) + topCenterLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topCenterLeftEighth.name, withTransformerName: MASDictionaryTransformerName) + topCenterRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topCenterRightEighth.name, withTransformerName: MASDictionaryTransformerName) + topRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topRightEighth.name, withTransformerName: MASDictionaryTransformerName) + bottomLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomLeftEighth.name, withTransformerName: MASDictionaryTransformerName) + bottomCenterLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomCenterLeftEighth.name, withTransformerName: MASDictionaryTransformerName) + bottomCenterRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomCenterRightEighth.name, withTransformerName: MASDictionaryTransformerName) + bottomRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomRightEighth.name, withTransformerName: MASDictionaryTransformerName) + + if Defaults.allowAnyShortcut.enabled { + let passThroughValidator = PassthroughShortcutValidator() + tileRowsShortcutView.shortcutValidator = passThroughValidator + tileColumnsShortcutView.shortcutValidator = passThroughValidator + largerWidthShortcutView.shortcutValidator = passThroughValidator + smallerWidthShortcutView.shortcutValidator = passThroughValidator + topVerticalThirdShortcutView.shortcutValidator = passThroughValidator + middleVerticalThirdShortcutView.shortcutValidator = passThroughValidator + bottomVerticalThirdShortcutView.shortcutValidator = passThroughValidator + topVerticalTwoThirdsShortcutView.shortcutValidator = passThroughValidator + bottomVerticalTwoThirdsShortcutView.shortcutValidator = passThroughValidator + topLeftEighthShortcutView.shortcutValidator = passThroughValidator + topCenterLeftEighthShortcutView.shortcutValidator = passThroughValidator + topCenterRightEighthShortcutView.shortcutValidator = passThroughValidator + topRightEighthShortcutView.shortcutValidator = passThroughValidator + bottomLeftEighthShortcutView.shortcutValidator = passThroughValidator + bottomCenterLeftEighthShortcutView.shortcutValidator = passThroughValidator + bottomCenterRightEighthShortcutView.shortcutValidator = passThroughValidator + bottomRightEighthShortcutView.shortcutValidator = passThroughValidator + } + + let tileRowsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + tileRowsIcon.image = WindowAction.tileRows.image + tileRowsIcon.image?.size = NSSize(width: 21, height: 14) + + let tileColumnsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + tileColumnsIcon.image = WindowAction.tileColumns.image + tileColumnsIcon.image?.size = NSSize(width: 21, height: 14) + + let largerWidthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + largerWidthIcon.image = WindowAction.largerWidth.image + largerWidthIcon.image?.size = NSSize(width: 21, height: 14) + + let smallerWidthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + smallerWidthIcon.image = WindowAction.smallerWidth.image + smallerWidthIcon.image?.size = NSSize(width: 21, height: 14) + + let topVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + topVerticalThirdIcon.image = WindowAction.topVerticalThird.image + topVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) + + let middleVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + middleVerticalThirdIcon.image = WindowAction.middleVerticalThird.image + middleVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) + + let bottomVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + bottomVerticalThirdIcon.image = WindowAction.bottomVerticalThird.image + bottomVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) + + let topVerticalTwoThirdsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + topVerticalTwoThirdsIcon.image = WindowAction.topVerticalTwoThirds.image + topVerticalTwoThirdsIcon.image?.size = NSSize(width: 21, height: 14) + + let bottomVerticalTwoThirdsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + bottomVerticalTwoThirdsIcon.image = WindowAction.bottomVerticalTwoThirds.image + bottomVerticalTwoThirdsIcon.image?.size = NSSize(width: 21, height: 14) + + let topLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + topLeftEighthIcon.image = WindowAction.topLeftEighth.image + topLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let topCenterLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + topCenterLeftEighthIcon.image = WindowAction.topCenterLeftEighth.image + topCenterLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let topCenterRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + topCenterRightEighthIcon.image = WindowAction.topCenterRightEighth.image + topCenterRightEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let topRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + topRightEighthIcon.image = WindowAction.topRightEighth.image + topRightEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let bottomLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + bottomLeftEighthIcon.image = WindowAction.bottomLeftEighth.image + bottomLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let bottomCenterLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + bottomCenterLeftEighthIcon.image = WindowAction.bottomCenterLeftEighth.image + bottomCenterLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let bottomCenterRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + bottomCenterRightEighthIcon.image = WindowAction.bottomCenterRightEighth.image + bottomCenterRightEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let bottomRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + bottomRightEighthIcon.image = WindowAction.bottomRightEighth.image + bottomRightEighthIcon.image?.size = NSSize(width: 21, height: 14) + + let tileRowsLabelStack = NSStackView() + tileRowsLabelStack.orientation = .horizontal + tileRowsLabelStack.alignment = .centerY + tileRowsLabelStack.spacing = 8 + tileRowsLabelStack.addArrangedSubview(tileRowsLabel) + tileRowsLabelStack.addArrangedSubview(tileRowsIcon) + + let tileColumnsLabelStack = NSStackView() + tileColumnsLabelStack.orientation = .horizontal + tileColumnsLabelStack.alignment = .centerY + tileColumnsLabelStack.spacing = 8 + tileColumnsLabelStack.addArrangedSubview(tileColumnsLabel) + tileColumnsLabelStack.addArrangedSubview(tileColumnsIcon) + + let largerWidthLabelStack = NSStackView() + largerWidthLabelStack.orientation = .horizontal + largerWidthLabelStack.alignment = .centerY + largerWidthLabelStack.spacing = 8 + largerWidthLabelStack.addArrangedSubview(largerWidthLabel) + largerWidthLabelStack.addArrangedSubview(largerWidthIcon) + + let smallerWidthLabelStack = NSStackView() + smallerWidthLabelStack.orientation = .horizontal + smallerWidthLabelStack.alignment = .centerY + smallerWidthLabelStack.spacing = 8 + smallerWidthLabelStack.addArrangedSubview(smallerWidthLabel) + smallerWidthLabelStack.addArrangedSubview(smallerWidthIcon) + + let topVerticalThirdLabelStack = NSStackView() + topVerticalThirdLabelStack.orientation = .horizontal + topVerticalThirdLabelStack.alignment = .centerY + topVerticalThirdLabelStack.spacing = 8 + topVerticalThirdLabelStack.addArrangedSubview(topVerticalThirdLabel) + topVerticalThirdLabelStack.addArrangedSubview(topVerticalThirdIcon) + + let middleVerticalThirdLabelStack = NSStackView() + middleVerticalThirdLabelStack.orientation = .horizontal + middleVerticalThirdLabelStack.alignment = .centerY + middleVerticalThirdLabelStack.spacing = 8 + middleVerticalThirdLabelStack.addArrangedSubview(middleVerticalThirdLabel) + middleVerticalThirdLabelStack.addArrangedSubview(middleVerticalThirdIcon) + + let bottomVerticalThirdLabelStack = NSStackView() + bottomVerticalThirdLabelStack.orientation = .horizontal + bottomVerticalThirdLabelStack.alignment = .centerY + bottomVerticalThirdLabelStack.spacing = 8 + bottomVerticalThirdLabelStack.addArrangedSubview(bottomVerticalThirdLabel) + bottomVerticalThirdLabelStack.addArrangedSubview(bottomVerticalThirdIcon) + + let topVerticalTwoThirdsLabelStack = NSStackView() + topVerticalTwoThirdsLabelStack.orientation = .horizontal + topVerticalTwoThirdsLabelStack.alignment = .centerY + topVerticalTwoThirdsLabelStack.spacing = 8 + topVerticalTwoThirdsLabelStack.addArrangedSubview(topVerticalTwoThirdsLabel) + topVerticalTwoThirdsLabelStack.addArrangedSubview(topVerticalTwoThirdsIcon) + + let bottomVerticalTwoThirdsLabelStack = NSStackView() + bottomVerticalTwoThirdsLabelStack.orientation = .horizontal + bottomVerticalTwoThirdsLabelStack.alignment = .centerY + bottomVerticalTwoThirdsLabelStack.spacing = 8 + bottomVerticalTwoThirdsLabelStack.addArrangedSubview(bottomVerticalTwoThirdsLabel) + bottomVerticalTwoThirdsLabelStack.addArrangedSubview(bottomVerticalTwoThirdsIcon) + + let topLeftEighthLabelStack = NSStackView() + topLeftEighthLabelStack.orientation = .horizontal + topLeftEighthLabelStack.alignment = .centerY + topLeftEighthLabelStack.spacing = 8 + topLeftEighthLabelStack.addArrangedSubview(topLeftEighthLabel) + topLeftEighthLabelStack.addArrangedSubview(topLeftEighthIcon) + + let topCenterLeftEighthLabelStack = NSStackView() + topCenterLeftEighthLabelStack.orientation = .horizontal + topCenterLeftEighthLabelStack.alignment = .centerY + topCenterLeftEighthLabelStack.spacing = 8 + topCenterLeftEighthLabelStack.addArrangedSubview(topCenterLeftEighthLabel) + topCenterLeftEighthLabelStack.addArrangedSubview(topCenterLeftEighthIcon) + + let topCenterRightEighthLabelStack = NSStackView() + topCenterRightEighthLabelStack.orientation = .horizontal + topCenterRightEighthLabelStack.alignment = .centerY + topCenterRightEighthLabelStack.spacing = 8 + topCenterRightEighthLabelStack.addArrangedSubview(topCenterRightEighthLabel) + topCenterRightEighthLabelStack.addArrangedSubview(topCenterRightEighthIcon) + + let topRightEighthLabelStack = NSStackView() + topRightEighthLabelStack.orientation = .horizontal + topRightEighthLabelStack.alignment = .centerY + topRightEighthLabelStack.spacing = 8 + topRightEighthLabelStack.addArrangedSubview(topRightEighthLabel) + topRightEighthLabelStack.addArrangedSubview(topRightEighthIcon) + + let bottomLeftEighthLabelStack = NSStackView() + bottomLeftEighthLabelStack.orientation = .horizontal + bottomLeftEighthLabelStack.alignment = .centerY + bottomLeftEighthLabelStack.spacing = 8 + bottomLeftEighthLabelStack.addArrangedSubview(bottomLeftEighthLabel) + bottomLeftEighthLabelStack.addArrangedSubview(bottomLeftEighthIcon) + + let bottomCenterLeftEighthLabelStack = NSStackView() + bottomCenterLeftEighthLabelStack.orientation = .horizontal + bottomCenterLeftEighthLabelStack.alignment = .centerY + bottomCenterLeftEighthLabelStack.spacing = 8 + bottomCenterLeftEighthLabelStack.addArrangedSubview(bottomCenterLeftEighthLabel) + bottomCenterLeftEighthLabelStack.addArrangedSubview(bottomCenterLeftEighthIcon) + + let bottomCenterRightEighthLabelStack = NSStackView() + bottomCenterRightEighthLabelStack.orientation = .horizontal + bottomCenterRightEighthLabelStack.alignment = .centerY + bottomCenterRightEighthLabelStack.spacing = 8 + bottomCenterRightEighthLabelStack.addArrangedSubview(bottomCenterRightEighthLabel) + bottomCenterRightEighthLabelStack.addArrangedSubview(bottomCenterRightEighthIcon) + + let bottomRightEighthLabelStack = NSStackView() + bottomRightEighthLabelStack.orientation = .horizontal + bottomRightEighthLabelStack.alignment = .centerY + bottomRightEighthLabelStack.spacing = 8 + bottomRightEighthLabelStack.addArrangedSubview(bottomRightEighthLabel) + bottomRightEighthLabelStack.addArrangedSubview(bottomRightEighthIcon) + + let tileRowsRow = NSStackView() + tileRowsRow.orientation = .horizontal + tileRowsRow.alignment = .centerY + tileRowsRow.spacing = 18 + tileRowsRow.addArrangedSubview(tileRowsLabelStack) + tileRowsRow.addArrangedSubview(tileRowsShortcutView) + + let tileColumnsRow = NSStackView() + tileColumnsRow.orientation = .horizontal + tileColumnsRow.alignment = .centerY + tileColumnsRow.spacing = 18 + tileColumnsRow.addArrangedSubview(tileColumnsLabelStack) + tileColumnsRow.addArrangedSubview(tileColumnsShortcutView) + + let largerWidthRow = NSStackView() + largerWidthRow.orientation = .horizontal + largerWidthRow.alignment = .centerY + largerWidthRow.spacing = 18 + largerWidthRow.addArrangedSubview(largerWidthLabelStack) + largerWidthRow.addArrangedSubview(largerWidthShortcutView) + + let smallerWidthRow = NSStackView() + smallerWidthRow.orientation = .horizontal + smallerWidthRow.alignment = .centerY + smallerWidthRow.spacing = 18 + smallerWidthRow.addArrangedSubview(smallerWidthLabelStack) + smallerWidthRow.addArrangedSubview(smallerWidthShortcutView) + + let widthStepRow = NSStackView() + widthStepRow.orientation = .horizontal + widthStepRow.alignment = .centerY + widthStepRow.spacing = 18 + widthStepRow.addArrangedSubview(widthStepLabel) + widthStepRow.addArrangedSubview(widthStepField) + + let hSplitRow = NSStackView() + hSplitRow.orientation = .horizontal + hSplitRow.alignment = .centerY + hSplitRow.spacing = 18 + hSplitRow.addArrangedSubview(hSplitLabel) + let hSplitControlsStack = NSStackView() + hSplitControlsStack.orientation = .horizontal + hSplitControlsStack.alignment = .centerY + hSplitControlsStack.spacing = 8 + hSplitControlsStack.addArrangedSubview(hSplitPopUpButton) + hSplitControlsStack.addArrangedSubview(hSplitField) + hSplitRow.addArrangedSubview(hSplitControlsStack) + + let vSplitRow = NSStackView() + vSplitRow.orientation = .horizontal + vSplitRow.alignment = .centerY + vSplitRow.spacing = 18 + vSplitRow.addArrangedSubview(vSplitLabel) + let vSplitControlsStack = NSStackView() + vSplitControlsStack.orientation = .horizontal + vSplitControlsStack.alignment = .centerY + vSplitControlsStack.spacing = 8 + vSplitControlsStack.addArrangedSubview(vSplitPopUpButton) + vSplitControlsStack.addArrangedSubview(vSplitField) + vSplitRow.addArrangedSubview(vSplitControlsStack) + + let topVerticalThirdRow = NSStackView() + topVerticalThirdRow.orientation = .horizontal + topVerticalThirdRow.alignment = .centerY + topVerticalThirdRow.spacing = 18 + topVerticalThirdRow.addArrangedSubview(topVerticalThirdLabelStack) + topVerticalThirdRow.addArrangedSubview(topVerticalThirdShortcutView) + + let middleVerticalThirdRow = NSStackView() + middleVerticalThirdRow.orientation = .horizontal + middleVerticalThirdRow.alignment = .centerY + middleVerticalThirdRow.spacing = 18 + middleVerticalThirdRow.addArrangedSubview(middleVerticalThirdLabelStack) + middleVerticalThirdRow.addArrangedSubview(middleVerticalThirdShortcutView) + + let bottomVerticalThirdRow = NSStackView() + bottomVerticalThirdRow.orientation = .horizontal + bottomVerticalThirdRow.alignment = .centerY + bottomVerticalThirdRow.spacing = 18 + bottomVerticalThirdRow.addArrangedSubview(bottomVerticalThirdLabelStack) + bottomVerticalThirdRow.addArrangedSubview(bottomVerticalThirdShortcutView) + + let topVerticalTwoThirdsRow = NSStackView() + topVerticalTwoThirdsRow.orientation = .horizontal + topVerticalTwoThirdsRow.alignment = .centerY + topVerticalTwoThirdsRow.spacing = 18 + topVerticalTwoThirdsRow.addArrangedSubview(topVerticalTwoThirdsLabelStack) + topVerticalTwoThirdsRow.addArrangedSubview(topVerticalTwoThirdsShortcutView) + + let bottomVerticalTwoThirdsRow = NSStackView() + bottomVerticalTwoThirdsRow.orientation = .horizontal + bottomVerticalTwoThirdsRow.alignment = .centerY + bottomVerticalTwoThirdsRow.spacing = 18 + bottomVerticalTwoThirdsRow.addArrangedSubview(bottomVerticalTwoThirdsLabelStack) + bottomVerticalTwoThirdsRow.addArrangedSubview(bottomVerticalTwoThirdsShortcutView) + + let topLeftEighthRow = NSStackView() + topLeftEighthRow.orientation = .horizontal + topLeftEighthRow.alignment = .centerY + topLeftEighthRow.spacing = 18 + topLeftEighthRow.addArrangedSubview(topLeftEighthLabelStack) + topLeftEighthRow.addArrangedSubview(topLeftEighthShortcutView) + + let topCenterLeftEighthRow = NSStackView() + topCenterLeftEighthRow.orientation = .horizontal + topCenterLeftEighthRow.alignment = .centerY + topCenterLeftEighthRow.spacing = 18 + topCenterLeftEighthRow.addArrangedSubview(topCenterLeftEighthLabelStack) + topCenterLeftEighthRow.addArrangedSubview(topCenterLeftEighthShortcutView) + + let topCenterRightEighthRow = NSStackView() + topCenterRightEighthRow.orientation = .horizontal + topCenterRightEighthRow.alignment = .centerY + topCenterRightEighthRow.spacing = 18 + topCenterRightEighthRow.addArrangedSubview(topCenterRightEighthLabelStack) + topCenterRightEighthRow.addArrangedSubview(topCenterRightEighthShortcutView) + + let topRightEighthRow = NSStackView() + topRightEighthRow.orientation = .horizontal + topRightEighthRow.alignment = .centerY + topRightEighthRow.spacing = 18 + topRightEighthRow.addArrangedSubview(topRightEighthLabelStack) + topRightEighthRow.addArrangedSubview(topRightEighthShortcutView) + + let bottomLeftEighthRow = NSStackView() + bottomLeftEighthRow.orientation = .horizontal + bottomLeftEighthRow.alignment = .centerY + bottomLeftEighthRow.spacing = 18 + bottomLeftEighthRow.addArrangedSubview(bottomLeftEighthLabelStack) + bottomLeftEighthRow.addArrangedSubview(bottomLeftEighthShortcutView) + + let bottomCenterLeftEighthRow = NSStackView() + bottomCenterLeftEighthRow.orientation = .horizontal + bottomCenterLeftEighthRow.alignment = .centerY + bottomCenterLeftEighthRow.spacing = 18 + bottomCenterLeftEighthRow.addArrangedSubview(bottomCenterLeftEighthLabelStack) + bottomCenterLeftEighthRow.addArrangedSubview(bottomCenterLeftEighthShortcutView) + + let bottomCenterRightEighthRow = NSStackView() + bottomCenterRightEighthRow.orientation = .horizontal + bottomCenterRightEighthRow.alignment = .centerY + bottomCenterRightEighthRow.spacing = 18 + bottomCenterRightEighthRow.addArrangedSubview(bottomCenterRightEighthLabelStack) + bottomCenterRightEighthRow.addArrangedSubview(bottomCenterRightEighthShortcutView) + + let bottomRightEighthRow = NSStackView() + bottomRightEighthRow.orientation = .horizontal + bottomRightEighthRow.alignment = .centerY + bottomRightEighthRow.spacing = 18 + bottomRightEighthRow.addArrangedSubview(bottomRightEighthLabelStack) + bottomRightEighthRow.addArrangedSubview(bottomRightEighthShortcutView) + + mainStackView.addArrangedSubview(headerLabel) + mainStackView.setCustomSpacing(10, after: headerLabel) + mainStackView.addArrangedSubview(tileRowsRow) + mainStackView.addArrangedSubview(tileColumnsRow) + mainStackView.setCustomSpacing(10, after: tileColumnsRow) + + let tileGridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "General settings group for multi-window grid limits")) + tileGridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) + tileGridHeaderLabel.alignment = .center + tileGridHeaderLabel.translatesAutoresizingMaskIntoConstraints = false + + let columnsLimitRow = TileGridLimitRow( + title: NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "Maximum windows stacked in each tiled column"), + defaults: Defaults.tileColumnsMaxWindows) + let rowsLimitRow = TileGridLimitRow( + title: NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "Maximum windows placed side by side in each tiled row"), + defaults: Defaults.tileRowsMaxWindows) + tileGridLimitRows = [columnsLimitRow, rowsLimitRow] + mainStackView.addArrangedSubview(tileGridHeaderLabel) + mainStackView.addArrangedSubview(columnsLimitRow) + mainStackView.addArrangedSubview(rowsLimitRow) + mainStackView.setCustomSpacing(10, after: rowsLimitRow) + + mainStackView.addArrangedSubview(largerWidthRow) + mainStackView.addArrangedSubview(smallerWidthRow) + mainStackView.addArrangedSubview(widthStepRow) + mainStackView.addArrangedSubview(topVerticalThirdRow) + mainStackView.addArrangedSubview(middleVerticalThirdRow) + mainStackView.addArrangedSubview(bottomVerticalThirdRow) + mainStackView.addArrangedSubview(topVerticalTwoThirdsRow) + mainStackView.addArrangedSubview(bottomVerticalTwoThirdsRow) + mainStackView.setCustomSpacing(10, after: bottomVerticalTwoThirdsRow) + // Grid Positions - cycling shortcuts for larger grids + let showAdditionalSizesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show additional sizes in menu", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleShowAdditionalSizesInMenu(_:))) + showAdditionalSizesCheckbox.state = Defaults.showAdditionalSizesInMenu.userEnabled ? .on : .off + showAdditionalSizesCheckbox.translatesAutoresizingMaskIntoConstraints = false + showAdditionalSizesCheckbox.alignment = .left + showAdditionalSizesCheckbox.imageHugsTitle = true + + let gridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Grid Positions", tableName: "Main", value: "", comment: "")) + gridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) + gridHeaderLabel.alignment = .center + gridHeaderLabel.translatesAutoresizingMaskIntoConstraints = false + + let cyclingHintLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("Press the shortcut repeatedly to cycle through all positions in the grid.", tableName: "Main", value: "", comment: "")) + cyclingHintLabel.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize) + cyclingHintLabel.textColor = .secondaryLabelColor + cyclingHintLabel.alignment = .center + cyclingHintLabel.translatesAutoresizingMaskIntoConstraints = false + + // Cycling shortcut rows - Ninths, Twelfths, Sixteenths + let ninthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Ninths (3\u{00d7}3)", tableName: "Main", value: "", comment: "")) + ninthsCyclingLabel.alignment = .right + ninthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false + let twelfthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Twelfths (4\u{00d7}3)", tableName: "Main", value: "", comment: "")) + twelfthsCyclingLabel.alignment = .right + twelfthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false + + let sixteenthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Sixteenths (4\u{00d7}4)", tableName: "Main", value: "", comment: "")) + sixteenthsCyclingLabel.alignment = .right + sixteenthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false + + let ninthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let twelfthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + let sixteenthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + + ninthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftNinth.name, withTransformerName: MASDictionaryTransformerName) + twelfthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftTwelfth.name, withTransformerName: MASDictionaryTransformerName) + sixteenthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftSixteenth.name, withTransformerName: MASDictionaryTransformerName) + + let ninthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + ninthsCyclingIcon.image = WindowAction.topLeftNinth.image + ninthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) + let twelfthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + twelfthsCyclingIcon.image = WindowAction.topLeftTwelfth.image + twelfthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) + let sixteenthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) + sixteenthsCyclingIcon.image = WindowAction.topLeftSixteenth.image + sixteenthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) + + func makeLabelStack(_ label: NSTextField, _ icon: NSImageView) -> NSStackView { + let stack = NSStackView() + stack.orientation = .horizontal + stack.alignment = .centerY + stack.spacing = 8 + stack.addArrangedSubview(label) + stack.addArrangedSubview(icon) + return stack + } + + func makeRow(_ labelStack: NSStackView, _ shortcutView: MASShortcutView) -> NSStackView { + let row = NSStackView() + row.orientation = .horizontal + row.alignment = .centerY + row.spacing = 18 + row.addArrangedSubview(labelStack) + row.addArrangedSubview(shortcutView) + return row + } + + let ninthsCyclingRow = makeRow(makeLabelStack(ninthsCyclingLabel, ninthsCyclingIcon), ninthsCyclingShortcutView) + let twelfthsCyclingRow = makeRow(makeLabelStack(twelfthsCyclingLabel, twelfthsCyclingIcon), twelfthsCyclingShortcutView) + let sixteenthsCyclingRow = makeRow(makeLabelStack(sixteenthsCyclingLabel, sixteenthsCyclingIcon), sixteenthsCyclingShortcutView) + + if Defaults.allowAnyShortcut.enabled { + let passThroughValidator = PassthroughShortcutValidator() + ninthsCyclingShortcutView.shortcutValidator = passThroughValidator + twelfthsCyclingShortcutView.shortcutValidator = passThroughValidator + sixteenthsCyclingShortcutView.shortcutValidator = passThroughValidator + } + shortcutRecordingObserver.observe([ + tileRowsShortcutView, + tileColumnsShortcutView, + largerWidthShortcutView, + smallerWidthShortcutView, + topVerticalThirdShortcutView, + middleVerticalThirdShortcutView, + bottomVerticalThirdShortcutView, + topVerticalTwoThirdsShortcutView, + bottomVerticalTwoThirdsShortcutView, + topLeftEighthShortcutView, + topCenterLeftEighthShortcutView, + topCenterRightEighthShortcutView, + topRightEighthShortcutView, + bottomLeftEighthShortcutView, + bottomCenterLeftEighthShortcutView, + bottomCenterRightEighthShortcutView, + bottomRightEighthShortcutView, + ninthsCyclingShortcutView, + twelfthsCyclingShortcutView, + sixteenthsCyclingShortcutView + ]) + + let overlapOffsetCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleCyclingOverlapOffset(_:))) + overlapOffsetCheckbox.state = Defaults.cyclingOverlapOffset.userEnabled ? .on : .off + overlapOffsetCheckbox.translatesAutoresizingMaskIntoConstraints = false + overlapOffsetCheckbox.alignment = .left + + let stackBadgeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleStackBadge(_:))) + self.stackBadgeCheckbox = stackBadgeCheckbox + stackBadgeCheckbox.state = Defaults.stackBadge.userEnabled ? .on : .off + stackBadgeCheckbox.translatesAutoresizingMaskIntoConstraints = false + stackBadgeCheckbox.alignment = .left + + let stackBadgeToggleLabel = NSTextField(labelWithString: NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) + stackBadgeToggleLabel.alignment = .right + stackBadgeToggleLabel.translatesAutoresizingMaskIntoConstraints = false + let stackBadgeToggleShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) + stackBadgeToggleShortcutView.setAssociatedUserDefaultsKey(StackBadgeManager.toggleDefaultsKey, withTransformerName: MASDictionaryTransformerName) + stackBadgeToggleShortcutView.translatesAutoresizingMaskIntoConstraints = false + stackBadgeToggleShortcutView.shortcutValidator = AppShortcutValidator(defaultsKey: StackBadgeManager.toggleDefaultsKey) + shortcutRecordingObserver.observe([stackBadgeToggleShortcutView]) + let stackBadgeToggleRow = NSStackView() + stackBadgeToggleRow.orientation = .horizontal + stackBadgeToggleRow.alignment = .centerY + stackBadgeToggleRow.spacing = 18 + stackBadgeToggleRow.addArrangedSubview(stackBadgeToggleLabel) + stackBadgeToggleRow.addArrangedSubview(stackBadgeToggleShortcutView) + + mainStackView.addArrangedSubview(gridHeaderLabel) + mainStackView.setCustomSpacing(4, after: gridHeaderLabel) + mainStackView.addArrangedSubview(cyclingHintLabel) + mainStackView.setCustomSpacing(8, after: cyclingHintLabel) + mainStackView.addArrangedSubview(topLeftEighthRow) + mainStackView.addArrangedSubview(topCenterLeftEighthRow) + mainStackView.addArrangedSubview(topCenterRightEighthRow) + mainStackView.addArrangedSubview(topRightEighthRow) + mainStackView.addArrangedSubview(bottomLeftEighthRow) + mainStackView.addArrangedSubview(bottomCenterLeftEighthRow) + mainStackView.addArrangedSubview(bottomCenterRightEighthRow) + mainStackView.addArrangedSubview(bottomRightEighthRow) + mainStackView.addArrangedSubview(ninthsCyclingRow) + mainStackView.addArrangedSubview(twelfthsCyclingRow) + mainStackView.addArrangedSubview(sixteenthsCyclingRow) + mainStackView.addArrangedSubview(showAdditionalSizesCheckbox) + mainStackView.addArrangedSubview(overlapOffsetCheckbox) + mainStackView.addArrangedSubview(stackBadgeCheckbox) + mainStackView.setCustomSpacing(6, after: stackBadgeCheckbox) + mainStackView.addArrangedSubview(stackBadgeToggleRow) + mainStackView.setCustomSpacing(8, after: stackBadgeToggleRow) + + + mainStackView.addArrangedSubview(splitRatioHeaderLabel) + mainStackView.setCustomSpacing(10, after: splitRatioHeaderLabel) + mainStackView.addArrangedSubview(hSplitRow) + mainStackView.addArrangedSubview(vSplitRow) + + let halvesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleHalvesPreserveOtherAxisSize(_:))) + halvesCheckbox.state = Defaults.halvesPreserveOtherAxisSize.enabled ? .on : .off + halvesCheckbox.toolTip = NSLocalizedString("Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back.", tableName: "Main", value: "", comment: "") + halvesCheckbox.translatesAutoresizingMaskIntoConstraints = false + halvesCheckbox.alignment = .left + + mainStackView.setCustomSpacing(8, after: vSplitRow) + mainStackView.addArrangedSubview(halvesCheckbox) + halvesPreserveOtherAxisSizeCheckbox = halvesCheckbox + + let repeatedMaximizeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleRepeatedMaximizeRestoresPrevious(_:))) + repeatedMaximizeCheckbox.state = Defaults.repeatedMaximizeRestoresPrevious.enabled ? .on : .off + repeatedMaximizeCheckbox.toolTip = NSLocalizedString("After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position.", tableName: "Main", value: "", comment: "") + repeatedMaximizeCheckbox.translatesAutoresizingMaskIntoConstraints = false + repeatedMaximizeCheckbox.alignment = .left + + mainStackView.addArrangedSubview(repeatedMaximizeCheckbox) + repeatedMaximizeRestoresPreviousCheckbox = repeatedMaximizeCheckbox + + NSLayoutConstraint.activate([ + headerLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), + tileGridHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), + columnsLimitRow.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), + rowsLimitRow.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), + splitRatioHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), + tileRowsLabel.widthAnchor.constraint(equalTo: tileColumnsLabel.widthAnchor), + tileColumnsLabel.widthAnchor.constraint(equalTo: largerWidthLabel.widthAnchor), + largerWidthLabel.widthAnchor.constraint(equalTo: smallerWidthLabel.widthAnchor), + smallerWidthLabel.widthAnchor.constraint(equalTo: widthStepLabel.widthAnchor), + widthStepLabel.widthAnchor.constraint(equalTo: topVerticalThirdLabel.widthAnchor), + topVerticalThirdLabel.widthAnchor.constraint(equalTo: middleVerticalThirdLabel.widthAnchor), + middleVerticalThirdLabel.widthAnchor.constraint(equalTo: bottomVerticalThirdLabel.widthAnchor), + bottomVerticalThirdLabel.widthAnchor.constraint(equalTo: topVerticalTwoThirdsLabel.widthAnchor), + topVerticalTwoThirdsLabel.widthAnchor.constraint(equalTo: bottomVerticalTwoThirdsLabel.widthAnchor), + bottomVerticalTwoThirdsLabel.widthAnchor.constraint(equalTo: topLeftEighthLabel.widthAnchor), + topLeftEighthLabel.widthAnchor.constraint(equalTo: topCenterLeftEighthLabel.widthAnchor), + topCenterLeftEighthLabel.widthAnchor.constraint(equalTo: topCenterRightEighthLabel.widthAnchor), + topCenterRightEighthLabel.widthAnchor.constraint(equalTo: topRightEighthLabel.widthAnchor), + topRightEighthLabel.widthAnchor.constraint(equalTo: bottomLeftEighthLabel.widthAnchor), + bottomLeftEighthLabel.widthAnchor.constraint(equalTo: bottomCenterLeftEighthLabel.widthAnchor), + bottomCenterLeftEighthLabel.widthAnchor.constraint(equalTo: bottomCenterRightEighthLabel.widthAnchor), + bottomCenterRightEighthLabel.widthAnchor.constraint(equalTo: bottomRightEighthLabel.widthAnchor), + bottomRightEighthLabel.widthAnchor.constraint(equalTo: ninthsCyclingLabel.widthAnchor), + ninthsCyclingLabel.widthAnchor.constraint(equalTo: twelfthsCyclingLabel.widthAnchor), + twelfthsCyclingLabel.widthAnchor.constraint(equalTo: sixteenthsCyclingLabel.widthAnchor), + sixteenthsCyclingLabel.widthAnchor.constraint(equalTo: hSplitLabel.widthAnchor), + stackBadgeToggleShortcutView.leadingAnchor.constraint(equalTo: sixteenthsCyclingShortcutView.leadingAnchor), + stackBadgeToggleShortcutView.widthAnchor.constraint(equalToConstant: 160), + hSplitLabel.widthAnchor.constraint(equalTo: vSplitLabel.widthAnchor), + largerWidthLabelStack.widthAnchor.constraint(equalTo: smallerWidthLabelStack.widthAnchor), + tileRowsShortcutView.widthAnchor.constraint(equalToConstant: 160), + tileColumnsShortcutView.widthAnchor.constraint(equalToConstant: 160), + largerWidthShortcutView.widthAnchor.constraint(equalToConstant: 160), + smallerWidthShortcutView.widthAnchor.constraint(equalToConstant: 160), + widthStepField.widthAnchor.constraint(equalToConstant: 160), + hSplitControlsStack.widthAnchor.constraint(equalToConstant: 160), + vSplitControlsStack.widthAnchor.constraint(equalToConstant: 160), + hSplitPopUpButton.widthAnchor.constraint(equalToConstant: 100), + vSplitPopUpButton.widthAnchor.constraint(equalToConstant: 100), + hSplitField.widthAnchor.constraint(equalToConstant: 52), + vSplitField.widthAnchor.constraint(equalToConstant: 52), + topVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), + middleVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), + bottomVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), + topVerticalTwoThirdsShortcutView.widthAnchor.constraint(equalToConstant: 160), + bottomVerticalTwoThirdsShortcutView.widthAnchor.constraint(equalToConstant: 160), + topLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + topCenterLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + topCenterRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + topRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + bottomLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + bottomCenterLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + bottomCenterRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + bottomRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), + ninthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), + twelfthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), + sixteenthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), + widthStepField.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor), + tileRowsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + tileColumnsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + showAdditionalSizesCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + overlapOffsetCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + stackBadgeCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + smallerWidthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + topVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + middleVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + bottomVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + topVerticalTwoThirdsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + bottomVerticalTwoThirdsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + topLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + topCenterLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + topCenterRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + topRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + bottomLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + bottomCenterLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + bottomCenterRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + bottomRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + ninthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + twelfthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + sixteenthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), + gridHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), + cyclingHintLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor, constant: -20), + hSplitControlsStack.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor), + vSplitControlsStack.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor) + ]) + + let containerView = NSView() + containerView.addSubview(mainStackView) + + NSLayoutConstraint.activate([ + mainStackView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), + mainStackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -10), + mainStackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 15), + mainStackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -15) + ]) + + viewController.view = containerView + popover.contentViewController = viewController + extraSettingsPopover = popover + } + tileGridLimitRows.forEach { $0.reload() } + extraSettingsPopover?.show(relativeTo: sender.bounds, of: sender, preferredEdge: .maxY) + } + + @objc private func didSelectHalfSplitRatioPreset(sender: Any?) { + guard let popUpButton = sender as? HalfSplitRatioPopUpButton, + let defaults = popUpButton.defaults else { + Logger.log("Expected action to be sent from HalfSplitRatioPopUpButton. Instead, sender is: \(String(describing: sender))") + return + } + + guard popUpButton.selectedTag() != HalfSplitRatioPopUpButton.otherTag else { + popUpButton.customField?.isHidden = false + return + } + + guard let cycleSize = CycleSize(rawValue: popUpButton.selectedTag()) else { + Logger.log("Expected tag of half split ratio popup to match a value of CycleSize. Got: \(String(describing: popUpButton.selectedTag()))") + return + } + + defaults.value = cycleSize.percentValue + ActiveSideSplitRatios.shared.resetAll() + popUpButton.customField?.stringValue = "\(Int(round(cycleSize.percentValue)))" + popUpButton.customField?.isHidden = true + } + + private func configureHalfSplitRatioPopUpButton(_ popUpButton: HalfSplitRatioPopUpButton) { + popUpButton.removeAllItems() + + CycleSize.sortedSizes.forEach { cycleSize in + popUpButton.addItem(withTitle: cycleSize.title) + popUpButton.lastItem?.tag = cycleSize.rawValue + } + + popUpButton.addItem(withTitle: NSLocalizedString("Other", tableName: "Main", value: "", comment: "")) + popUpButton.lastItem?.tag = HalfSplitRatioPopUpButton.otherTag + popUpButton.selectCurrentValue() + } + +} + +class TileGridLimitRow: NSStackView, NSTextFieldDelegate { + private let defaults: PositiveIntDefault + private let field = NSTextField() + private let stepper = NSStepper() + + init(title: String, defaults: PositiveIntDefault) { + self.defaults = defaults + super.init(frame: .zero) + orientation = .horizontal + alignment = .centerY + spacing = 8 + translatesAutoresizingMaskIntoConstraints = false + + let label = NSTextField(labelWithString: title) + label.setContentCompressionResistancePriority(.required, for: .horizontal) + label.setContentHuggingPriority(.defaultLow, for: .horizontal) + + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + formatter.maximum = NSNumber(value: Int.max) + field.formatter = formatter + field.delegate = self + field.alignment = .right + field.refusesFirstResponder = false + field.setAccessibilityLabel(title) + field.translatesAutoresizingMaskIntoConstraints = false + field.widthAnchor.constraint(equalToConstant: 72).isActive = true + + stepper.minValue = 1 + stepper.maxValue = Double(Int.max) + stepper.increment = 1 + stepper.valueWraps = false + stepper.target = self + stepper.action = #selector(stepLimit(_:)) + stepper.setAccessibilityLabel(title) + + let controls: [NSControl] = [label, field, stepper] + controls.forEach { control in + control.setContentCompressionResistancePriority(.required, for: .vertical) + control.setContentHuggingPriority(.defaultHigh, for: .vertical) + addArrangedSubview(control) + } + reload() + } + + required init?(coder: NSCoder) { + fatalError("TileGridLimitRow is created programmatically") + } + + func reload() { + field.stringValue = String(defaults.value) + stepper.doubleValue = Double(defaults.value) + } + + @objc private func stepLimit(_ sender: NSStepper) { + defaults.value = Int(exactly: sender.doubleValue) ?? Int.max + reload() + } + + func controlTextDidChange(_ obj: Notification) { + if let value = Int(field.stringValue), value > 0 { + defaults.value = value + stepper.doubleValue = Double(defaults.value) + } + } + + func controlTextDidEndEditing(_ obj: Notification) { + reload() + } +} diff --git a/Rectangle/PrefsWindow/SettingsViewController.swift b/Rectangle/PrefsWindow/SettingsViewController.swift index 05059e457..f29692d79 100644 --- a/Rectangle/PrefsWindow/SettingsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsViewController.swift @@ -39,21 +39,24 @@ class SettingsViewController: NSViewController { @IBOutlet weak var extraSettingsButton: NSButton! private var aboutTodoWindowController: NSWindowController? - private var extraSettingsPopover: NSPopover? - private let shortcutRecordingObserver = ShortcutRecordingObserver() - private var tilingShortcutViews = [MASShortcutView]() - private var tileGridLimitRows = [TileGridLimitRow]() private var cycleSizeCheckboxes = [NSButton]() private var cornerCycleExpansionAxisButtons = [NSButton]() private var cooperativeCornerResizeCheckbox: NSButton? - private var stackBadgeCheckbox: NSButton? + private var combinedDisplayModeCheckbox: NSButton? private var greenButtonOverrideCheckbox: NSButton? private var autoMaximizeCheckbox: NSButton? - private var halvesPreserveOtherAxisSizeCheckbox: NSButton? - private var repeatedMaximizeRestoresPreviousCheckbox: NSButton? + // Used in extras popover extension + var extraSettingsPopover: NSPopover? + var tilingShortcutViews = [MASShortcutView]() + let shortcutRecordingObserver = ShortcutRecordingObserver() + var tileGridLimitRows = [TileGridLimitRow]() + var halvesPreserveOtherAxisSizeCheckbox: NSButton? + var stackBadgeCheckbox: NSButton? + var repeatedMaximizeRestoresPreviousCheckbox: NSButton? + @IBAction func toggleLaunchOnLogin(_ sender: NSButton) { let newSetting: Bool = sender.state == .on LaunchOnLogin.isEnabled = newSetting @@ -299,867 +302,7 @@ class SettingsViewController: NSViewController { } @IBAction func showExtraSettings(_ sender: NSButton) { - if extraSettingsPopover == nil { - let popover = NSPopover() - popover.behavior = .transient - let viewController = NSViewController() - - let mainStackView = NSStackView() - mainStackView.orientation = .vertical - mainStackView.alignment = .leading - mainStackView.spacing = 5 - mainStackView.translatesAutoresizingMaskIntoConstraints = false - - let headerLabel = NSTextField(labelWithString: NSLocalizedString("Extra Shortcuts", tableName: "Main", value: "", comment: "")) - headerLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - headerLabel.alignment = .center - headerLabel.translatesAutoresizingMaskIntoConstraints = false - - let tileRowsLabel = NSTextField(labelWithString: NSLocalizedString("tileRows.title", tableName: "Main", value: "Tile Windows in Rows", comment: "")) - tileRowsLabel.alignment = .right - tileRowsLabel.translatesAutoresizingMaskIntoConstraints = false - let tileColumnsLabel = NSTextField(labelWithString: NSLocalizedString("tileColumns.title", tableName: "Main", value: "Tile Windows in Columns", comment: "")) - tileColumnsLabel.alignment = .right - tileColumnsLabel.translatesAutoresizingMaskIntoConstraints = false - - let tileRowsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let tileColumnsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - tilingShortcutViews = [tileRowsShortcutView, tileColumnsShortcutView] - - let largerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Larger Width", tableName: "Main", value: "", comment: "")) - largerWidthLabel.alignment = .right - let smallerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Smaller Width", tableName: "Main", value: "", comment: "")) - smallerWidthLabel.alignment = .right - let widthStepLabel = NSTextField(labelWithString: NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) - widthStepLabel.alignment = .right - - let topVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Top Third", tableName: "Main", value: "", comment: "")) - topVerticalThirdLabel.alignment = .right - let middleVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Middle Third", tableName: "Main", value: "", comment: "")) - middleVerticalThirdLabel.alignment = .right - let bottomVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Third", tableName: "Main", value: "", comment: "")) - bottomVerticalThirdLabel.alignment = .right - let topVerticalTwoThirdsLabel = NSTextField(labelWithString: NSLocalizedString("Top Two Thirds", tableName: "Main", value: "", comment: "")) - topVerticalTwoThirdsLabel.alignment = .right - let bottomVerticalTwoThirdsLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Two Thirds", tableName: "Main", value: "", comment: "")) - bottomVerticalTwoThirdsLabel.alignment = .right - - let topLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Left Eighth", tableName: "Main", value: "", comment: "")) - topLeftEighthLabel.alignment = .right - let topCenterLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Center Left Eighth", tableName: "Main", value: "", comment: "")) - topCenterLeftEighthLabel.alignment = .right - let topCenterRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Center Right Eighth", tableName: "Main", value: "", comment: "")) - topCenterRightEighthLabel.alignment = .right - let topRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Right Eighth", tableName: "Main", value: "", comment: "")) - topRightEighthLabel.alignment = .right - let bottomLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Left Eighth", tableName: "Main", value: "", comment: "")) - bottomLeftEighthLabel.alignment = .right - let bottomCenterLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Center Left Eighth", tableName: "Main", value: "", comment: "")) - bottomCenterLeftEighthLabel.alignment = .right - let bottomCenterRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Center Right Eighth", tableName: "Main", value: "", comment: "")) - bottomCenterRightEighthLabel.alignment = .right - let bottomRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Right Eighth", tableName: "Main", value: "", comment: "")) - bottomRightEighthLabel.alignment = .right - - largerWidthLabel.translatesAutoresizingMaskIntoConstraints = false - smallerWidthLabel.translatesAutoresizingMaskIntoConstraints = false - widthStepLabel.translatesAutoresizingMaskIntoConstraints = false - topVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false - middleVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false - bottomVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false - topVerticalTwoThirdsLabel.translatesAutoresizingMaskIntoConstraints = false - bottomVerticalTwoThirdsLabel.translatesAutoresizingMaskIntoConstraints = false - topLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - topCenterLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - topCenterRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - topRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomCenterLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomCenterRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - - let largerWidthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let smallerWidthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - let topVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let middleVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topVerticalTwoThirdsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomVerticalTwoThirdsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - let topLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topCenterLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topCenterRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomCenterLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomCenterRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - let widthStepField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - widthStepField.stringValue = String(Int(Defaults.widthStepSize.value)) - widthStepField.delegate = self - widthStepField.defaults = Defaults.widthStepSize - widthStepField.translatesAutoresizingMaskIntoConstraints = false - widthStepField.refusesFirstResponder = true - widthStepField.alignment = .right - - let integerFormatter = NumberFormatter() - integerFormatter.allowsFloats = false - integerFormatter.minimum = 1 - widthStepField.formatter = integerFormatter - - let splitRatioHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) - splitRatioHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - splitRatioHeaderLabel.alignment = .center - splitRatioHeaderLabel.translatesAutoresizingMaskIntoConstraints = false - - let hSplitLabel = NSTextField(labelWithString: NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) - hSplitLabel.alignment = .right - hSplitLabel.translatesAutoresizingMaskIntoConstraints = false - - let vSplitLabel = NSTextField(labelWithString: NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) - vSplitLabel.alignment = .right - vSplitLabel.translatesAutoresizingMaskIntoConstraints = false - - let percentFormatter = NumberFormatter() - percentFormatter.allowsFloats = false - percentFormatter.minimum = 1 - percentFormatter.maximum = 99 - - let hSplitField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - hSplitField.stringValue = String(Int(Defaults.horizontalSplitRatio.value)) - hSplitField.delegate = self - hSplitField.defaults = Defaults.horizontalSplitRatio - hSplitField.fallbackValue = 50 - hSplitField.translatesAutoresizingMaskIntoConstraints = false - hSplitField.refusesFirstResponder = true - hSplitField.alignment = .right - hSplitField.formatter = percentFormatter - - let hSplitPopUpButton = HalfSplitRatioPopUpButton() - hSplitPopUpButton.translatesAutoresizingMaskIntoConstraints = false - hSplitPopUpButton.target = self - hSplitPopUpButton.action = #selector(didSelectHalfSplitRatioPreset(sender:)) - hSplitPopUpButton.defaults = Defaults.horizontalSplitRatio - hSplitPopUpButton.customField = hSplitField - configureHalfSplitRatioPopUpButton(hSplitPopUpButton) - - let vSplitField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - vSplitField.stringValue = String(Int(Defaults.verticalSplitRatio.value)) - vSplitField.delegate = self - vSplitField.defaults = Defaults.verticalSplitRatio - vSplitField.fallbackValue = 50 - vSplitField.translatesAutoresizingMaskIntoConstraints = false - vSplitField.refusesFirstResponder = true - vSplitField.alignment = .right - vSplitField.formatter = percentFormatter - - let vSplitPopUpButton = HalfSplitRatioPopUpButton() - vSplitPopUpButton.translatesAutoresizingMaskIntoConstraints = false - vSplitPopUpButton.target = self - vSplitPopUpButton.action = #selector(didSelectHalfSplitRatioPreset(sender:)) - vSplitPopUpButton.defaults = Defaults.verticalSplitRatio - vSplitPopUpButton.customField = vSplitField - configureHalfSplitRatioPopUpButton(vSplitPopUpButton) - - hSplitField.defaultsSetAction = { [weak hSplitPopUpButton] in - hSplitPopUpButton?.selectCurrentValue() - } - vSplitField.defaultsSetAction = { [weak vSplitPopUpButton] in - vSplitPopUpButton?.selectCurrentValue() - } - - tileRowsShortcutView.setAssociatedUserDefaultsKey(WindowAction.tileRows.name, withTransformerName: MASDictionaryTransformerName) - tileColumnsShortcutView.setAssociatedUserDefaultsKey(WindowAction.tileColumns.name, withTransformerName: MASDictionaryTransformerName) - - largerWidthShortcutView.setAssociatedUserDefaultsKey(WindowAction.largerWidth.name, withTransformerName: MASDictionaryTransformerName) - smallerWidthShortcutView.setAssociatedUserDefaultsKey(WindowAction.smallerWidth.name, withTransformerName: MASDictionaryTransformerName) - - topVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.topVerticalThird.name, withTransformerName: MASDictionaryTransformerName) - middleVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.middleVerticalThird.name, withTransformerName: MASDictionaryTransformerName) - bottomVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomVerticalThird.name, withTransformerName: MASDictionaryTransformerName) - topVerticalTwoThirdsShortcutView.setAssociatedUserDefaultsKey(WindowAction.topVerticalTwoThirds.name, withTransformerName: MASDictionaryTransformerName) - bottomVerticalTwoThirdsShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomVerticalTwoThirds.name, withTransformerName: MASDictionaryTransformerName) - - topLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - topCenterLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topCenterLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - topCenterRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topCenterRightEighth.name, withTransformerName: MASDictionaryTransformerName) - topRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topRightEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomCenterLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomCenterLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomCenterRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomCenterRightEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomRightEighth.name, withTransformerName: MASDictionaryTransformerName) - - if Defaults.allowAnyShortcut.enabled { - let passThroughValidator = PassthroughShortcutValidator() - tileRowsShortcutView.shortcutValidator = passThroughValidator - tileColumnsShortcutView.shortcutValidator = passThroughValidator - largerWidthShortcutView.shortcutValidator = passThroughValidator - smallerWidthShortcutView.shortcutValidator = passThroughValidator - topVerticalThirdShortcutView.shortcutValidator = passThroughValidator - middleVerticalThirdShortcutView.shortcutValidator = passThroughValidator - bottomVerticalThirdShortcutView.shortcutValidator = passThroughValidator - topVerticalTwoThirdsShortcutView.shortcutValidator = passThroughValidator - bottomVerticalTwoThirdsShortcutView.shortcutValidator = passThroughValidator - topLeftEighthShortcutView.shortcutValidator = passThroughValidator - topCenterLeftEighthShortcutView.shortcutValidator = passThroughValidator - topCenterRightEighthShortcutView.shortcutValidator = passThroughValidator - topRightEighthShortcutView.shortcutValidator = passThroughValidator - bottomLeftEighthShortcutView.shortcutValidator = passThroughValidator - bottomCenterLeftEighthShortcutView.shortcutValidator = passThroughValidator - bottomCenterRightEighthShortcutView.shortcutValidator = passThroughValidator - bottomRightEighthShortcutView.shortcutValidator = passThroughValidator - } - - let tileRowsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - tileRowsIcon.image = WindowAction.tileRows.image - tileRowsIcon.image?.size = NSSize(width: 21, height: 14) - - let tileColumnsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - tileColumnsIcon.image = WindowAction.tileColumns.image - tileColumnsIcon.image?.size = NSSize(width: 21, height: 14) - - let largerWidthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - largerWidthIcon.image = WindowAction.largerWidth.image - largerWidthIcon.image?.size = NSSize(width: 21, height: 14) - - let smallerWidthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - smallerWidthIcon.image = WindowAction.smallerWidth.image - smallerWidthIcon.image?.size = NSSize(width: 21, height: 14) - - let topVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topVerticalThirdIcon.image = WindowAction.topVerticalThird.image - topVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) - - let middleVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - middleVerticalThirdIcon.image = WindowAction.middleVerticalThird.image - middleVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomVerticalThirdIcon.image = WindowAction.bottomVerticalThird.image - bottomVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) - - let topVerticalTwoThirdsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topVerticalTwoThirdsIcon.image = WindowAction.topVerticalTwoThirds.image - topVerticalTwoThirdsIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomVerticalTwoThirdsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomVerticalTwoThirdsIcon.image = WindowAction.bottomVerticalTwoThirds.image - bottomVerticalTwoThirdsIcon.image?.size = NSSize(width: 21, height: 14) - - let topLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topLeftEighthIcon.image = WindowAction.topLeftEighth.image - topLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let topCenterLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topCenterLeftEighthIcon.image = WindowAction.topCenterLeftEighth.image - topCenterLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let topCenterRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topCenterRightEighthIcon.image = WindowAction.topCenterRightEighth.image - topCenterRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let topRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topRightEighthIcon.image = WindowAction.topRightEighth.image - topRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomLeftEighthIcon.image = WindowAction.bottomLeftEighth.image - bottomLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomCenterLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomCenterLeftEighthIcon.image = WindowAction.bottomCenterLeftEighth.image - bottomCenterLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomCenterRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomCenterRightEighthIcon.image = WindowAction.bottomCenterRightEighth.image - bottomCenterRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomRightEighthIcon.image = WindowAction.bottomRightEighth.image - bottomRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let tileRowsLabelStack = NSStackView() - tileRowsLabelStack.orientation = .horizontal - tileRowsLabelStack.alignment = .centerY - tileRowsLabelStack.spacing = 8 - tileRowsLabelStack.addArrangedSubview(tileRowsLabel) - tileRowsLabelStack.addArrangedSubview(tileRowsIcon) - - let tileColumnsLabelStack = NSStackView() - tileColumnsLabelStack.orientation = .horizontal - tileColumnsLabelStack.alignment = .centerY - tileColumnsLabelStack.spacing = 8 - tileColumnsLabelStack.addArrangedSubview(tileColumnsLabel) - tileColumnsLabelStack.addArrangedSubview(tileColumnsIcon) - - let largerWidthLabelStack = NSStackView() - largerWidthLabelStack.orientation = .horizontal - largerWidthLabelStack.alignment = .centerY - largerWidthLabelStack.spacing = 8 - largerWidthLabelStack.addArrangedSubview(largerWidthLabel) - largerWidthLabelStack.addArrangedSubview(largerWidthIcon) - - let smallerWidthLabelStack = NSStackView() - smallerWidthLabelStack.orientation = .horizontal - smallerWidthLabelStack.alignment = .centerY - smallerWidthLabelStack.spacing = 8 - smallerWidthLabelStack.addArrangedSubview(smallerWidthLabel) - smallerWidthLabelStack.addArrangedSubview(smallerWidthIcon) - - let topVerticalThirdLabelStack = NSStackView() - topVerticalThirdLabelStack.orientation = .horizontal - topVerticalThirdLabelStack.alignment = .centerY - topVerticalThirdLabelStack.spacing = 8 - topVerticalThirdLabelStack.addArrangedSubview(topVerticalThirdLabel) - topVerticalThirdLabelStack.addArrangedSubview(topVerticalThirdIcon) - - let middleVerticalThirdLabelStack = NSStackView() - middleVerticalThirdLabelStack.orientation = .horizontal - middleVerticalThirdLabelStack.alignment = .centerY - middleVerticalThirdLabelStack.spacing = 8 - middleVerticalThirdLabelStack.addArrangedSubview(middleVerticalThirdLabel) - middleVerticalThirdLabelStack.addArrangedSubview(middleVerticalThirdIcon) - - let bottomVerticalThirdLabelStack = NSStackView() - bottomVerticalThirdLabelStack.orientation = .horizontal - bottomVerticalThirdLabelStack.alignment = .centerY - bottomVerticalThirdLabelStack.spacing = 8 - bottomVerticalThirdLabelStack.addArrangedSubview(bottomVerticalThirdLabel) - bottomVerticalThirdLabelStack.addArrangedSubview(bottomVerticalThirdIcon) - - let topVerticalTwoThirdsLabelStack = NSStackView() - topVerticalTwoThirdsLabelStack.orientation = .horizontal - topVerticalTwoThirdsLabelStack.alignment = .centerY - topVerticalTwoThirdsLabelStack.spacing = 8 - topVerticalTwoThirdsLabelStack.addArrangedSubview(topVerticalTwoThirdsLabel) - topVerticalTwoThirdsLabelStack.addArrangedSubview(topVerticalTwoThirdsIcon) - - let bottomVerticalTwoThirdsLabelStack = NSStackView() - bottomVerticalTwoThirdsLabelStack.orientation = .horizontal - bottomVerticalTwoThirdsLabelStack.alignment = .centerY - bottomVerticalTwoThirdsLabelStack.spacing = 8 - bottomVerticalTwoThirdsLabelStack.addArrangedSubview(bottomVerticalTwoThirdsLabel) - bottomVerticalTwoThirdsLabelStack.addArrangedSubview(bottomVerticalTwoThirdsIcon) - - let topLeftEighthLabelStack = NSStackView() - topLeftEighthLabelStack.orientation = .horizontal - topLeftEighthLabelStack.alignment = .centerY - topLeftEighthLabelStack.spacing = 8 - topLeftEighthLabelStack.addArrangedSubview(topLeftEighthLabel) - topLeftEighthLabelStack.addArrangedSubview(topLeftEighthIcon) - - let topCenterLeftEighthLabelStack = NSStackView() - topCenterLeftEighthLabelStack.orientation = .horizontal - topCenterLeftEighthLabelStack.alignment = .centerY - topCenterLeftEighthLabelStack.spacing = 8 - topCenterLeftEighthLabelStack.addArrangedSubview(topCenterLeftEighthLabel) - topCenterLeftEighthLabelStack.addArrangedSubview(topCenterLeftEighthIcon) - - let topCenterRightEighthLabelStack = NSStackView() - topCenterRightEighthLabelStack.orientation = .horizontal - topCenterRightEighthLabelStack.alignment = .centerY - topCenterRightEighthLabelStack.spacing = 8 - topCenterRightEighthLabelStack.addArrangedSubview(topCenterRightEighthLabel) - topCenterRightEighthLabelStack.addArrangedSubview(topCenterRightEighthIcon) - - let topRightEighthLabelStack = NSStackView() - topRightEighthLabelStack.orientation = .horizontal - topRightEighthLabelStack.alignment = .centerY - topRightEighthLabelStack.spacing = 8 - topRightEighthLabelStack.addArrangedSubview(topRightEighthLabel) - topRightEighthLabelStack.addArrangedSubview(topRightEighthIcon) - - let bottomLeftEighthLabelStack = NSStackView() - bottomLeftEighthLabelStack.orientation = .horizontal - bottomLeftEighthLabelStack.alignment = .centerY - bottomLeftEighthLabelStack.spacing = 8 - bottomLeftEighthLabelStack.addArrangedSubview(bottomLeftEighthLabel) - bottomLeftEighthLabelStack.addArrangedSubview(bottomLeftEighthIcon) - - let bottomCenterLeftEighthLabelStack = NSStackView() - bottomCenterLeftEighthLabelStack.orientation = .horizontal - bottomCenterLeftEighthLabelStack.alignment = .centerY - bottomCenterLeftEighthLabelStack.spacing = 8 - bottomCenterLeftEighthLabelStack.addArrangedSubview(bottomCenterLeftEighthLabel) - bottomCenterLeftEighthLabelStack.addArrangedSubview(bottomCenterLeftEighthIcon) - - let bottomCenterRightEighthLabelStack = NSStackView() - bottomCenterRightEighthLabelStack.orientation = .horizontal - bottomCenterRightEighthLabelStack.alignment = .centerY - bottomCenterRightEighthLabelStack.spacing = 8 - bottomCenterRightEighthLabelStack.addArrangedSubview(bottomCenterRightEighthLabel) - bottomCenterRightEighthLabelStack.addArrangedSubview(bottomCenterRightEighthIcon) - - let bottomRightEighthLabelStack = NSStackView() - bottomRightEighthLabelStack.orientation = .horizontal - bottomRightEighthLabelStack.alignment = .centerY - bottomRightEighthLabelStack.spacing = 8 - bottomRightEighthLabelStack.addArrangedSubview(bottomRightEighthLabel) - bottomRightEighthLabelStack.addArrangedSubview(bottomRightEighthIcon) - - let tileRowsRow = NSStackView() - tileRowsRow.orientation = .horizontal - tileRowsRow.alignment = .centerY - tileRowsRow.spacing = 18 - tileRowsRow.addArrangedSubview(tileRowsLabelStack) - tileRowsRow.addArrangedSubview(tileRowsShortcutView) - - let tileColumnsRow = NSStackView() - tileColumnsRow.orientation = .horizontal - tileColumnsRow.alignment = .centerY - tileColumnsRow.spacing = 18 - tileColumnsRow.addArrangedSubview(tileColumnsLabelStack) - tileColumnsRow.addArrangedSubview(tileColumnsShortcutView) - - let largerWidthRow = NSStackView() - largerWidthRow.orientation = .horizontal - largerWidthRow.alignment = .centerY - largerWidthRow.spacing = 18 - largerWidthRow.addArrangedSubview(largerWidthLabelStack) - largerWidthRow.addArrangedSubview(largerWidthShortcutView) - - let smallerWidthRow = NSStackView() - smallerWidthRow.orientation = .horizontal - smallerWidthRow.alignment = .centerY - smallerWidthRow.spacing = 18 - smallerWidthRow.addArrangedSubview(smallerWidthLabelStack) - smallerWidthRow.addArrangedSubview(smallerWidthShortcutView) - - let widthStepRow = NSStackView() - widthStepRow.orientation = .horizontal - widthStepRow.alignment = .centerY - widthStepRow.spacing = 18 - widthStepRow.addArrangedSubview(widthStepLabel) - widthStepRow.addArrangedSubview(widthStepField) - - let hSplitRow = NSStackView() - hSplitRow.orientation = .horizontal - hSplitRow.alignment = .centerY - hSplitRow.spacing = 18 - hSplitRow.addArrangedSubview(hSplitLabel) - let hSplitControlsStack = NSStackView() - hSplitControlsStack.orientation = .horizontal - hSplitControlsStack.alignment = .centerY - hSplitControlsStack.spacing = 8 - hSplitControlsStack.addArrangedSubview(hSplitPopUpButton) - hSplitControlsStack.addArrangedSubview(hSplitField) - hSplitRow.addArrangedSubview(hSplitControlsStack) - - let vSplitRow = NSStackView() - vSplitRow.orientation = .horizontal - vSplitRow.alignment = .centerY - vSplitRow.spacing = 18 - vSplitRow.addArrangedSubview(vSplitLabel) - let vSplitControlsStack = NSStackView() - vSplitControlsStack.orientation = .horizontal - vSplitControlsStack.alignment = .centerY - vSplitControlsStack.spacing = 8 - vSplitControlsStack.addArrangedSubview(vSplitPopUpButton) - vSplitControlsStack.addArrangedSubview(vSplitField) - vSplitRow.addArrangedSubview(vSplitControlsStack) - - let topVerticalThirdRow = NSStackView() - topVerticalThirdRow.orientation = .horizontal - topVerticalThirdRow.alignment = .centerY - topVerticalThirdRow.spacing = 18 - topVerticalThirdRow.addArrangedSubview(topVerticalThirdLabelStack) - topVerticalThirdRow.addArrangedSubview(topVerticalThirdShortcutView) - - let middleVerticalThirdRow = NSStackView() - middleVerticalThirdRow.orientation = .horizontal - middleVerticalThirdRow.alignment = .centerY - middleVerticalThirdRow.spacing = 18 - middleVerticalThirdRow.addArrangedSubview(middleVerticalThirdLabelStack) - middleVerticalThirdRow.addArrangedSubview(middleVerticalThirdShortcutView) - - let bottomVerticalThirdRow = NSStackView() - bottomVerticalThirdRow.orientation = .horizontal - bottomVerticalThirdRow.alignment = .centerY - bottomVerticalThirdRow.spacing = 18 - bottomVerticalThirdRow.addArrangedSubview(bottomVerticalThirdLabelStack) - bottomVerticalThirdRow.addArrangedSubview(bottomVerticalThirdShortcutView) - - let topVerticalTwoThirdsRow = NSStackView() - topVerticalTwoThirdsRow.orientation = .horizontal - topVerticalTwoThirdsRow.alignment = .centerY - topVerticalTwoThirdsRow.spacing = 18 - topVerticalTwoThirdsRow.addArrangedSubview(topVerticalTwoThirdsLabelStack) - topVerticalTwoThirdsRow.addArrangedSubview(topVerticalTwoThirdsShortcutView) - - let bottomVerticalTwoThirdsRow = NSStackView() - bottomVerticalTwoThirdsRow.orientation = .horizontal - bottomVerticalTwoThirdsRow.alignment = .centerY - bottomVerticalTwoThirdsRow.spacing = 18 - bottomVerticalTwoThirdsRow.addArrangedSubview(bottomVerticalTwoThirdsLabelStack) - bottomVerticalTwoThirdsRow.addArrangedSubview(bottomVerticalTwoThirdsShortcutView) - - let topLeftEighthRow = NSStackView() - topLeftEighthRow.orientation = .horizontal - topLeftEighthRow.alignment = .centerY - topLeftEighthRow.spacing = 18 - topLeftEighthRow.addArrangedSubview(topLeftEighthLabelStack) - topLeftEighthRow.addArrangedSubview(topLeftEighthShortcutView) - - let topCenterLeftEighthRow = NSStackView() - topCenterLeftEighthRow.orientation = .horizontal - topCenterLeftEighthRow.alignment = .centerY - topCenterLeftEighthRow.spacing = 18 - topCenterLeftEighthRow.addArrangedSubview(topCenterLeftEighthLabelStack) - topCenterLeftEighthRow.addArrangedSubview(topCenterLeftEighthShortcutView) - - let topCenterRightEighthRow = NSStackView() - topCenterRightEighthRow.orientation = .horizontal - topCenterRightEighthRow.alignment = .centerY - topCenterRightEighthRow.spacing = 18 - topCenterRightEighthRow.addArrangedSubview(topCenterRightEighthLabelStack) - topCenterRightEighthRow.addArrangedSubview(topCenterRightEighthShortcutView) - - let topRightEighthRow = NSStackView() - topRightEighthRow.orientation = .horizontal - topRightEighthRow.alignment = .centerY - topRightEighthRow.spacing = 18 - topRightEighthRow.addArrangedSubview(topRightEighthLabelStack) - topRightEighthRow.addArrangedSubview(topRightEighthShortcutView) - - let bottomLeftEighthRow = NSStackView() - bottomLeftEighthRow.orientation = .horizontal - bottomLeftEighthRow.alignment = .centerY - bottomLeftEighthRow.spacing = 18 - bottomLeftEighthRow.addArrangedSubview(bottomLeftEighthLabelStack) - bottomLeftEighthRow.addArrangedSubview(bottomLeftEighthShortcutView) - - let bottomCenterLeftEighthRow = NSStackView() - bottomCenterLeftEighthRow.orientation = .horizontal - bottomCenterLeftEighthRow.alignment = .centerY - bottomCenterLeftEighthRow.spacing = 18 - bottomCenterLeftEighthRow.addArrangedSubview(bottomCenterLeftEighthLabelStack) - bottomCenterLeftEighthRow.addArrangedSubview(bottomCenterLeftEighthShortcutView) - - let bottomCenterRightEighthRow = NSStackView() - bottomCenterRightEighthRow.orientation = .horizontal - bottomCenterRightEighthRow.alignment = .centerY - bottomCenterRightEighthRow.spacing = 18 - bottomCenterRightEighthRow.addArrangedSubview(bottomCenterRightEighthLabelStack) - bottomCenterRightEighthRow.addArrangedSubview(bottomCenterRightEighthShortcutView) - - let bottomRightEighthRow = NSStackView() - bottomRightEighthRow.orientation = .horizontal - bottomRightEighthRow.alignment = .centerY - bottomRightEighthRow.spacing = 18 - bottomRightEighthRow.addArrangedSubview(bottomRightEighthLabelStack) - bottomRightEighthRow.addArrangedSubview(bottomRightEighthShortcutView) - - mainStackView.addArrangedSubview(headerLabel) - mainStackView.setCustomSpacing(10, after: headerLabel) - mainStackView.addArrangedSubview(tileRowsRow) - mainStackView.addArrangedSubview(tileColumnsRow) - mainStackView.setCustomSpacing(10, after: tileColumnsRow) - - let tileGridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "General settings group for multi-window grid limits")) - tileGridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - tileGridHeaderLabel.alignment = .center - tileGridHeaderLabel.translatesAutoresizingMaskIntoConstraints = false - - let columnsLimitRow = TileGridLimitRow( - title: NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "Maximum windows stacked in each tiled column"), - defaults: Defaults.tileColumnsMaxWindows) - let rowsLimitRow = TileGridLimitRow( - title: NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "Maximum windows placed side by side in each tiled row"), - defaults: Defaults.tileRowsMaxWindows) - tileGridLimitRows = [columnsLimitRow, rowsLimitRow] - mainStackView.addArrangedSubview(tileGridHeaderLabel) - mainStackView.addArrangedSubview(columnsLimitRow) - mainStackView.addArrangedSubview(rowsLimitRow) - mainStackView.setCustomSpacing(10, after: rowsLimitRow) - - mainStackView.addArrangedSubview(largerWidthRow) - mainStackView.addArrangedSubview(smallerWidthRow) - mainStackView.addArrangedSubview(widthStepRow) - mainStackView.addArrangedSubview(topVerticalThirdRow) - mainStackView.addArrangedSubview(middleVerticalThirdRow) - mainStackView.addArrangedSubview(bottomVerticalThirdRow) - mainStackView.addArrangedSubview(topVerticalTwoThirdsRow) - mainStackView.addArrangedSubview(bottomVerticalTwoThirdsRow) - mainStackView.setCustomSpacing(10, after: bottomVerticalTwoThirdsRow) - // Grid Positions - cycling shortcuts for larger grids - let showAdditionalSizesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show additional sizes in menu", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleShowAdditionalSizesInMenu(_:))) - showAdditionalSizesCheckbox.state = Defaults.showAdditionalSizesInMenu.userEnabled ? .on : .off - showAdditionalSizesCheckbox.translatesAutoresizingMaskIntoConstraints = false - showAdditionalSizesCheckbox.alignment = .left - showAdditionalSizesCheckbox.imageHugsTitle = true - - let gridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Grid Positions", tableName: "Main", value: "", comment: "")) - gridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - gridHeaderLabel.alignment = .center - gridHeaderLabel.translatesAutoresizingMaskIntoConstraints = false - - let cyclingHintLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("Press the shortcut repeatedly to cycle through all positions in the grid.", tableName: "Main", value: "", comment: "")) - cyclingHintLabel.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize) - cyclingHintLabel.textColor = .secondaryLabelColor - cyclingHintLabel.alignment = .center - cyclingHintLabel.translatesAutoresizingMaskIntoConstraints = false - - // Cycling shortcut rows - Ninths, Twelfths, Sixteenths - let ninthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Ninths (3\u{00d7}3)", tableName: "Main", value: "", comment: "")) - ninthsCyclingLabel.alignment = .right - ninthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - let twelfthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Twelfths (4\u{00d7}3)", tableName: "Main", value: "", comment: "")) - twelfthsCyclingLabel.alignment = .right - twelfthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - - let sixteenthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Sixteenths (4\u{00d7}4)", tableName: "Main", value: "", comment: "")) - sixteenthsCyclingLabel.alignment = .right - sixteenthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - - let ninthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let twelfthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let sixteenthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - ninthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftNinth.name, withTransformerName: MASDictionaryTransformerName) - twelfthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftTwelfth.name, withTransformerName: MASDictionaryTransformerName) - sixteenthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftSixteenth.name, withTransformerName: MASDictionaryTransformerName) - - let ninthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - ninthsCyclingIcon.image = WindowAction.topLeftNinth.image - ninthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) - let twelfthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - twelfthsCyclingIcon.image = WindowAction.topLeftTwelfth.image - twelfthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) - let sixteenthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - sixteenthsCyclingIcon.image = WindowAction.topLeftSixteenth.image - sixteenthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) - - func makeLabelStack(_ label: NSTextField, _ icon: NSImageView) -> NSStackView { - let stack = NSStackView() - stack.orientation = .horizontal - stack.alignment = .centerY - stack.spacing = 8 - stack.addArrangedSubview(label) - stack.addArrangedSubview(icon) - return stack - } - - func makeRow(_ labelStack: NSStackView, _ shortcutView: MASShortcutView) -> NSStackView { - let row = NSStackView() - row.orientation = .horizontal - row.alignment = .centerY - row.spacing = 18 - row.addArrangedSubview(labelStack) - row.addArrangedSubview(shortcutView) - return row - } - - let ninthsCyclingRow = makeRow(makeLabelStack(ninthsCyclingLabel, ninthsCyclingIcon), ninthsCyclingShortcutView) - let twelfthsCyclingRow = makeRow(makeLabelStack(twelfthsCyclingLabel, twelfthsCyclingIcon), twelfthsCyclingShortcutView) - let sixteenthsCyclingRow = makeRow(makeLabelStack(sixteenthsCyclingLabel, sixteenthsCyclingIcon), sixteenthsCyclingShortcutView) - - if Defaults.allowAnyShortcut.enabled { - let passThroughValidator = PassthroughShortcutValidator() - ninthsCyclingShortcutView.shortcutValidator = passThroughValidator - twelfthsCyclingShortcutView.shortcutValidator = passThroughValidator - sixteenthsCyclingShortcutView.shortcutValidator = passThroughValidator - } - shortcutRecordingObserver.observe([ - tileRowsShortcutView, - tileColumnsShortcutView, - largerWidthShortcutView, - smallerWidthShortcutView, - topVerticalThirdShortcutView, - middleVerticalThirdShortcutView, - bottomVerticalThirdShortcutView, - topVerticalTwoThirdsShortcutView, - bottomVerticalTwoThirdsShortcutView, - topLeftEighthShortcutView, - topCenterLeftEighthShortcutView, - topCenterRightEighthShortcutView, - topRightEighthShortcutView, - bottomLeftEighthShortcutView, - bottomCenterLeftEighthShortcutView, - bottomCenterRightEighthShortcutView, - bottomRightEighthShortcutView, - ninthsCyclingShortcutView, - twelfthsCyclingShortcutView, - sixteenthsCyclingShortcutView - ]) - - let overlapOffsetCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleCyclingOverlapOffset(_:))) - overlapOffsetCheckbox.state = Defaults.cyclingOverlapOffset.userEnabled ? .on : .off - overlapOffsetCheckbox.translatesAutoresizingMaskIntoConstraints = false - overlapOffsetCheckbox.alignment = .left - - let stackBadgeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleStackBadge(_:))) - self.stackBadgeCheckbox = stackBadgeCheckbox - stackBadgeCheckbox.state = Defaults.stackBadge.userEnabled ? .on : .off - stackBadgeCheckbox.translatesAutoresizingMaskIntoConstraints = false - stackBadgeCheckbox.alignment = .left - - let stackBadgeToggleLabel = NSTextField(labelWithString: NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) - stackBadgeToggleLabel.alignment = .right - stackBadgeToggleLabel.translatesAutoresizingMaskIntoConstraints = false - let stackBadgeToggleShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - stackBadgeToggleShortcutView.setAssociatedUserDefaultsKey(StackBadgeManager.toggleDefaultsKey, withTransformerName: MASDictionaryTransformerName) - stackBadgeToggleShortcutView.translatesAutoresizingMaskIntoConstraints = false - stackBadgeToggleShortcutView.shortcutValidator = AppShortcutValidator(defaultsKey: StackBadgeManager.toggleDefaultsKey) - shortcutRecordingObserver.observe([stackBadgeToggleShortcutView]) - let stackBadgeToggleRow = NSStackView() - stackBadgeToggleRow.orientation = .horizontal - stackBadgeToggleRow.alignment = .centerY - stackBadgeToggleRow.spacing = 18 - stackBadgeToggleRow.addArrangedSubview(stackBadgeToggleLabel) - stackBadgeToggleRow.addArrangedSubview(stackBadgeToggleShortcutView) - - mainStackView.addArrangedSubview(gridHeaderLabel) - mainStackView.setCustomSpacing(4, after: gridHeaderLabel) - mainStackView.addArrangedSubview(cyclingHintLabel) - mainStackView.setCustomSpacing(8, after: cyclingHintLabel) - mainStackView.addArrangedSubview(topLeftEighthRow) - mainStackView.addArrangedSubview(topCenterLeftEighthRow) - mainStackView.addArrangedSubview(topCenterRightEighthRow) - mainStackView.addArrangedSubview(topRightEighthRow) - mainStackView.addArrangedSubview(bottomLeftEighthRow) - mainStackView.addArrangedSubview(bottomCenterLeftEighthRow) - mainStackView.addArrangedSubview(bottomCenterRightEighthRow) - mainStackView.addArrangedSubview(bottomRightEighthRow) - mainStackView.addArrangedSubview(ninthsCyclingRow) - mainStackView.addArrangedSubview(twelfthsCyclingRow) - mainStackView.addArrangedSubview(sixteenthsCyclingRow) - mainStackView.addArrangedSubview(showAdditionalSizesCheckbox) - mainStackView.addArrangedSubview(overlapOffsetCheckbox) - mainStackView.addArrangedSubview(stackBadgeCheckbox) - mainStackView.setCustomSpacing(6, after: stackBadgeCheckbox) - mainStackView.addArrangedSubview(stackBadgeToggleRow) - mainStackView.setCustomSpacing(8, after: stackBadgeToggleRow) - - - mainStackView.addArrangedSubview(splitRatioHeaderLabel) - mainStackView.setCustomSpacing(10, after: splitRatioHeaderLabel) - mainStackView.addArrangedSubview(hSplitRow) - mainStackView.addArrangedSubview(vSplitRow) - - let halvesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleHalvesPreserveOtherAxisSize(_:))) - halvesCheckbox.state = Defaults.halvesPreserveOtherAxisSize.enabled ? .on : .off - halvesCheckbox.toolTip = NSLocalizedString("Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back.", tableName: "Main", value: "", comment: "") - halvesCheckbox.translatesAutoresizingMaskIntoConstraints = false - halvesCheckbox.alignment = .left - - mainStackView.setCustomSpacing(8, after: vSplitRow) - mainStackView.addArrangedSubview(halvesCheckbox) - halvesPreserveOtherAxisSizeCheckbox = halvesCheckbox - - let repeatedMaximizeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleRepeatedMaximizeRestoresPrevious(_:))) - repeatedMaximizeCheckbox.state = Defaults.repeatedMaximizeRestoresPrevious.enabled ? .on : .off - repeatedMaximizeCheckbox.toolTip = NSLocalizedString("After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position.", tableName: "Main", value: "", comment: "") - repeatedMaximizeCheckbox.translatesAutoresizingMaskIntoConstraints = false - repeatedMaximizeCheckbox.alignment = .left - - mainStackView.addArrangedSubview(repeatedMaximizeCheckbox) - repeatedMaximizeRestoresPreviousCheckbox = repeatedMaximizeCheckbox - - NSLayoutConstraint.activate([ - headerLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - tileGridHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - columnsLimitRow.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - rowsLimitRow.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - splitRatioHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - tileRowsLabel.widthAnchor.constraint(equalTo: tileColumnsLabel.widthAnchor), - tileColumnsLabel.widthAnchor.constraint(equalTo: largerWidthLabel.widthAnchor), - largerWidthLabel.widthAnchor.constraint(equalTo: smallerWidthLabel.widthAnchor), - smallerWidthLabel.widthAnchor.constraint(equalTo: widthStepLabel.widthAnchor), - widthStepLabel.widthAnchor.constraint(equalTo: topVerticalThirdLabel.widthAnchor), - topVerticalThirdLabel.widthAnchor.constraint(equalTo: middleVerticalThirdLabel.widthAnchor), - middleVerticalThirdLabel.widthAnchor.constraint(equalTo: bottomVerticalThirdLabel.widthAnchor), - bottomVerticalThirdLabel.widthAnchor.constraint(equalTo: topVerticalTwoThirdsLabel.widthAnchor), - topVerticalTwoThirdsLabel.widthAnchor.constraint(equalTo: bottomVerticalTwoThirdsLabel.widthAnchor), - bottomVerticalTwoThirdsLabel.widthAnchor.constraint(equalTo: topLeftEighthLabel.widthAnchor), - topLeftEighthLabel.widthAnchor.constraint(equalTo: topCenterLeftEighthLabel.widthAnchor), - topCenterLeftEighthLabel.widthAnchor.constraint(equalTo: topCenterRightEighthLabel.widthAnchor), - topCenterRightEighthLabel.widthAnchor.constraint(equalTo: topRightEighthLabel.widthAnchor), - topRightEighthLabel.widthAnchor.constraint(equalTo: bottomLeftEighthLabel.widthAnchor), - bottomLeftEighthLabel.widthAnchor.constraint(equalTo: bottomCenterLeftEighthLabel.widthAnchor), - bottomCenterLeftEighthLabel.widthAnchor.constraint(equalTo: bottomCenterRightEighthLabel.widthAnchor), - bottomCenterRightEighthLabel.widthAnchor.constraint(equalTo: bottomRightEighthLabel.widthAnchor), - bottomRightEighthLabel.widthAnchor.constraint(equalTo: ninthsCyclingLabel.widthAnchor), - ninthsCyclingLabel.widthAnchor.constraint(equalTo: twelfthsCyclingLabel.widthAnchor), - twelfthsCyclingLabel.widthAnchor.constraint(equalTo: sixteenthsCyclingLabel.widthAnchor), - sixteenthsCyclingLabel.widthAnchor.constraint(equalTo: hSplitLabel.widthAnchor), - stackBadgeToggleShortcutView.leadingAnchor.constraint(equalTo: sixteenthsCyclingShortcutView.leadingAnchor), - stackBadgeToggleShortcutView.widthAnchor.constraint(equalToConstant: 160), - hSplitLabel.widthAnchor.constraint(equalTo: vSplitLabel.widthAnchor), - largerWidthLabelStack.widthAnchor.constraint(equalTo: smallerWidthLabelStack.widthAnchor), - tileRowsShortcutView.widthAnchor.constraint(equalToConstant: 160), - tileColumnsShortcutView.widthAnchor.constraint(equalToConstant: 160), - largerWidthShortcutView.widthAnchor.constraint(equalToConstant: 160), - smallerWidthShortcutView.widthAnchor.constraint(equalToConstant: 160), - widthStepField.widthAnchor.constraint(equalToConstant: 160), - hSplitControlsStack.widthAnchor.constraint(equalToConstant: 160), - vSplitControlsStack.widthAnchor.constraint(equalToConstant: 160), - hSplitPopUpButton.widthAnchor.constraint(equalToConstant: 100), - vSplitPopUpButton.widthAnchor.constraint(equalToConstant: 100), - hSplitField.widthAnchor.constraint(equalToConstant: 52), - vSplitField.widthAnchor.constraint(equalToConstant: 52), - topVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), - middleVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), - topVerticalTwoThirdsShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomVerticalTwoThirdsShortcutView.widthAnchor.constraint(equalToConstant: 160), - topLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - topCenterLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - topCenterRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - topRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomCenterLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomCenterRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - ninthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), - twelfthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), - sixteenthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), - widthStepField.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor), - tileRowsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - tileColumnsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - showAdditionalSizesCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - overlapOffsetCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - stackBadgeCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - smallerWidthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - middleVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topVerticalTwoThirdsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomVerticalTwoThirdsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topCenterLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topCenterRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomCenterLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomCenterRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - ninthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - twelfthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - sixteenthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - gridHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - cyclingHintLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor, constant: -20), - hSplitControlsStack.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor), - vSplitControlsStack.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor) - ]) - - let containerView = NSView() - containerView.addSubview(mainStackView) - - NSLayoutConstraint.activate([ - mainStackView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), - mainStackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -10), - mainStackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 15), - mainStackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -15) - ]) - - viewController.view = containerView - popover.contentViewController = viewController - extraSettingsPopover = popover - } - tileGridLimitRows.forEach { $0.reload() } - extraSettingsPopover?.show(relativeTo: sender.bounds, of: sender, preferredEdge: .maxY) + showExtraSettingsPopover(sender) } override func awakeFromNib() { @@ -1476,42 +619,6 @@ class SettingsViewController: NSViewController { return button } - private func configureHalfSplitRatioPopUpButton(_ popUpButton: HalfSplitRatioPopUpButton) { - popUpButton.removeAllItems() - - CycleSize.sortedSizes.forEach { cycleSize in - popUpButton.addItem(withTitle: cycleSize.title) - popUpButton.lastItem?.tag = cycleSize.rawValue - } - - popUpButton.addItem(withTitle: NSLocalizedString("Other", tableName: "Main", value: "", comment: "")) - popUpButton.lastItem?.tag = HalfSplitRatioPopUpButton.otherTag - popUpButton.selectCurrentValue() - } - - @objc private func didSelectHalfSplitRatioPreset(sender: Any?) { - guard let popUpButton = sender as? HalfSplitRatioPopUpButton, - let defaults = popUpButton.defaults else { - Logger.log("Expected action to be sent from HalfSplitRatioPopUpButton. Instead, sender is: \(String(describing: sender))") - return - } - - guard popUpButton.selectedTag() != HalfSplitRatioPopUpButton.otherTag else { - popUpButton.customField?.isHidden = false - return - } - - guard let cycleSize = CycleSize(rawValue: popUpButton.selectedTag()) else { - Logger.log("Expected tag of half split ratio popup to match a value of CycleSize. Got: \(String(describing: popUpButton.selectedTag()))") - return - } - - defaults.value = cycleSize.percentValue - ActiveSideSplitRatios.shared.resetAll() - popUpButton.customField?.stringValue = "\(Int(round(cycleSize.percentValue)))" - popUpButton.customField?.isHidden = true - } - @objc private func didCheckCycleSizeCheckbox(sender: Any?) { guard let checkbox = sender as? NSButton else { Logger.log("Expected action to be sent from NSButton. Instead, sender is: \(String(describing: sender))") @@ -1617,78 +724,6 @@ extension SettingsViewController: NSTextFieldDelegate { } } -private class TileGridLimitRow: NSStackView, NSTextFieldDelegate { - private let defaults: PositiveIntDefault - private let field = NSTextField() - private let stepper = NSStepper() - - init(title: String, defaults: PositiveIntDefault) { - self.defaults = defaults - super.init(frame: .zero) - orientation = .horizontal - alignment = .centerY - spacing = 8 - translatesAutoresizingMaskIntoConstraints = false - - let label = NSTextField(labelWithString: title) - label.setContentCompressionResistancePriority(.required, for: .horizontal) - label.setContentHuggingPriority(.defaultLow, for: .horizontal) - - let formatter = NumberFormatter() - formatter.allowsFloats = false - formatter.minimum = 1 - formatter.maximum = NSNumber(value: Int.max) - field.formatter = formatter - field.delegate = self - field.alignment = .right - field.refusesFirstResponder = false - field.setAccessibilityLabel(title) - field.translatesAutoresizingMaskIntoConstraints = false - field.widthAnchor.constraint(equalToConstant: 72).isActive = true - - stepper.minValue = 1 - stepper.maxValue = Double(Int.max) - stepper.increment = 1 - stepper.valueWraps = false - stepper.target = self - stepper.action = #selector(stepLimit(_:)) - stepper.setAccessibilityLabel(title) - - let controls: [NSControl] = [label, field, stepper] - controls.forEach { control in - control.setContentCompressionResistancePriority(.required, for: .vertical) - control.setContentHuggingPriority(.defaultHigh, for: .vertical) - addArrangedSubview(control) - } - reload() - } - - required init?(coder: NSCoder) { - fatalError("TileGridLimitRow is created programmatically") - } - - func reload() { - field.stringValue = String(defaults.value) - stepper.doubleValue = Double(defaults.value) - } - - @objc private func stepLimit(_ sender: NSStepper) { - defaults.value = Int(exactly: sender.doubleValue) ?? Int.max - reload() - } - - func controlTextDidChange(_ obj: Notification) { - if let value = Int(field.stringValue), value > 0 { - defaults.value = value - stepper.doubleValue = Double(defaults.value) - } - } - - func controlTextDidEndEditing(_ obj: Notification) { - reload() - } -} - class AutoSaveFloatField: NSTextField { var defaults: FloatDefault? var defaultsSetAction: (() -> Void)? From 13a5a9c1d7ea1581028c77e8a8e72feb11009c29 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 08:28:33 -0400 Subject: [PATCH 09/79] An initial take on the SwiftUI general settings --- Rectangle.xcodeproj/project.pbxproj | 14 +- Rectangle/AppDelegate.swift | 3 + Rectangle/CycleSize.swift | 9 +- .../MASShortcutRepresentable.swift | 22 ++ Rectangle/PrefsWindow/SettingsView.swift | 222 +++++++++++++ Rectangle/PrefsWindow/SettingsViewModel.swift | 295 ++++++++++++++++++ .../SettingsWindowController.swift | 18 +- Rectangle/SubsequentExecutionMode.swift | 20 ++ Rectangle/TodoMode/TodoManager.swift | 17 +- 9 files changed, 595 insertions(+), 25 deletions(-) create mode 100644 Rectangle/PrefsWindow/MASShortcutRepresentable.swift create mode 100644 Rectangle/PrefsWindow/SettingsView.swift create mode 100644 Rectangle/PrefsWindow/SettingsViewModel.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 97c98fee9..484d75885 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -139,6 +139,9 @@ 98D16A492592B460005228CB /* NotificationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D16A482592B460005228CB /* NotificationExtension.swift */; }; 98D4B6C525B6256C009C7BF6 /* TodoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */; }; 98ED7038305D9AEE0077BD10 /* ExtraSettingsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */; }; + 98ED703A305DB1180077BD10 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7039305DB1180077BD10 /* SettingsView.swift */; }; + 98ED703C305DB20A0077BD10 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703B305DB20A0077BD10 /* SettingsViewModel.swift */; }; + 98ED703E305DC12D0077BD10 /* MASShortcutRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703D305DC12D0077BD10 /* MASShortcutRepresentable.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -369,6 +372,9 @@ 98D16A482592B460005228CB /* NotificationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtension.swift; sourceTree = ""; }; 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoManager.swift; sourceTree = ""; }; 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettingsPopover.swift; sourceTree = ""; }; + 98ED7039305DB1180077BD10 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + 98ED703B305DB20A0077BD10 /* SettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; }; + 98ED703D305DC12D0077BD10 /* MASShortcutRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutRepresentable.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -747,9 +753,12 @@ 98910B3C2311304D0066EC23 /* PrefsWindow */ = { isa = PBXGroup; children = ( + 98ED703D305DC12D0077BD10 /* MASShortcutRepresentable.swift */, + 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, + 98ED7039305DB1180077BD10 /* SettingsView.swift */, + 98ED703B305DB20A0077BD10 /* SettingsViewModel.swift */, 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */, 98985838305C1B6400459AFF /* SettingsWindowController.swift */, - 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, 98910B3D231130AF0066EC23 /* SettingsViewController.swift */, 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */, @@ -1053,6 +1062,7 @@ 98C27561231FFA5F009B9292 /* SnappingManager.swift in Sources */, 9824703722B0F3200037B409 /* WindowAction.swift in Sources */, 982470382EFA00010037B409 /* WindowActionCooperativeResize.swift in Sources */, + 98ED703E305DC12D0077BD10 /* MASShortcutRepresentable.swift in Sources */, B4521F932BD7CEFB00FD43CC /* ChangeWindowDimensionCalculation.swift in Sources */, 9821402922B3889100ABFB3F /* LowerLeftCalculation.swift in Sources */, 7BE578EF2C5BF4EE0083DAE3 /* CycleSize.swift in Sources */, @@ -1080,6 +1090,7 @@ AA49DD1129B8C1B100690E13 /* TitleBarManager.swift in Sources */, AA49DD2129B8C1B100690E13 /* GreenButtonManager.swift in Sources */, 9824700D22AF9B7D0037B409 /* AppDelegate.swift in Sources */, + 98ED703A305DB1180077BD10 /* SettingsView.swift in Sources */, 98A009BF251253AB00CFBF0C /* BottomRightSixthCalculation.swift in Sources */, 6490B39527BF96880056C220 /* TopLeftEighthCalculation.swift in Sources */, D04CE30227817A6100BD47B3 /* TopCenterNinthCalculation.swift in Sources */, @@ -1146,6 +1157,7 @@ FA34D0FF2F7E896E00EEBEF1 /* SpecificDisplayCalculation.swift in Sources */, 630644571003EB468CB643D8 /* BottomCenterRightSixteenthCalculation.swift in Sources */, 2D240EE416CC03AC921E3A4F /* BottomRightSixteenthCalculation.swift in Sources */, + 98ED703C305DB20A0077BD10 /* SettingsViewModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index b3d7e0be5..5a8ac95c7 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -253,11 +253,14 @@ class AppDelegate: NSObject, NSApplicationDelegate { return true } + var settingsWindowController: NSWindowController? @IBAction func openPreferences(_ sender: Any) { if prefsWindowController == nil { // prefsWindowController = SettingsWindowController() prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController + settingsWindowController = SettingsWindowController() } + settingsWindowController?.showWindow(self) NSApp.activate(ignoringOtherApps: true) prefsWindowController?.showWindow(self) } diff --git a/Rectangle/CycleSize.swift b/Rectangle/CycleSize.swift index 9a522f686..625c33c57 100644 --- a/Rectangle/CycleSize.swift +++ b/Rectangle/CycleSize.swift @@ -48,9 +48,16 @@ enum CycleSize: Int, CaseIterable { } } -enum CornerCycleExpansionAxis: Int { +enum CornerCycleExpansionAxis: Int, CaseIterable { case horizontal = 0 case vertical = 1 + + var title: String { + switch self { + case .horizontal: return "Horizontally" + case .vertical: return "Vertically" + } + } } extension CycleSize { diff --git a/Rectangle/PrefsWindow/MASShortcutRepresentable.swift b/Rectangle/PrefsWindow/MASShortcutRepresentable.swift new file mode 100644 index 000000000..fc3f3866e --- /dev/null +++ b/Rectangle/PrefsWindow/MASShortcutRepresentable.swift @@ -0,0 +1,22 @@ +import SwiftUI +import MASShortcut + +struct MASShortcutRepresentable: NSViewRepresentable { + let defaultsKey: String + let validator: MASShortcutValidator? + + func makeNSView(context: Context) -> MASShortcutView { + let view = MASShortcutView() + view.setAssociatedUserDefaultsKey(defaultsKey, withTransformerName: MASDictionaryTransformerName) + if let validator = validator { + view.shortcutValidator = validator + } + return view + } + + func updateNSView(_ nsView: MASShortcutView, context: Context) { + if let validator = validator { + nsView.shortcutValidator = validator + } + } +} diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/SettingsView.swift new file mode 100644 index 000000000..fba92a6f8 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsView.swift @@ -0,0 +1,222 @@ +import AppKit +import SwiftUI + +class GeneralSettingsViewController: NSViewController { + private var hostingController: NSHostingController! + + override func viewDidLoad() { + super.viewDidLoad() + + let swiftUIView = SettingsView() + hostingController = NSHostingController(rootView: swiftUIView) + + addChild(hostingController) + hostingController.view.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(hostingController.view) + + NSLayoutConstraint.activate([ + hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), + hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), + hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), + hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) + ]) + } +} + +struct SettingsView: View { + @ObservedObject var viewModel = SettingsViewModel() + + var body: some View { + Form { + // General Section + Section("General") { + Toggle("Launch on login", isOn: $viewModel.launchOnLogin) + + Picker("Subsequent execution mode", selection: $viewModel.subsequentExecutionMode) { + ForEach(SubsequentExecutionMode.ordered, id: \.self) { mode in + Text(mode.title).tag(mode) + } + } + + Toggle("Allow any shortcut", isOn: $viewModel.allowAnyShortcut) + + Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) + + LabeledContent { + Button("Check for Updates") { + viewModel.checkForUpdates() + } + } label: { + Text("Updates") + } + } + + // Gap Section + Section("Gap") { + LabeledContent("Gap size") { + HStack(spacing: 8) { + Slider(value: $viewModel.gapSize, in: 0...100, step: 1) + Text("\(Int(viewModel.gapSize)) px") + .monospacedDigit() + .frame(width: 45, alignment: .trailing) + } + } + + if viewModel.gapSize > 0 { + Toggle("Skip gap top edge", isOn: $viewModel.skipGapTopEdge) + } + } + + // Window & Display Section + Section("Window & Display") { + Toggle("Move cursor across displays", isOn: $viewModel.moveCursorAcrossDisplays) + + if viewModel.useCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } + + Toggle("Double click title bar", isOn: Binding( + get: { viewModel.doubleClickTitleBar != nil }, + set: { newValue in + viewModel.requestDoubleClickTitleBarChange(to: newValue) + } + )) + + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + Toggle("Halves preserve other axis size", isOn: $viewModel.halvesPreserveOtherAxisSize) + Toggle("Repeated maximize restores previous", isOn: $viewModel.repeatedMaximizeRestoresPrevious) + } + + // Stage Section (Conditional) + if StageUtil.stageCapable { + Section("Stage") { + LabeledContent("Stage size") { + HStack(spacing: 8) { + Slider(value: $viewModel.stageSize, in: 0...500, step: 1) + Text("\(Int(viewModel.stageSize)) px") + .monospacedDigit() + .frame(width: 45, alignment: .trailing) + } + } + } + } + + // Cycle Sizes Section + Section("Cycle Sizes") { + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Toggle(size.title, isOn: Binding( + get: { viewModel.selectedCycleSizes.contains(size) }, + set: { isSelected in + if isSelected { + viewModel.selectedCycleSizes.insert(size) + } else { + viewModel.selectedCycleSizes.remove(size) + } + } + )) + } + + Picker("Cyclic corner shortcuts expand", selection: $viewModel.cornerCycleExpansionAxis) { + ForEach(CornerCycleExpansionAxis.allCases, id: \.self) { axis in + Text(axis.title).tag(axis) + } + } + .pickerStyle(.segmented) + + Toggle("Resize adjacent windows when cycling side or corner shortcuts", isOn: $viewModel.cooperativeCornerResize) + } + + // Todo Section + Section("Todo") { + Toggle("Enable Todo mode", isOn: $viewModel.todoMode) + + if viewModel.todoMode { + LabeledContent("Toggle Todo Shortcut") { + MASShortcutRepresentable( + defaultsKey: TodoManager.toggleDefaultsKey, + validator: TodoShortcutValidator(defaultsKey: TodoManager.toggleDefaultsKey) + ) + .frame(width: 130, height: 22) + } + + LabeledContent("Reflow Todo Shortcut") { + MASShortcutRepresentable( + defaultsKey: TodoManager.reflowDefaultsKey, + validator: TodoShortcutValidator(defaultsKey: TodoManager.reflowDefaultsKey) + ) + .frame(width: 130, height: 22) + } + + LabeledContent("Sidebar width") { + HStack(spacing: 4) { + TextField("", value: $viewModel.todoSidebarWidth, formatter: NumberFormatter()) + .frame(width: 50) + .textFieldStyle(.roundedBorder) + + Picker("", selection: $viewModel.todoSidebarWidthUnit) { + ForEach(TodoSidebarWidthUnit.allCases, id: \.self) { unit in + Text(unit.description).tag(unit) + } + } + .labelsHidden() + .fixedSize() + } + } + + Picker("Sidebar side", selection: $viewModel.todoSidebarSide) { + ForEach(TodoSidebarSide.allCases, id: \.self) { side in + Text(side.title).tag(side) + } + } + } + } + + // Config Section + Section("Configuration") { + LabeledContent("Actions") { + HStack { + Button("Restore Defaults") { + viewModel.restoreDefaults() + } + Button("Export") { + viewModel.exportConfig() + } + Button("Import") { + viewModel.importConfig() + } + } + } + } + } + .formStyle(.grouped) + .toggleStyle(.switch) + .frame(minWidth: 500) + .padding() + .sheet(isPresented: $viewModel.showDoubleClickConflictAlert) { + VStack(spacing: 16) { + Text("Conflict with system setting") + .font(.headline) + + Text("To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.") + .multilineTextAlignment(.center) + .foregroundColor(.secondary) + + HStack { + Button("Close") { + viewModel.cancelDoubleClickTitleBarChange() + } + .keyboardShortcut(.cancelAction) + + Button("Open System Settings") { + viewModel.confirmDoubleClickTitleBarChange() + } + .keyboardShortcut(.defaultAction) + } + } + .padding(20) + .frame(width: 360) + } + } +} diff --git a/Rectangle/PrefsWindow/SettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsViewModel.swift new file mode 100644 index 000000000..c91b96894 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsViewModel.swift @@ -0,0 +1,295 @@ +import SwiftUI +import Combine + +class SettingsViewModel: ObservableObject { + // General Section + @Published var launchOnLogin: Bool { + didSet { + if oldValue != launchOnLogin { + Defaults.launchOnLogin.enabled = launchOnLogin + LaunchOnLogin.isEnabled = launchOnLogin + } + } + } + + @Published var subsequentExecutionMode: SubsequentExecutionMode { + didSet { + if oldValue != subsequentExecutionMode { + Defaults.subsequentExecutionMode.value = subsequentExecutionMode + // In SettingsViewController, this calls initializeCycleSizesView(animated: true) + NotificationCenter.default.post(name: .init("initializeCycleSizesView"), object: nil) + } + } + } + + @Published var allowAnyShortcut: Bool { + didSet { + if oldValue != allowAnyShortcut { + Defaults.allowAnyShortcut.enabled = allowAnyShortcut + Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) + } + } + } + + @Published var hideMenuBarIcon: Bool { + didSet { + if oldValue != hideMenuBarIcon { + Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon + RectangleStatusItem.instance.refreshVisibility() + } + } + } + + @Published var checkForUpdatesAutomatically: Bool { + didSet { + if oldValue != checkForUpdatesAutomatically { + Defaults.SUEnableAutomaticChecks.enabled = checkForUpdatesAutomatically + } + } + } + + // Gap Section + @Published var gapSize: Float { + didSet { + if oldValue != gapSize { + Defaults.gapSize.value = gapSize + } + } + } + + @Published var skipGapTopEdge: Bool { + didSet { + if oldValue != skipGapTopEdge { + Defaults.skipGapTopEdge.enabled = skipGapTopEdge + } + } + } + + // Window & Display Section + @Published var moveCursorAcrossDisplays: Bool { + didSet { + if oldValue != moveCursorAcrossDisplays { + Defaults.moveCursorAcrossDisplays.enabled = moveCursorAcrossDisplays + } + } + } + + @Published var useCursorScreenDetection: Bool { + didSet { + if oldValue != useCursorScreenDetection { + Defaults.useCursorScreenDetection.enabled = useCursorScreenDetection + } + } + } + + @Published var doubleClickTitleBar: WindowAction? { + didSet { + if oldValue != doubleClickTitleBar { + let val = (doubleClickTitleBar == nil) ? -1 : doubleClickTitleBar!.rawValue + Defaults.doubleClickTitleBar.value = val + 1 + Notification.Name.windowTitleBar.post() + } + } + } + + // For handling the alert in SwiftUI + @Published var showDoubleClickConflictAlert: Bool = false + + @Published var combinedDisplayMode: Bool { + didSet { + if oldValue != combinedDisplayMode { + Defaults.combinedDisplayMode.enabled = combinedDisplayMode + } + } + } + + @Published var greenButtonOverride: Bool { + didSet { + if oldValue != greenButtonOverride { + Defaults.greenButtonOverride.enabled = greenButtonOverride + Notification.Name.greenButtonOverride.post() + } + } + } + + @Published var autoMaximize: Bool { + didSet { + if oldValue != autoMaximize { + Defaults.autoMaximize.enabled = autoMaximize + } + } + } + + @Published var halvesPreserveOtherAxisSize: Bool { + didSet { + if oldValue != halvesPreserveOtherAxisSize { + Defaults.halvesPreserveOtherAxisSize.enabled = halvesPreserveOtherAxisSize + } + } + } + + @Published var repeatedMaximizeRestoresPrevious: Bool { + didSet { + if oldValue != repeatedMaximizeRestoresPrevious { + Defaults.repeatedMaximizeRestoresPrevious.enabled = repeatedMaximizeRestoresPrevious + } + } + } + + // Stage Section + @Published var stageSize: Float { + didSet { + if oldValue != stageSize { + let value = stageSize == 0 ? -1 : stageSize + Defaults.stageSize.value = value + } + } + } + + // Cycle Sizes Section + @Published var selectedCycleSizes: Set { + didSet { + if oldValue != selectedCycleSizes { + Defaults.selectedCycleSizes.value = selectedCycleSizes + Defaults.cycleSizesIsChanged.enabled = true + } + } + } + + @Published var cornerCycleExpansionAxis: CornerCycleExpansionAxis { + didSet { + if oldValue != cornerCycleExpansionAxis { + Defaults.cornerCycleExpansionAxis.value = cornerCycleExpansionAxis + } + } + } + + @Published var cooperativeCornerResize: Bool { + didSet { + if oldValue != cooperativeCornerResize { + Defaults.cooperativeCornerResize.enabled = cooperativeCornerResize + } + } + } + + // Todo Section + @Published var todoMode: Bool { + didSet { + if oldValue != todoMode { + Defaults.todo.enabled = todoMode + Notification.Name.todoMenuToggled.post() + } + } + } + + @Published var todoSidebarWidth: Float { + didSet { + if oldValue != todoSidebarWidth { + Defaults.todoSidebarWidth.value = todoSidebarWidth + TodoManager.changeSidebarWidthUnit(to: TodoSidebarWidthUnit(rawValue: Defaults.todoSidebarWidthUnit.value.rawValue) ?? .pixels) + TodoManager.moveAllIfNeeded(false) + } + } + } + + @Published var todoSidebarWidthUnit: TodoSidebarWidthUnit { + didSet { + if oldValue != todoSidebarWidthUnit { + Defaults.todoSidebarWidthUnit.value = todoSidebarWidthUnit + TodoManager.refreshTodoScreen() + TodoManager.changeSidebarWidthUnit(to: todoSidebarWidthUnit) + TodoManager.moveAllIfNeeded(false) + } + } + } + + @Published var todoSidebarSide: TodoSidebarSide { + didSet { + if oldValue != todoSidebarSide { + Defaults.todoSidebarSide.value = todoSidebarSide + TodoManager.moveAllIfNeeded(false) + } + } + } + + init() { + self.launchOnLogin = Defaults.launchOnLogin.enabled + self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled + self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled + self.checkForUpdatesAutomatically = Defaults.SUEnableAutomaticChecks.enabled + self.gapSize = Defaults.gapSize.value + self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled + self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled + self.useCursorScreenDetection = Defaults.useCursorScreenDetection.enabled + let doubleClickVal = Defaults.doubleClickTitleBar.value - 1 + self.doubleClickTitleBar = WindowAction(rawValue: doubleClickVal) + self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled + self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.autoMaximize = !Defaults.autoMaximize.userDisabled + self.halvesPreserveOtherAxisSize = Defaults.halvesPreserveOtherAxisSize.enabled + self.repeatedMaximizeRestoresPrevious = Defaults.repeatedMaximizeRestoresPrevious.enabled + if Defaults.stageSize.value < 0 { self.stageSize = 0 } else { self.stageSize = Defaults.stageSize.value } + + self.selectedCycleSizes = Defaults.selectedCycleSizes.value + self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value + self.cooperativeCornerResize = Defaults.cooperativeCornerResize.enabled + self.todoMode = Defaults.todo.userEnabled + self.todoSidebarWidth = Defaults.todoSidebarWidth.value + self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value + self.todoSidebarSide = Defaults.todoSidebarSide.value + } + + func requestDoubleClickTitleBarChange(to newSetting: Bool) { + if newSetting && !TitleBarManager.systemSettingDisabled { + showDoubleClickConflictAlert = true + } else { + doubleClickTitleBar = newSetting ? .maximize : nil + } + } + + func confirmDoubleClickTitleBarChange() { + NSWorkspace.shared.open(URL(string:"x-apple.systempreferences:com.apple.preference.dock")!) + doubleClickTitleBar = .maximize + showDoubleClickConflictAlert = false + } + + func cancelDoubleClickTitleBarChange() { + showDoubleClickConflictAlert = false + } + + func checkForUpdates() { + AppDelegate.instance.updaterController?.checkForUpdates(nil) + } + + func restoreDefaults() { + // Simplification for now, real implementation would have the alert + let rectangleDefaults = true // Defaulting to Rectangle for this step + WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } + Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults + Notification.Name.changeDefaults.post() + + Defaults.portraitSnapAreas.typedValue = nil + Defaults.landscapeSnapAreas.typedValue = nil + Notification.Name.defaultSnapAreas.post() + } + + func exportConfig() { + let savePanel = NSSavePanel() + savePanel.allowedContentTypes = [.json] + savePanel.nameFieldStringValue = "RectangleConfig" + if savePanel.runModal() == .OK, let url = savePanel.url { + if let jsonString = Defaults.encoded() { + try? jsonString.write(to: url, atomically: false, encoding: .utf8) + } + } + } + + func importConfig() { + let openPanel = NSOpenPanel() + openPanel.allowedContentTypes = [.json] + if openPanel.runModal() == .OK, let url = openPanel.url { + Defaults.load(fileUrl: url) + } + } +} diff --git a/Rectangle/PrefsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindowController.swift index e1d958e60..a954eff8d 100644 --- a/Rectangle/PrefsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindowController.swift @@ -42,7 +42,7 @@ class SettingsTabViewController: NSTabViewController { let generalVC = GeneralSettingsViewController() let generalItem = NSTabViewItem(viewController: generalVC) generalItem.label = "General" - generalItem.image = NSImage(systemSymbolName: "gearshape", accessibilityDescription: "General") + generalItem.image = NSImage(imageLiteralResourceName: "toolbarSettingsTemplate") addTabViewItem(generalItem) } @@ -78,22 +78,6 @@ class SettingsTabViewController: NSTabViewController { } } -// Example View Controllers -class GeneralSettingsViewController: NSViewController { - override func loadView() { - self.view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 200)) - - let label = NSTextField(labelWithString: "General Settings View") - label.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(label) - - NSLayoutConstraint.activate([ - label.centerXAnchor.constraint(equalTo: view.centerXAnchor), - label.centerYAnchor.constraint(equalTo: view.centerYAnchor) - ]) - } -} - class AdvancedSettingsViewController: NSViewController { override func loadView() { self.view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 200)) diff --git a/Rectangle/SubsequentExecutionMode.swift b/Rectangle/SubsequentExecutionMode.swift index 40f02b7f0..7ee4c0322 100644 --- a/Rectangle/SubsequentExecutionMode.swift +++ b/Rectangle/SubsequentExecutionMode.swift @@ -9,6 +9,26 @@ enum SubsequentExecutionMode: Int { case acrossAndResize = 3 // across monitor for right/left, spectacle resize for all else case cycleMonitor = 4 case resizeAndCycleQuadrants = 5 + + var title: String { + switch self { + case .resize: return "Cycle sizes on side actions" + case .acrossMonitor: return "Move to adjacent display on left or right" + case .none: return "Do Nothing" + case .acrossAndResize: return "Move to adjacent on left/right, or cycle size on side" + case .cycleMonitor: return "Cycle through displays" + case .resizeAndCycleQuadrants: return "Cycle positions on quadrants, cycle sizes on side" + } + } + + var resizes: Bool { + switch self { + case .resize, .acrossAndResize, .resizeAndCycleQuadrants: return true + default: return false + } + } + + static var ordered: [SubsequentExecutionMode] = [.none, .cycleMonitor, .resize, .acrossMonitor, .acrossAndResize, .resizeAndCycleQuadrants] } class SubsequentExecutionDefault: Default { diff --git a/Rectangle/TodoMode/TodoManager.swift b/Rectangle/TodoMode/TodoManager.swift index 31a85ad25..afddddaa0 100644 --- a/Rectangle/TodoMode/TodoManager.swift +++ b/Rectangle/TodoMode/TodoManager.swift @@ -372,21 +372,26 @@ class AppShortcutValidator: MASShortcutValidator { typealias TodoShortcutConflict = AppShortcutConflict typealias TodoShortcutValidator = AppShortcutValidator -enum TodoSidebarSide: Int { +enum TodoSidebarSide: Int, CaseIterable { case right = 1 case left = 2 + + var title: String { + switch self { + case .left: return "Left" + case .right: return "Right" + } + } } -enum TodoSidebarWidthUnit: Int, CustomStringConvertible { +enum TodoSidebarWidthUnit: Int, CaseIterable, CustomStringConvertible { case pixels = 1 case pct = 2 var description: String { switch self { - case .pixels: - return "px" - case .pct: - return "%" + case .pixels: return "px" + case .pct: return "%" } } } From 755845eaea1848588545529677901c57751317e5 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 08:48:07 -0400 Subject: [PATCH 10/79] More adjustments on the SwiftUI general settings --- .../MASShortcutRepresentable.swift | 2 +- Rectangle/PrefsWindow/SettingsView.swift | 345 +++++++++------- Rectangle/PrefsWindow/SettingsViewModel.swift | 367 ++++++++++-------- SWIFTUI_CONVERSION_PLAN.md | 60 +++ 4 files changed, 464 insertions(+), 310 deletions(-) create mode 100644 SWIFTUI_CONVERSION_PLAN.md diff --git a/Rectangle/PrefsWindow/MASShortcutRepresentable.swift b/Rectangle/PrefsWindow/MASShortcutRepresentable.swift index fc3f3866e..f95b162f3 100644 --- a/Rectangle/PrefsWindow/MASShortcutRepresentable.swift +++ b/Rectangle/PrefsWindow/MASShortcutRepresentable.swift @@ -1,7 +1,7 @@ import SwiftUI import MASShortcut -struct MASShortcutRepresentable: NSViewRepresentable { +struct MASShortcutViewRepresentable: NSViewRepresentable { let defaultsKey: String let validator: MASShortcutValidator? diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/SettingsView.swift index fba92a6f8..ac462f66a 100644 --- a/Rectangle/PrefsWindow/SettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsView.swift @@ -24,199 +24,256 @@ class GeneralSettingsViewController: NSViewController { } struct SettingsView: View { - @ObservedObject var viewModel = SettingsViewModel() + @StateObject private var viewModel = SettingsViewModel() var body: some View { Form { - // General Section - Section("General") { - Toggle("Launch on login", isOn: $viewModel.launchOnLogin) - - Picker("Subsequent execution mode", selection: $viewModel.subsequentExecutionMode) { - ForEach(SubsequentExecutionMode.ordered, id: \.self) { mode in - Text(mode.title).tag(mode) - } - } - - Toggle("Allow any shortcut", isOn: $viewModel.allowAnyShortcut) - - Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) - - LabeledContent { - Button("Check for Updates") { - viewModel.checkForUpdates() - } - } label: { - Text("Updates") + // MARK: - App & Updates + Section { + HStack { + Toggle("Launch on login", isOn: $viewModel.launchOnLogin) + Spacer() + Text(viewModel.versionString) + .foregroundColor(.secondary) + .font(.callout) } - } - // Gap Section - Section("Gap") { - LabeledContent("Gap size") { - HStack(spacing: 8) { - Slider(value: $viewModel.gapSize, in: 0...100, step: 1) - Text("\(Int(viewModel.gapSize)) px") - .monospacedDigit() - .frame(width: 45, alignment: .trailing) - } + Toggle("Hide menu bar icon", isOn: $viewModel.hideMenuBarIcon) + + if viewModel.hideMenuBarIcon { + Text("When the menu bar icon is hidden, relaunch Rectangle from Finder to open") + .font(.caption) + .foregroundColor(.secondary) + .padding(.leading, 18) } - if viewModel.gapSize > 0 { - Toggle("Skip gap top edge", isOn: $viewModel.skipGapTopEdge) + HStack { + Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) + Spacer() + Button(viewModel.hasPendingUpdate ? "Update Available…" : "Check for Updates…") { + viewModel.checkForUpdates() + } } } + .toggleStyle(.switch) - // Window & Display Section - Section("Window & Display") { - Toggle("Move cursor across displays", isOn: $viewModel.moveCursorAcrossDisplays) - - if viewModel.useCursorScreenDetection { - Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + // MARK: - Cycle Sizes & Window Behaviors + Section { + HStack { + Text("Repeated commands") + Spacer() + Picker("", selection: $viewModel.subsequentExecutionMode) { + ForEach(SubsequentExecutionMode.ordered, id: \.self) { mode in + Text(mode.title).tag(mode) + } + } + .frame(width: 320) } - Toggle("Double click title bar", isOn: Binding( - get: { viewModel.doubleClickTitleBar != nil }, - set: { newValue in - viewModel.requestDoubleClickTitleBarChange(to: newValue) - } - )) + if viewModel.subsequentExecutionMode.resizes { + VStack(alignment: .leading, spacing: 8) { + // Keep fraction choices as compact checkboxes + HStack(spacing: 12) { + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Toggle(size.title, isOn: viewModel.binding(for: size)) + .toggleStyle(.checkbox) + } + } - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) - Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - Toggle("Halves preserve other axis size", isOn: $viewModel.halvesPreserveOtherAxisSize) - Toggle("Repeated maximize restores previous", isOn: $viewModel.repeatedMaximizeRestoresPrevious) - } + HStack(spacing: 12) { + Text("Cyclic corner shortcuts expand:") + Picker("", selection: $viewModel.cornerCycleExpansionAxis) { + Text("horizontally").tag(CornerCycleExpansionAxis.horizontal) + Text("vertically").tag(CornerCycleExpansionAxis.vertical) + } + .pickerStyle(.radioGroup) + .horizontalRadioGroupLayout() + } - // Stage Section (Conditional) - if StageUtil.stageCapable { - Section("Stage") { - LabeledContent("Stage size") { - HStack(spacing: 8) { - Slider(value: $viewModel.stageSize, in: 0...500, step: 1) - Text("\(Int(viewModel.stageSize)) px") - .monospacedDigit() - .frame(width: 45, alignment: .trailing) + if viewModel.showCooperativeCornerResize { + Toggle("Resize adjacent windows when cycling side or corner shortcuts", isOn: $viewModel.cooperativeCornerResize) + .toggleStyle(.switch) } } + .padding(.leading, 4) + .transition(.opacity.combined(with: .move(edge: .top))) } - } - // Cycle Sizes Section - Section("Cycle Sizes") { - ForEach(CycleSize.sortedSizes, id: \.self) { size in - Toggle(size.title, isOn: Binding( - get: { viewModel.selectedCycleSizes.contains(size) }, - set: { isSelected in - if isSelected { - viewModel.selectedCycleSizes.insert(size) - } else { - viewModel.selectedCycleSizes.remove(size) + VStack(alignment: .leading, spacing: 4) { + HStack { + Text("Gaps between windows") + Slider( + value: $viewModel.gapSize, + in: 0...100, + step: 1, + onEditingChanged: { editing in + if !editing { viewModel.commitGapSize() } } - } - )) - } + ) + Text("\(Int(viewModel.gapSize)) px") + .frame(width: 45, alignment: .trailing) + } - Picker("Cyclic corner shortcuts expand", selection: $viewModel.cornerCycleExpansionAxis) { - ForEach(CornerCycleExpansionAxis.allCases, id: \.self) { axis in - Text(axis.title).tag(axis) + if viewModel.gapSize > 0 { + Toggle("Remove top gap when snapping to top edge", isOn: $viewModel.skipGapTopEdge) + .toggleStyle(.switch) + .padding(.leading, 18) } } - .pickerStyle(.segmented) - Toggle("Resize adjacent windows when cycling side or corner shortcuts", isOn: $viewModel.cooperativeCornerResize) - } + Group { + Toggle("Remove keyboard shortcut restrictions", isOn: $viewModel.allowAnyShortcut) + Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) - // Todo Section - Section("Todo") { - Toggle("Enable Todo mode", isOn: $viewModel.todoMode) + if viewModel.showCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } - if viewModel.todoMode { - LabeledContent("Toggle Todo Shortcut") { - MASShortcutRepresentable( - defaultsKey: TodoManager.toggleDefaultsKey, - validator: TodoShortcutValidator(defaultsKey: TodoManager.toggleDefaultsKey) - ) - .frame(width: 130, height: 22) + Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + + VStack(alignment: .leading, spacing: 2) { + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Text("Hold any modifier key or use the window menu for default macOS behavior") + .font(.caption) + .foregroundColor(.secondary) + .padding(.leading, 18) } - LabeledContent("Reflow Todo Shortcut") { - MASShortcutRepresentable( - defaultsKey: TodoManager.reflowDefaultsKey, - validator: TodoShortcutValidator(defaultsKey: TodoManager.reflowDefaultsKey) - ) - .frame(width: 130, height: 22) + if viewModel.showCombinedDisplayMode { + VStack(alignment: .leading, spacing: 2) { + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") + .font(.caption) + .foregroundColor(.secondary) + .padding(.leading, 18) + } } + } + .toggleStyle(.switch) + } - LabeledContent("Sidebar width") { - HStack(spacing: 4) { - TextField("", value: $viewModel.todoSidebarWidth, formatter: NumberFormatter()) - .frame(width: 50) - .textFieldStyle(.roundedBorder) + // MARK: - Todo Mode + Section { + HStack { + Toggle("Show Todo Mode in menu", isOn: $viewModel.todoEnabled) + .toggleStyle(.switch) + Button(action: viewModel.showTodoModeHelp) { + Image(systemName: "info.circle") + } + .buttonStyle(.plain) + } + + if viewModel.todoEnabled { + VStack(alignment: .leading, spacing: 10) { + Text("Keep a chosen application visible on the right of your primary screen at all times") + .font(.caption) + .foregroundColor(.secondary) + + HStack { + Text("Todo app width") + TextField("", value: $viewModel.todoSidebarWidth, format: .number) + .frame(width: 55) + .textFieldStyle(.roundedBorder) + .onSubmit { viewModel.commitTodoWidth() } + Picker("", selection: $viewModel.todoSidebarWidthUnit) { - ForEach(TodoSidebarWidthUnit.allCases, id: \.self) { unit in - Text(unit.description).tag(unit) - } + Text("px").tag(TodoSidebarWidthUnit.pixels) + Text("%").tag(TodoSidebarWidthUnit.pct) } - .labelsHidden() - .fixedSize() + .frame(width: 65) + + Spacer() + + Text("Todo side") + Picker("", selection: $viewModel.todoSidebarSide) { + Text("Left").tag(TodoSidebarSide.left) + Text("Right").tag(TodoSidebarSide.right) + } + .frame(width: 90) } - } - Picker("Sidebar side", selection: $viewModel.todoSidebarSide) { - ForEach(TodoSidebarSide.allCases, id: \.self) { side in - Text(side.title).tag(side) + HStack { + Text("Toggle Todo") + Spacer() + MASShortcutViewRepresentable( + defaultsKey: TodoManager.toggleDefaultsKey, + validator: TodoShortcutValidator(defaultsKey: TodoManager.toggleDefaultsKey) + ) + .frame(width: 130, height: 22) + } + + HStack { + Text("Reflow Todo") + Spacer() + MASShortcutViewRepresentable( + defaultsKey: TodoManager.reflowDefaultsKey, + validator: TodoShortcutValidator(defaultsKey: TodoManager.reflowDefaultsKey) + ) + .frame(width: 130, height: 22) } } + .padding(.leading, 18) + .transition(.opacity.combined(with: .move(edge: .top))) } } - // Config Section - Section("Configuration") { - LabeledContent("Actions") { - HStack { - Button("Restore Defaults") { - viewModel.restoreDefaults() - } - Button("Export") { - viewModel.exportConfig() - } - Button("Import") { - viewModel.importConfig() + // MARK: - Stage Manager + if viewModel.stageCapable { + Section { + VStack(alignment: .leading, spacing: 4) { + HStack { + Text("Stage Manager recent apps area") + Slider( + value: $viewModel.stageSize, + in: 0...400, + step: 1, + onEditingChanged: { editing in + if !editing { viewModel.commitStageSize() } + } + ) + Text("\(Int(viewModel.stageSize)) px") + .frame(width: 45, alignment: .trailing) } + Text("If the area is too small, recent apps will be hidden") + .font(.caption) + .foregroundColor(.secondary) } } } - } - .formStyle(.grouped) - .toggleStyle(.switch) - .frame(minWidth: 500) - .padding() - .sheet(isPresented: $viewModel.showDoubleClickConflictAlert) { - VStack(spacing: 16) { - Text("Conflict with system setting") - .font(.headline) - - Text("To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.") - .multilineTextAlignment(.center) - .foregroundColor(.secondary) - + + // MARK: - Footer Actions + Section { HStack { - Button("Close") { - viewModel.cancelDoubleClickTitleBarChange() + Button("Restore Default Shortcuts & Snap Areas") { + viewModel.restoreDefaults() + } + + Spacer() + + Button { + viewModel.importConfig() + } label: { + Label("Import", systemImage: "square.and.arrow.down") + } + + Button { + viewModel.exportConfig() + } label: { + Label("Export", systemImage: "square.and.arrow.up") } - .keyboardShortcut(.cancelAction) - Button("Open System Settings") { - viewModel.confirmDoubleClickTitleBarChange() + Button("Extras") { + viewModel.showExtrasPopover() } - .keyboardShortcut(.defaultAction) } } - .padding(20) - .frame(width: 360) } + .formStyle(.grouped) + .padding(20) + .frame(width: 600) + .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) + .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) } } diff --git a/Rectangle/PrefsWindow/SettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsViewModel.swift index c91b96894..41119773b 100644 --- a/Rectangle/PrefsWindow/SettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsViewModel.swift @@ -1,295 +1,332 @@ import SwiftUI -import Combine +import AppKit -class SettingsViewModel: ObservableObject { - // General Section +final class SettingsViewModel: ObservableObject { + // MARK: - General Settings @Published var launchOnLogin: Bool { didSet { - if oldValue != launchOnLogin { - Defaults.launchOnLogin.enabled = launchOnLogin - LaunchOnLogin.isEnabled = launchOnLogin - } - } - } - - @Published var subsequentExecutionMode: SubsequentExecutionMode { - didSet { - if oldValue != subsequentExecutionMode { - Defaults.subsequentExecutionMode.value = subsequentExecutionMode - // In SettingsViewController, this calls initializeCycleSizesView(animated: true) - NotificationCenter.default.post(name: .init("initializeCycleSizesView"), object: nil) - } - } - } - - @Published var allowAnyShortcut: Bool { - didSet { - if oldValue != allowAnyShortcut { - Defaults.allowAnyShortcut.enabled = allowAnyShortcut - Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) - } + LaunchOnLogin.isEnabled = launchOnLogin + Defaults.launchOnLogin.enabled = launchOnLogin } } @Published var hideMenuBarIcon: Bool { didSet { - if oldValue != hideMenuBarIcon { - Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon - RectangleStatusItem.instance.refreshVisibility() - } + Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon + RectangleStatusItem.instance.refreshVisibility() } } @Published var checkForUpdatesAutomatically: Bool { didSet { - if oldValue != checkForUpdatesAutomatically { - Defaults.SUEnableAutomaticChecks.enabled = checkForUpdatesAutomatically - } - } - } - - // Gap Section - @Published var gapSize: Float { - didSet { - if oldValue != gapSize { - Defaults.gapSize.value = gapSize - } - } - } - - @Published var skipGapTopEdge: Bool { - didSet { - if oldValue != skipGapTopEdge { - Defaults.skipGapTopEdge.enabled = skipGapTopEdge - } + AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates = checkForUpdatesAutomatically } } - // Window & Display Section - @Published var moveCursorAcrossDisplays: Bool { - didSet { - if oldValue != moveCursorAcrossDisplays { - Defaults.moveCursorAcrossDisplays.enabled = moveCursorAcrossDisplays - } - } - } + @Published var hasPendingUpdate: Bool = false + @Published var versionString: String = "" - @Published var useCursorScreenDetection: Bool { + // MARK: - Window Behavior & Cycle Settings + @Published var subsequentExecutionMode: SubsequentExecutionMode { didSet { - if oldValue != useCursorScreenDetection { - Defaults.useCursorScreenDetection.enabled = useCursorScreenDetection - } + Defaults.subsequentExecutionMode.value = subsequentExecutionMode } } - @Published var doubleClickTitleBar: WindowAction? { + @Published var selectedCycleSizes: Set = [] + @Published var cornerCycleExpansionAxis: CornerCycleExpansionAxis { didSet { - if oldValue != doubleClickTitleBar { - let val = (doubleClickTitleBar == nil) ? -1 : doubleClickTitleBar!.rawValue - Defaults.doubleClickTitleBar.value = val + 1 - Notification.Name.windowTitleBar.post() - } + Defaults.cornerCycleExpansionAxis.value = cornerCycleExpansionAxis } } - - // For handling the alert in SwiftUI - @Published var showDoubleClickConflictAlert: Bool = false - @Published var combinedDisplayMode: Bool { + @Published var cooperativeCornerResize: Bool { didSet { - if oldValue != combinedDisplayMode { - Defaults.combinedDisplayMode.enabled = combinedDisplayMode - } + Defaults.cooperativeCornerResize.enabled = cooperativeCornerResize } } - @Published var greenButtonOverride: Bool { + @Published var gapSize: Double + @Published var skipGapTopEdge: Bool { didSet { - if oldValue != greenButtonOverride { - Defaults.greenButtonOverride.enabled = greenButtonOverride - Notification.Name.greenButtonOverride.post() - } + Defaults.skipGapTopEdge.enabled = skipGapTopEdge } } - @Published var autoMaximize: Bool { + @Published var allowAnyShortcut: Bool { didSet { - if oldValue != autoMaximize { - Defaults.autoMaximize.enabled = autoMaximize - } + Defaults.allowAnyShortcut.enabled = allowAnyShortcut + Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) } } - @Published var halvesPreserveOtherAxisSize: Bool { + @Published var moveCursorAcrossDisplays: Bool { didSet { - if oldValue != halvesPreserveOtherAxisSize { - Defaults.halvesPreserveOtherAxisSize.enabled = halvesPreserveOtherAxisSize - } + Defaults.moveCursorAcrossDisplays.enabled = moveCursorAcrossDisplays } } - @Published var repeatedMaximizeRestoresPrevious: Bool { + @Published var useCursorScreenDetection: Bool { didSet { - if oldValue != repeatedMaximizeRestoresPrevious { - Defaults.repeatedMaximizeRestoresPrevious.enabled = repeatedMaximizeRestoresPrevious - } + Defaults.useCursorScreenDetection.enabled = useCursorScreenDetection } } - // Stage Section - @Published var stageSize: Float { + @Published var doubleClickTitleBar: Bool { didSet { - if oldValue != stageSize { - let value = stageSize == 0 ? -1 : stageSize - Defaults.stageSize.value = value - } + handleDoubleClickTitleBarToggle(doubleClickTitleBar) } } - // Cycle Sizes Section - @Published var selectedCycleSizes: Set { + @Published var autoMaximize: Bool { didSet { - if oldValue != selectedCycleSizes { - Defaults.selectedCycleSizes.value = selectedCycleSizes - Defaults.cycleSizesIsChanged.enabled = true - } + Defaults.autoMaximize.enabled = autoMaximize } } - @Published var cornerCycleExpansionAxis: CornerCycleExpansionAxis { + @Published var greenButtonOverride: Bool { didSet { - if oldValue != cornerCycleExpansionAxis { - Defaults.cornerCycleExpansionAxis.value = cornerCycleExpansionAxis - } + Defaults.greenButtonOverride.enabled = greenButtonOverride + Notification.Name.greenButtonOverride.post() } } - @Published var cooperativeCornerResize: Bool { + @Published var combinedDisplayMode: Bool { didSet { - if oldValue != cooperativeCornerResize { - Defaults.cooperativeCornerResize.enabled = cooperativeCornerResize - } + Defaults.combinedDisplayMode.enabled = combinedDisplayMode } } - // Todo Section - @Published var todoMode: Bool { + // MARK: - Todo Mode Settings + @Published var todoEnabled: Bool { didSet { - if oldValue != todoMode { - Defaults.todo.enabled = todoMode - Notification.Name.todoMenuToggled.post() - } + Defaults.todo.enabled = todoEnabled + Notification.Name.todoMenuToggled.post() } } @Published var todoSidebarWidth: Float { didSet { - if oldValue != todoSidebarWidth { - Defaults.todoSidebarWidth.value = todoSidebarWidth - TodoManager.changeSidebarWidthUnit(to: TodoSidebarWidthUnit(rawValue: Defaults.todoSidebarWidthUnit.value.rawValue) ?? .pixels) - TodoManager.moveAllIfNeeded(false) - } + Defaults.todoSidebarWidth.value = todoSidebarWidth } } @Published var todoSidebarWidthUnit: TodoSidebarWidthUnit { didSet { - if oldValue != todoSidebarWidthUnit { - Defaults.todoSidebarWidthUnit.value = todoSidebarWidthUnit - TodoManager.refreshTodoScreen() - TodoManager.changeSidebarWidthUnit(to: todoSidebarWidthUnit) - TodoManager.moveAllIfNeeded(false) - } + Defaults.todoSidebarWidthUnit.value = todoSidebarWidthUnit + TodoManager.refreshTodoScreen() + TodoManager.changeSidebarWidthUnit(to: todoSidebarWidthUnit) + TodoManager.moveAllIfNeeded(false) } } @Published var todoSidebarSide: TodoSidebarSide { didSet { - if oldValue != todoSidebarSide { - Defaults.todoSidebarSide.value = todoSidebarSide - TodoManager.moveAllIfNeeded(false) - } + Defaults.todoSidebarSide.value = todoSidebarSide + TodoManager.moveAllIfNeeded(false) } } + // MARK: - Stage Manager Settings + @Published var stageSize: Double + + // MARK: - UI Conditional Flags + var showCooperativeCornerResize: Bool { Defaults.cooperativeCornerResize.enabled } + var showCursorScreenDetection: Bool { Defaults.useCursorScreenDetection.enabled } + var showCombinedDisplayMode: Bool { !NSScreen.screensHaveSeparateSpaces } + var stageCapable: Bool { StageUtil.stageCapable } + + private var aboutTodoWindowController: NSWindowController? + + // MARK: - Initialization init() { self.launchOnLogin = Defaults.launchOnLogin.enabled - self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value - self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled - self.checkForUpdatesAutomatically = Defaults.SUEnableAutomaticChecks.enabled - self.gapSize = Defaults.gapSize.value + self.checkForUpdatesAutomatically = AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates ?? false + self.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate + + let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" + let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "" + self.versionString = "v\(appVersion) (\(build))" + + self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value + let isCycleChanged = Defaults.cycleSizesIsChanged.enabled + self.selectedCycleSizes = isCycleChanged ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes + self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value + self.cooperativeCornerResize = Defaults.cooperativeCornerResize.enabled + + self.gapSize = Double(Defaults.gapSize.value) self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled + + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled self.useCursorScreenDetection = Defaults.useCursorScreenDetection.enabled - let doubleClickVal = Defaults.doubleClickTitleBar.value - 1 - self.doubleClickTitleBar = WindowAction(rawValue: doubleClickVal) - self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled - self.greenButtonOverride = Defaults.greenButtonOverride.enabled + + self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil self.autoMaximize = !Defaults.autoMaximize.userDisabled - self.halvesPreserveOtherAxisSize = Defaults.halvesPreserveOtherAxisSize.enabled - self.repeatedMaximizeRestoresPrevious = Defaults.repeatedMaximizeRestoresPrevious.enabled - if Defaults.stageSize.value < 0 { self.stageSize = 0 } else { self.stageSize = Defaults.stageSize.value } + self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled - self.selectedCycleSizes = Defaults.selectedCycleSizes.value + self.todoEnabled = Defaults.todo.userEnabled + self.todoSidebarWidth = Defaults.todoSidebarWidth.value + self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value + self.todoSidebarSide = Defaults.todoSidebarSide.value + + self.stageSize = Double(Defaults.stageSize.value) + + setupObservers() + } + + private func setupObservers() { + Notification.Name.menuBarIconHidden.onPost { [weak self] _ in + self?.hideMenuBarIcon = true + } + + Notification.Name.updateAvailability.onPost { [weak self] _ in + self?.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate + } + + Notification.Name.configImported.onPost { [weak self] _ in + self?.reloadFromDefaults() + } + } + + func reloadFromDefaults() { + self.launchOnLogin = Defaults.launchOnLogin.enabled + self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled + self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value + self.selectedCycleSizes = Defaults.cycleSizesIsChanged.enabled ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value - self.cooperativeCornerResize = Defaults.cooperativeCornerResize.enabled - self.todoMode = Defaults.todo.userEnabled + self.gapSize = Double(Defaults.gapSize.value) + self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled + self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled + self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil + self.autoMaximize = !Defaults.autoMaximize.userDisabled + self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled + self.todoEnabled = Defaults.todo.userEnabled self.todoSidebarWidth = Defaults.todoSidebarWidth.value self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value self.todoSidebarSide = Defaults.todoSidebarSide.value + self.stageSize = Double(Defaults.stageSize.value) } - func requestDoubleClickTitleBarChange(to newSetting: Bool) { - if newSetting && !TitleBarManager.systemSettingDisabled { - showDoubleClickConflictAlert = true - } else { - doubleClickTitleBar = newSetting ? .maximize : nil + // MARK: - Cycle Sizes Binding Helper + func binding(for size: CycleSize) -> Binding { + Binding( + get: { self.selectedCycleSizes.contains(size) }, + set: { isChecked in + if !Defaults.cycleSizesIsChanged.enabled { + Defaults.selectedCycleSizes.value = CycleSize.defaultSizes + } + Defaults.cycleSizesIsChanged.enabled = true + + if isChecked { + self.selectedCycleSizes.insert(size) + } else { + self.selectedCycleSizes.remove(size) + } + Defaults.selectedCycleSizes.value = self.selectedCycleSizes + } + ) + } + + // MARK: - Action Handlers + func commitGapSize() { + if Float(gapSize) != Defaults.gapSize.value { + Defaults.gapSize.value = Float(gapSize) } } - - func confirmDoubleClickTitleBarChange() { - NSWorkspace.shared.open(URL(string:"x-apple.systempreferences:com.apple.preference.dock")!) - doubleClickTitleBar = .maximize - showDoubleClickConflictAlert = false + + func commitStageSize() { + let value: Float = stageSize == 0 ? -1 : Float(stageSize) + if value != Defaults.stageSize.value { + Defaults.stageSize.value = value + } } - func cancelDoubleClickTitleBarChange() { - showDoubleClickConflictAlert = false + func commitTodoWidth() { + TodoManager.moveAllIfNeeded(false) } - + func checkForUpdates() { AppDelegate.instance.updaterController?.checkForUpdates(nil) } + private func handleDoubleClickTitleBarToggle(_ enabled: Bool) { + if enabled && !TitleBarManager.systemSettingDisabled { + let openSettings = NSLocalizedString("Open System Settings", tableName: "Main", value: "", comment: "") + let conflictTitleText = NSLocalizedString("Conflict with system setting", tableName: "Main", value: "", comment: "") + let conflictDescriptionText = NSLocalizedString("To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.", tableName: "Main", value: "", comment: "") + let closeText = NSLocalizedString("DVo-aG-piG.title", tableName: "Main", value: "Close", comment: "") + + let response = AlertUtil.twoButtonAlert(question: conflictTitleText, text: conflictDescriptionText, confirmText: openSettings, cancelText: closeText) + if response == .alertFirstButtonReturn { + NSWorkspace.shared.open(URL(string: "x-apple.systempreferences:com.apple.preference.dock")!) + } + } + Defaults.doubleClickTitleBar.value = (enabled ? WindowAction.maximize.rawValue : -1) + 1 + Notification.Name.windowTitleBar.post() + } + + func showTodoModeHelp() { + if aboutTodoWindowController == nil { + aboutTodoWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "AboutTodoWindowController") as? NSWindowController + } + NSApp.activate(ignoringOtherApps: true) + aboutTodoWindowController?.showWindow(nil) + } + func restoreDefaults() { - // Simplification for now, real implementation would have the alert - let rectangleDefaults = true // Defaulting to Rectangle for this step + let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" + let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") + let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") + let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") + + let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) + if response == .alertThirdButtonReturn { return } + + let rectangleDefaults = (response == .alertFirstButtonReturn) WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults Notification.Name.changeDefaults.post() - + Defaults.portraitSnapAreas.typedValue = nil Defaults.landscapeSnapAreas.typedValue = nil Notification.Name.defaultSnapAreas.post() } func exportConfig() { + Notification.Name.windowSnapping.post(object: false) let savePanel = NSSavePanel() savePanel.allowedContentTypes = [.json] savePanel.nameFieldStringValue = "RectangleConfig" + if savePanel.runModal() == .OK, let url = savePanel.url { - if let jsonString = Defaults.encoded() { - try? jsonString.write(to: url, atomically: false, encoding: .utf8) + do { + if let jsonString = Defaults.encoded() { + try jsonString.write(to: url, atomically: false, encoding: .utf8) + } + } catch { + Logger.log(error.localizedDescription) } } + Notification.Name.windowSnapping.post(object: true) } func importConfig() { + Notification.Name.windowSnapping.post(object: false) let openPanel = NSOpenPanel() openPanel.allowedContentTypes = [.json] + if openPanel.runModal() == .OK, let url = openPanel.url { Defaults.load(fileUrl: url) } + Notification.Name.windowSnapping.post(object: true) + } + + func showExtrasPopover() { + // Trigger your existing extras popover or sheet presentation logic here } } diff --git a/SWIFTUI_CONVERSION_PLAN.md b/SWIFTUI_CONVERSION_PLAN.md new file mode 100644 index 000000000..e0e1b26f6 --- /dev/null +++ b/SWIFTUI_CONVERSION_PLAN.md @@ -0,0 +1,60 @@ +# Plan for Converting SettingsViewController to SwiftUI + +This document outlines the steps and structure for migrating the current `SettingsViewController` (AppKit) to a modern SwiftUI implementation. + +## Goals +- Replace all checkboxes with SwiftUI `Toggle` components. +- Group settings into logical `Section` elements instead of using horizontal separators. +- Maintain existing functionality by binding directly to the underlying `Defaults` model via a ViewModel. +- Implement responsive layouts that follow macOS design guidelines. + +## Proposed Data Model: `SettingsViewModel` +A new `@ObservableObject` or `@Observable` class will act as the mediator between SwiftUI and the current `Defaults` system. It will include: +- `@Published` properties for all setting values (e.g., `launchOnLogin`, `gapSize`). +- Bindings that update `Defaults` whenever a value is changed by the user. +- Logic migrated from `@IBAction` methods to handle side effects (e.g., refreshing visibility, posting notifications). + +## UI Structure (SwiftUI Form) + +### 1. General Section +- **Launch on login**: `Toggle` +- **Subsequent execution mode**: `Picker` +- **Allow any shortcut**: `Toggle` +- **Check for updates automatically**: `Toggle` + +### 2. Gap Section +- **Gap size**: `Slider` with a label indicating current value in pixels. +- **Skip gap top edge**: `Toggle` (visible only when gap size > 0). + +### 3. Window & Display Section +- **Move cursor across displays**: `Toggle` +- **Use cursor screen detection**: `Toggle` (visible only if enabled by system/defaults). +- **Double click title bar**: `Picker` or `Menu` for different window actions. +- **Treat multiple displays as one**: `Toggle` with description text underneath. +- **Green stoplight button maximizes instead of Full Screen**: `Toggle` with description text underneath. +- **Preserve maximize state when moving across displays**: `Toggle`. + +### 4. Stage Section (Conditional) +*Only visible if `StageUtil.stageCapable` is true.* +- **Stage size**: `Slider` with a label indicating current value in pixels. + +### 5. Cycle Sizes Section +- **Cycle sizes selection**: A horizontal collection of `Toggles` for each available `CycleSize`. +- **Cyclic corner shortcuts expand**: `Picker` (Segmented style) for Horizontal/Vertical axes. +- **Resize adjacent windows when cycling side or corner shortcuts**: `Toggle`. + +### 6. Todo Section +*Visible only if "Todo mode" is enabled.* +- **Todo Mode Toggle**: Master toggle for the section. +- **Sidebar width**: `TextField` + `Picker` for units (px, etc.). +- **Sidebar side**: `Picker` for position (left/right). +- *Note: MASShortcut views will require `NSViewRepresentable` to integrate with SwiftUI.* + +## Implementation Steps +1. [ ] Create `SettingsViewModel.swift`. +2. [ ] Implement `@Published` properties and bindings in the ViewModel. +3. [ ] Create `SettingsView.swift` using a `Form` layout. +4. [ ] Migrate all `@IBAction` logic from `SettingsViewController` into the ViewModel or via SwiftUI actions. +5. [ ] Implement `NSViewRepresentable` for complex components like `MASShortcutView` if needed. +6. [ ] Verify that all settings correctly update `Defaults` and trigger necessary notifications/side effects. +7. [ ] Run linting and type checking to ensure correctness. From f7a6777f6ce064304003b35ef87e0d706bf815c8 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 09:01:14 -0400 Subject: [PATCH 11/79] Separate section for updates --- Rectangle/PrefsWindow/SettingsView.swift | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/SettingsView.swift index ac462f66a..32fce3188 100644 --- a/Rectangle/PrefsWindow/SettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsView.swift @@ -30,14 +30,7 @@ struct SettingsView: View { Form { // MARK: - App & Updates Section { - HStack { - Toggle("Launch on login", isOn: $viewModel.launchOnLogin) - Spacer() - Text(viewModel.versionString) - .foregroundColor(.secondary) - .font(.callout) - } - + Toggle("Launch on login", isOn: $viewModel.launchOnLogin) Toggle("Hide menu bar icon", isOn: $viewModel.hideMenuBarIcon) if viewModel.hideMenuBarIcon { @@ -46,16 +39,22 @@ struct SettingsView: View { .foregroundColor(.secondary) .padding(.leading, 18) } - + } + + Section { HStack { - Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) - Spacer() Button(viewModel.hasPendingUpdate ? "Update Available…" : "Check for Updates…") { viewModel.checkForUpdates() } + Spacer() + Text(viewModel.versionString) + .foregroundColor(.secondary) + .font(.callout) } + Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) } - .toggleStyle(.switch) + + // MARK: - Cycle Sizes & Window Behaviors Section { From c388729fa5d35dd8c93287f6bf590ca0dfcdd207 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 09:18:14 -0400 Subject: [PATCH 12/79] More UI tweaks --- Rectangle/PrefsWindow/SettingsView.swift | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/SettingsView.swift index 32fce3188..156845869 100644 --- a/Rectangle/PrefsWindow/SettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsView.swift @@ -73,6 +73,7 @@ struct SettingsView: View { VStack(alignment: .leading, spacing: 8) { // Keep fraction choices as compact checkboxes HStack(spacing: 12) { + Spacer() ForEach(CycleSize.sortedSizes, id: \.self) { size in Toggle(size.title, isOn: viewModel.binding(for: size)) .toggleStyle(.checkbox) @@ -81,6 +82,7 @@ struct SettingsView: View { HStack(spacing: 12) { Text("Cyclic corner shortcuts expand:") + Spacer() Picker("", selection: $viewModel.cornerCycleExpansionAxis) { Text("horizontally").tag(CornerCycleExpansionAxis.horizontal) Text("vertically").tag(CornerCycleExpansionAxis.vertical) @@ -104,7 +106,6 @@ struct SettingsView: View { Slider( value: $viewModel.gapSize, in: 0...100, - step: 1, onEditingChanged: { editing in if !editing { viewModel.commitGapSize() } } @@ -116,7 +117,6 @@ struct SettingsView: View { if viewModel.gapSize > 0 { Toggle("Remove top gap when snapping to top edge", isOn: $viewModel.skipGapTopEdge) .toggleStyle(.switch) - .padding(.leading, 18) } } @@ -136,7 +136,6 @@ struct SettingsView: View { Text("Hold any modifier key or use the window menu for default macOS behavior") .font(.caption) .foregroundColor(.secondary) - .padding(.leading, 18) } if viewModel.showCombinedDisplayMode { @@ -145,7 +144,6 @@ struct SettingsView: View { Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") .font(.caption) .foregroundColor(.secondary) - .padding(.leading, 18) } } } @@ -155,12 +153,15 @@ struct SettingsView: View { // MARK: - Todo Mode Section { HStack { - Toggle("Show Todo Mode in menu", isOn: $viewModel.todoEnabled) - .toggleStyle(.switch) - Button(action: viewModel.showTodoModeHelp) { - Image(systemName: "info.circle") + Toggle(isOn: $viewModel.todoEnabled) { + HStack(spacing: 4) { + Text("Show Todo Mode in menu") + Button(action: viewModel.showTodoModeHelp) { + Image(systemName: "info.circle") + } + .buttonStyle(.plain) + } } - .buttonStyle(.plain) } if viewModel.todoEnabled { @@ -227,7 +228,6 @@ struct SettingsView: View { Slider( value: $viewModel.stageSize, in: 0...400, - step: 1, onEditingChanged: { editing in if !editing { viewModel.commitStageSize() } } From b34e2f331b4dcca863c131a92e3feb76e47a1f64 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 09:39:55 -0400 Subject: [PATCH 13/79] Todo Mode spacing --- Rectangle/PrefsWindow/SettingsView.swift | 30 ++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/SettingsView.swift index 156845869..1576531ee 100644 --- a/Rectangle/PrefsWindow/SettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsView.swift @@ -172,28 +172,34 @@ struct SettingsView: View { HStack { Text("Todo app width") - - TextField("", value: $viewModel.todoSidebarWidth, format: .number) - .frame(width: 55) - .textFieldStyle(.roundedBorder) - .onSubmit { viewModel.commitTodoWidth() } - - Picker("", selection: $viewModel.todoSidebarWidthUnit) { - Text("px").tag(TodoSidebarWidthUnit.pixels) - Text("%").tag(TodoSidebarWidthUnit.pct) - } - .frame(width: 65) Spacer() + HStack(spacing: 4) { + TextField("", value: $viewModel.todoSidebarWidth, format: .number) + .frame(width: 100) + .textFieldStyle(.roundedBorder) + .onSubmit { viewModel.commitTodoWidth() } + + Picker("", selection: $viewModel.todoSidebarWidthUnit) { + Text("px").tag(TodoSidebarWidthUnit.pixels) + Text("%").tag(TodoSidebarWidthUnit.pct) + } + .labelsHidden() + .fixedSize() + } + } + + HStack { Text("Todo side") + Spacer() Picker("", selection: $viewModel.todoSidebarSide) { Text("Left").tag(TodoSidebarSide.left) Text("Right").tag(TodoSidebarSide.right) } .frame(width: 90) } - + HStack { Text("Toggle Todo") Spacer() From 593bb16872887b7d4e54048f051815ec23240e4b Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 09:48:37 -0400 Subject: [PATCH 14/79] Frame size --- Rectangle/PrefsWindow/SettingsView.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/SettingsView.swift index 1576531ee..8439ff6dd 100644 --- a/Rectangle/PrefsWindow/SettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsView.swift @@ -66,7 +66,6 @@ struct SettingsView: View { Text(mode.title).tag(mode) } } - .frame(width: 320) } if viewModel.subsequentExecutionMode.resizes { @@ -276,8 +275,7 @@ struct SettingsView: View { } } .formStyle(.grouped) - .padding(20) - .frame(width: 600) + .frame(width: 500) .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) } From aa13ebbf4db37dbe7383e30117a480a501fd7dd9 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 09:52:17 -0400 Subject: [PATCH 15/79] Shortcuts frame size --- Rectangle/PrefsWindow/ShortcutsViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rectangle/PrefsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/ShortcutsViewController.swift index 066475d06..9a077a655 100644 --- a/Rectangle/PrefsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/ShortcutsViewController.swift @@ -117,7 +117,7 @@ final class ShortcutActionCellView: NSTableCellView { addSubview(shortcutView) NSLayoutConstraint.activate([ - shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -56), + shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), shortcutView.centerYAnchor.constraint(equalTo: centerYAnchor), shortcutView.widthAnchor.constraint(equalToConstant: 160), shortcutView.heightAnchor.constraint(equalToConstant: 19), @@ -156,7 +156,7 @@ final class ShortcutActionCellView: NSTableCellView { class ShortcutsViewController: NSViewController { - private let initialSize = NSSize(width: 480, height: 610) + private let initialSize = NSSize(width: 500, height: 610) private let scrollView = NSScrollView() private let outlineView = NSOutlineView() private let shortcutRecordingObserver = ShortcutRecordingObserver() From 78e9139bd8f35af21534ed0655bda7ba0703e6b2 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 10:05:34 -0400 Subject: [PATCH 16/79] Todo app width reflecting percentage/pixel change --- Rectangle/PrefsWindow/SettingsViewModel.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Rectangle/PrefsWindow/SettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsViewModel.swift index 41119773b..f676cbde1 100644 --- a/Rectangle/PrefsWindow/SettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsViewModel.swift @@ -116,6 +116,7 @@ final class SettingsViewModel: ObservableObject { Defaults.todoSidebarWidthUnit.value = todoSidebarWidthUnit TodoManager.refreshTodoScreen() TodoManager.changeSidebarWidthUnit(to: todoSidebarWidthUnit) + todoSidebarWidth = Defaults.todoSidebarWidth.value TodoManager.moveAllIfNeeded(false) } } From 38946b482a80076f13f4ab431b04eb853602e521 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 10:32:40 -0400 Subject: [PATCH 17/79] Separate App Settings pane --- Rectangle.xcodeproj/project.pbxproj | 32 +++-- Rectangle/PrefsWindow/AppSettingsView.swift | 86 ++++++++++++ .../PrefsWindow/AppSettingsViewModel.swift | 122 ++++++++++++++++++ ...sView.swift => BehaviorSettingsView.swift} | 57 +------- ....swift => BehaviorSettingsViewModel.swift} | 53 +------- ...ift => MASShortcutViewRepresentable.swift} | 0 .../SettingsWindowController.swift | 16 ++- 7 files changed, 245 insertions(+), 121 deletions(-) create mode 100644 Rectangle/PrefsWindow/AppSettingsView.swift create mode 100644 Rectangle/PrefsWindow/AppSettingsViewModel.swift rename Rectangle/PrefsWindow/{SettingsView.swift => BehaviorSettingsView.swift} (83%) rename Rectangle/PrefsWindow/{SettingsViewModel.swift => BehaviorSettingsViewModel.swift} (83%) rename Rectangle/PrefsWindow/{MASShortcutRepresentable.swift => MASShortcutViewRepresentable.swift} (100%) diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 484d75885..11dd4c818 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -139,9 +139,11 @@ 98D16A492592B460005228CB /* NotificationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D16A482592B460005228CB /* NotificationExtension.swift */; }; 98D4B6C525B6256C009C7BF6 /* TodoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */; }; 98ED7038305D9AEE0077BD10 /* ExtraSettingsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */; }; - 98ED703A305DB1180077BD10 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7039305DB1180077BD10 /* SettingsView.swift */; }; - 98ED703C305DB20A0077BD10 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703B305DB20A0077BD10 /* SettingsViewModel.swift */; }; - 98ED703E305DC12D0077BD10 /* MASShortcutRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703D305DC12D0077BD10 /* MASShortcutRepresentable.swift */; }; + 98ED703A305DB1180077BD10 /* BehaviorSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */; }; + 98ED703C305DB20A0077BD10 /* BehaviorSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */; }; + 98ED703E305DC12D0077BD10 /* MASShortcutViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */; }; + 98ED704B306171650077BD10 /* AppSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7049306171650077BD10 /* AppSettingsView.swift */; }; + 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -372,9 +374,11 @@ 98D16A482592B460005228CB /* NotificationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtension.swift; sourceTree = ""; }; 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoManager.swift; sourceTree = ""; }; 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettingsPopover.swift; sourceTree = ""; }; - 98ED7039305DB1180077BD10 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; - 98ED703B305DB20A0077BD10 /* SettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; }; - 98ED703D305DC12D0077BD10 /* MASShortcutRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutRepresentable.swift; sourceTree = ""; }; + 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BehaviorSettingsView.swift; sourceTree = ""; }; + 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BehaviorSettingsViewModel.swift; sourceTree = ""; }; + 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutViewRepresentable.swift; sourceTree = ""; }; + 98ED7049306171650077BD10 /* AppSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsView.swift; sourceTree = ""; }; + 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsViewModel.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -753,10 +757,12 @@ 98910B3C2311304D0066EC23 /* PrefsWindow */ = { isa = PBXGroup; children = ( - 98ED703D305DC12D0077BD10 /* MASShortcutRepresentable.swift */, + 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */, 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, - 98ED7039305DB1180077BD10 /* SettingsView.swift */, - 98ED703B305DB20A0077BD10 /* SettingsViewModel.swift */, + 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */, + 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, + 98ED7049306171650077BD10 /* AppSettingsView.swift */, + 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */, 98985838305C1B6400459AFF /* SettingsWindowController.swift */, 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, @@ -1062,11 +1068,12 @@ 98C27561231FFA5F009B9292 /* SnappingManager.swift in Sources */, 9824703722B0F3200037B409 /* WindowAction.swift in Sources */, 982470382EFA00010037B409 /* WindowActionCooperativeResize.swift in Sources */, - 98ED703E305DC12D0077BD10 /* MASShortcutRepresentable.swift in Sources */, + 98ED703E305DC12D0077BD10 /* MASShortcutViewRepresentable.swift in Sources */, B4521F932BD7CEFB00FD43CC /* ChangeWindowDimensionCalculation.swift in Sources */, 9821402922B3889100ABFB3F /* LowerLeftCalculation.swift in Sources */, 7BE578EF2C5BF4EE0083DAE3 /* CycleSize.swift in Sources */, 9821402122B3884600ABFB3F /* BottomHalfCalculation.swift in Sources */, + 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */, 9851A5C3251BEBA300ECF78C /* OrientationAware.swift in Sources */, 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */, 983DD04028A844BE00BF1EEE /* SnapAreaViewController.swift in Sources */, @@ -1090,7 +1097,7 @@ AA49DD1129B8C1B100690E13 /* TitleBarManager.swift in Sources */, AA49DD2129B8C1B100690E13 /* GreenButtonManager.swift in Sources */, 9824700D22AF9B7D0037B409 /* AppDelegate.swift in Sources */, - 98ED703A305DB1180077BD10 /* SettingsView.swift in Sources */, + 98ED703A305DB1180077BD10 /* BehaviorSettingsView.swift in Sources */, 98A009BF251253AB00CFBF0C /* BottomRightSixthCalculation.swift in Sources */, 6490B39527BF96880056C220 /* TopLeftEighthCalculation.swift in Sources */, D04CE30227817A6100BD47B3 /* TopCenterNinthCalculation.swift in Sources */, @@ -1118,6 +1125,7 @@ 9824704C22B189250037B409 /* WindowMover.swift in Sources */, 6490B39B27BF980F0056C220 /* TopRightEighthCalculation.swift in Sources */, 944F25CD2CE5A144004B2FD2 /* PrefsViewController.swift in Sources */, + 98ED704B306171650077BD10 /* AppSettingsView.swift in Sources */, 944F25CF2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift in Sources */, 9818E01028B59396004AA524 /* HalvesCompoundCalculation.swift in Sources */, 988D066922EB4CCB004EABD7 /* LastThirdCalculation.swift in Sources */, @@ -1157,7 +1165,7 @@ FA34D0FF2F7E896E00EEBEF1 /* SpecificDisplayCalculation.swift in Sources */, 630644571003EB468CB643D8 /* BottomCenterRightSixteenthCalculation.swift in Sources */, 2D240EE416CC03AC921E3A4F /* BottomRightSixteenthCalculation.swift in Sources */, - 98ED703C305DB20A0077BD10 /* SettingsViewModel.swift in Sources */, + 98ED703C305DB20A0077BD10 /* BehaviorSettingsViewModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Rectangle/PrefsWindow/AppSettingsView.swift b/Rectangle/PrefsWindow/AppSettingsView.swift new file mode 100644 index 000000000..33fab2e89 --- /dev/null +++ b/Rectangle/PrefsWindow/AppSettingsView.swift @@ -0,0 +1,86 @@ +import AppKit +import SwiftUI + +class AppSettingsViewController: NSViewController { + private var hostingController: NSHostingController! + + override func viewDidLoad() { + super.viewDidLoad() + + let swiftUIView = AppSettingsView() + hostingController = NSHostingController(rootView: swiftUIView) + + addChild(hostingController) + hostingController.view.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(hostingController.view) + + NSLayoutConstraint.activate([ + hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), + hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), + hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), + hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) + ]) + } +} + +struct AppSettingsView: View { + @StateObject private var viewModel = AppSettingsViewModel() + + var body: some View { + Form { + // MARK: - App & Updates + Section { + Toggle("Launch on login", isOn: $viewModel.launchOnLogin) + Toggle("Hide menu bar icon", isOn: $viewModel.hideMenuBarIcon) + + if viewModel.hideMenuBarIcon { + Text("When the menu bar icon is hidden, relaunch Rectangle from Finder to open") + .font(.caption) + .foregroundColor(.secondary) + .padding(.leading, 18) + } + } + + Section { + HStack { + Button(viewModel.hasPendingUpdate ? "Update Available…" : "Check for Updates…") { + viewModel.checkForUpdates() + } + Spacer() + Text(viewModel.versionString) + .foregroundColor(.secondary) + .font(.callout) + } + Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) + } + + Section { + Toggle("Remove keyboard shortcut restrictions", isOn: $viewModel.allowAnyShortcut) + } + + // MARK: - Footer Actions + Section { + HStack { + Button { + viewModel.importConfig() + } label: { + Label("Import Config", systemImage: "square.and.arrow.down") + } + + Button { + viewModel.exportConfig() + } label: { + Label("Export Config", systemImage: "square.and.arrow.up") + } + } + + Button("Restore Default Shortcuts & Snap Areas") { + viewModel.restoreDefaults() + } + + } + } + .formStyle(.grouped) + .frame(width: 500) + } +} diff --git a/Rectangle/PrefsWindow/AppSettingsViewModel.swift b/Rectangle/PrefsWindow/AppSettingsViewModel.swift new file mode 100644 index 000000000..3111f3bd6 --- /dev/null +++ b/Rectangle/PrefsWindow/AppSettingsViewModel.swift @@ -0,0 +1,122 @@ +import SwiftUI +import AppKit + +final class AppSettingsViewModel: ObservableObject { + // MARK: - General Settings + @Published var launchOnLogin: Bool { + didSet { + LaunchOnLogin.isEnabled = launchOnLogin + Defaults.launchOnLogin.enabled = launchOnLogin + } + } + + @Published var hideMenuBarIcon: Bool { + didSet { + Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon + RectangleStatusItem.instance.refreshVisibility() + } + } + + @Published var checkForUpdatesAutomatically: Bool { + didSet { + AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates = checkForUpdatesAutomatically + } + } + + @Published var hasPendingUpdate: Bool = false + @Published var versionString: String = "" + + @Published var allowAnyShortcut: Bool { + didSet { + Defaults.allowAnyShortcut.enabled = allowAnyShortcut + Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) + } + } + + // MARK: - Initialization + init() { + self.launchOnLogin = Defaults.launchOnLogin.enabled + self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled + self.checkForUpdatesAutomatically = AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates ?? false + self.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled + + let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" + let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "" + self.versionString = "v\(appVersion) (\(build))" + + setupObservers() + } + + private func setupObservers() { + Notification.Name.menuBarIconHidden.onPost { [weak self] _ in + self?.hideMenuBarIcon = true + } + + Notification.Name.updateAvailability.onPost { [weak self] _ in + self?.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate + } + + Notification.Name.configImported.onPost { [weak self] _ in + self?.reloadFromDefaults() + } + } + + func reloadFromDefaults() { + self.launchOnLogin = Defaults.launchOnLogin.enabled + self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled + } + + func checkForUpdates() { + AppDelegate.instance.updaterController?.checkForUpdates(nil) + } + + func restoreDefaults() { + let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" + let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") + let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") + let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") + + let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) + if response == .alertThirdButtonReturn { return } + + let rectangleDefaults = (response == .alertFirstButtonReturn) + WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } + Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults + Notification.Name.changeDefaults.post() + + Defaults.portraitSnapAreas.typedValue = nil + Defaults.landscapeSnapAreas.typedValue = nil + Notification.Name.defaultSnapAreas.post() + } + + func exportConfig() { + Notification.Name.windowSnapping.post(object: false) + let savePanel = NSSavePanel() + savePanel.allowedContentTypes = [.json] + savePanel.nameFieldStringValue = "RectangleConfig" + + if savePanel.runModal() == .OK, let url = savePanel.url { + do { + if let jsonString = Defaults.encoded() { + try jsonString.write(to: url, atomically: false, encoding: .utf8) + } + } catch { + Logger.log(error.localizedDescription) + } + } + Notification.Name.windowSnapping.post(object: true) + } + + func importConfig() { + Notification.Name.windowSnapping.post(object: false) + let openPanel = NSOpenPanel() + openPanel.allowedContentTypes = [.json] + + if openPanel.runModal() == .OK, let url = openPanel.url { + Defaults.load(fileUrl: url) + } + Notification.Name.windowSnapping.post(object: true) + } +} diff --git a/Rectangle/PrefsWindow/SettingsView.swift b/Rectangle/PrefsWindow/BehaviorSettingsView.swift similarity index 83% rename from Rectangle/PrefsWindow/SettingsView.swift rename to Rectangle/PrefsWindow/BehaviorSettingsView.swift index 8439ff6dd..103e64f04 100644 --- a/Rectangle/PrefsWindow/SettingsView.swift +++ b/Rectangle/PrefsWindow/BehaviorSettingsView.swift @@ -1,13 +1,13 @@ import AppKit import SwiftUI -class GeneralSettingsViewController: NSViewController { - private var hostingController: NSHostingController! +class BehaviorSettingsViewController: NSViewController { + private var hostingController: NSHostingController! override func viewDidLoad() { super.viewDidLoad() - let swiftUIView = SettingsView() + let swiftUIView = BehaviorSettingsView() hostingController = NSHostingController(rootView: swiftUIView) addChild(hostingController) @@ -23,39 +23,11 @@ class GeneralSettingsViewController: NSViewController { } } -struct SettingsView: View { - @StateObject private var viewModel = SettingsViewModel() +struct BehaviorSettingsView: View { + @StateObject private var viewModel = BehaviorSettingsViewModel() var body: some View { Form { - // MARK: - App & Updates - Section { - Toggle("Launch on login", isOn: $viewModel.launchOnLogin) - Toggle("Hide menu bar icon", isOn: $viewModel.hideMenuBarIcon) - - if viewModel.hideMenuBarIcon { - Text("When the menu bar icon is hidden, relaunch Rectangle from Finder to open") - .font(.caption) - .foregroundColor(.secondary) - .padding(.leading, 18) - } - } - - Section { - HStack { - Button(viewModel.hasPendingUpdate ? "Update Available…" : "Check for Updates…") { - viewModel.checkForUpdates() - } - Spacer() - Text(viewModel.versionString) - .foregroundColor(.secondary) - .font(.callout) - } - Toggle("Check for updates automatically", isOn: $viewModel.checkForUpdatesAutomatically) - } - - - // MARK: - Cycle Sizes & Window Behaviors Section { HStack { @@ -120,7 +92,6 @@ struct SettingsView: View { } Group { - Toggle("Remove keyboard shortcut restrictions", isOn: $viewModel.allowAnyShortcut) Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) if viewModel.showCursorScreenDetection { @@ -250,24 +221,6 @@ struct SettingsView: View { // MARK: - Footer Actions Section { HStack { - Button("Restore Default Shortcuts & Snap Areas") { - viewModel.restoreDefaults() - } - - Spacer() - - Button { - viewModel.importConfig() - } label: { - Label("Import", systemImage: "square.and.arrow.down") - } - - Button { - viewModel.exportConfig() - } label: { - Label("Export", systemImage: "square.and.arrow.up") - } - Button("Extras") { viewModel.showExtrasPopover() } diff --git a/Rectangle/PrefsWindow/SettingsViewModel.swift b/Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift similarity index 83% rename from Rectangle/PrefsWindow/SettingsViewModel.swift rename to Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift index f676cbde1..9e0dfa387 100644 --- a/Rectangle/PrefsWindow/SettingsViewModel.swift +++ b/Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift @@ -1,31 +1,7 @@ import SwiftUI import AppKit -final class SettingsViewModel: ObservableObject { - // MARK: - General Settings - @Published var launchOnLogin: Bool { - didSet { - LaunchOnLogin.isEnabled = launchOnLogin - Defaults.launchOnLogin.enabled = launchOnLogin - } - } - - @Published var hideMenuBarIcon: Bool { - didSet { - Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon - RectangleStatusItem.instance.refreshVisibility() - } - } - - @Published var checkForUpdatesAutomatically: Bool { - didSet { - AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates = checkForUpdatesAutomatically - } - } - - @Published var hasPendingUpdate: Bool = false - @Published var versionString: String = "" - +final class BehaviorSettingsViewModel: ObservableObject { // MARK: - Window Behavior & Cycle Settings @Published var subsequentExecutionMode: SubsequentExecutionMode { didSet { @@ -53,13 +29,6 @@ final class SettingsViewModel: ObservableObject { } } - @Published var allowAnyShortcut: Bool { - didSet { - Defaults.allowAnyShortcut.enabled = allowAnyShortcut - Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) - } - } - @Published var moveCursorAcrossDisplays: Bool { didSet { Defaults.moveCursorAcrossDisplays.enabled = moveCursorAcrossDisplays @@ -141,14 +110,6 @@ final class SettingsViewModel: ObservableObject { // MARK: - Initialization init() { - self.launchOnLogin = Defaults.launchOnLogin.enabled - self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled - self.checkForUpdatesAutomatically = AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates ?? false - self.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate - - let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" - let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "" - self.versionString = "v\(appVersion) (\(build))" self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value let isCycleChanged = Defaults.cycleSizesIsChanged.enabled @@ -159,7 +120,6 @@ final class SettingsViewModel: ObservableObject { self.gapSize = Double(Defaults.gapSize.value) self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled - self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled self.useCursorScreenDetection = Defaults.useCursorScreenDetection.enabled @@ -179,28 +139,17 @@ final class SettingsViewModel: ObservableObject { } private func setupObservers() { - Notification.Name.menuBarIconHidden.onPost { [weak self] _ in - self?.hideMenuBarIcon = true - } - - Notification.Name.updateAvailability.onPost { [weak self] _ in - self?.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate - } - Notification.Name.configImported.onPost { [weak self] _ in self?.reloadFromDefaults() } } func reloadFromDefaults() { - self.launchOnLogin = Defaults.launchOnLogin.enabled - self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value self.selectedCycleSizes = Defaults.cycleSizesIsChanged.enabled ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value self.gapSize = Double(Defaults.gapSize.value) self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled - self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil self.autoMaximize = !Defaults.autoMaximize.userDisabled diff --git a/Rectangle/PrefsWindow/MASShortcutRepresentable.swift b/Rectangle/PrefsWindow/MASShortcutViewRepresentable.swift similarity index 100% rename from Rectangle/PrefsWindow/MASShortcutRepresentable.swift rename to Rectangle/PrefsWindow/MASShortcutViewRepresentable.swift diff --git a/Rectangle/PrefsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindowController.swift index a954eff8d..55d57551a 100644 --- a/Rectangle/PrefsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindowController.swift @@ -39,11 +39,17 @@ class SettingsTabViewController: NSTabViewController { snapAreaItem.image = NSImage(imageLiteralResourceName: "snapAreaTemplate") addTabViewItem(snapAreaItem) - let generalVC = GeneralSettingsViewController() - let generalItem = NSTabViewItem(viewController: generalVC) - generalItem.label = "General" - generalItem.image = NSImage(imageLiteralResourceName: "toolbarSettingsTemplate") - addTabViewItem(generalItem) + let behaviorVC = BehaviorSettingsViewController() + let behaviorItem = NSTabViewItem(viewController: behaviorVC) + behaviorItem.label = "Behavior" + behaviorItem.image = NSImage(imageLiteralResourceName: "toolbarSettingsTemplate") + addTabViewItem(behaviorItem) + + let appSettingsVC = AppSettingsViewController() + let appSettingsItem = NSTabViewItem(viewController: appSettingsVC) + appSettingsItem.label = "App Settings" + appSettingsItem.image = NSImage(imageLiteralResourceName: "toolbarSettingsTemplate") + addTabViewItem(appSettingsItem) } override var selectedTabViewItemIndex: Int { From 7f0c795edf3e9e6268365a1490af951c34851b0a Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 10:35:23 -0400 Subject: [PATCH 18/79] App Settings icon --- .../Contents.json | 22 ++++++++++++++++++ .../appSettingsTemplate.png | Bin 0 -> 2039 bytes .../appSettingsTemplate_2x.png | Bin 0 -> 3581 bytes .../SettingsWindowController.swift | 2 +- 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 Rectangle/Assets.xcassets/appSettingsTemplate.imageset/Contents.json create mode 100644 Rectangle/Assets.xcassets/appSettingsTemplate.imageset/appSettingsTemplate.png create mode 100644 Rectangle/Assets.xcassets/appSettingsTemplate.imageset/appSettingsTemplate_2x.png diff --git a/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/Contents.json b/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/Contents.json new file mode 100644 index 000000000..6cdfba013 --- /dev/null +++ b/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "filename" : "appSettingsTemplate.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "appSettingsTemplate_2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/appSettingsTemplate.png b/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/appSettingsTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..055215206539c0fa727d38e2632c0d47d76cf41c GIT binary patch literal 2039 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-#^NA%Cx&(BWL^R}$5JCa(|mmy zw18|51~x_^24;{FAY@>aVqgWc85qJCrQz&2Mh&PMCZHNa1|Z2G3dCvcnG7sY^))~m z1U!HkXcB}D$gD`s$xSTDFH#67%2zPfGuJZ&%CSsf0h=KLWN%u)h_HVF6Wlzb1ZUM+72Ac{iATu|$BvGLvHz%*ys=`(YtilS&1_|pcDS(xf zWZNo5_y#CA=NF|anCThl87SFtDJUq|6s4qD1-ZCEwF7y!N*N_31y=g{<>lpi<;HsX zMd|v6mX?iU}{N8EJ=hKU}UCiV4-Vd z8e(W_WnyM!Y_4lyVr2jf1duCG)FPP!3Qwzupw#00oKjFKuroI@00MnO5NV^2A&ssT zp))iuv&7B_ss&9LT~{PR9-D>8(&$?Ki!xJzX&LNRL#S=YVo>!q`k>^Dl)NE%2P_KA zJa$~bV1Z>sJ1(8+YwdyAR@l?UF(iZa?aY%|qK+bM!lqrt1z{q>i8h$7X68Zme_pN%F7=zc zaFzZ_IVmp>Nf4ajDJhZn;EhtrG-uoA2h_|0v>&QZ%KRa>@8m6;RSWxs7tgrEGCjoj zZq_yZE%ArcKWO(X%2G&<5SpD}==HcjQKoV80)_NYR@?grHGhch`r-Cm?@EP0DAUcJ z)~}A*-xj=?->&^evvuO{FM5Yo2QYF~-D^CU@ac`m!S<^hv)L4@vlleYXi0zIUco)D zx#)w?9=_t7rG+x{nkqkd9pkg$pLHQ|tHJC>&g>0~YC_H4Go3$Oz#P&lcX;myl`Gzl z6-qYt_BC0u#XIMoG_2sSQcTxfld4dDWR~#c{KP|wE2g)sDrPx#a&CdVOndu7s~g;N zSKj^LWwxLp{(yYs{tq0ii(H?Hr(J*lqULRTQIho)z6egy1seo^HT^I?A)l+icdy)` z#2=Db)zbv5l)b$-zvg~+EnG8Grc`B_f0)9lm=#fdZxb$Wk`H+$d4)S6Qq5R6S$ByM zpU|hb=|6veKb|>Z&bOaNuY`9Q89S9F5=0RYI{zJwiGSV-13cc#e3C5>^D{@#Rtrp)GGGkuTQ|$DchDb z?RcnRQ*>+TGQCGm7g9IpeJ^=>lf|orFC$0x`nO!Gpwuv$J`THi{ zX3K_m^L*-CmTxQGmwK1q_WZ>AE$0_-pOoLh6u;X`;nL-=FIlee)`rS1+t##g`l>~n zrCei|izNikXa8at@^;s+6)X$6UKYIWUCFR#zQBa(7mf+$PPD4tzonwz;r7~i`y;l? ig3VJEQXlL;c_9D&;r!l}x&@m-b(g2BpUXO@geCz04Z(r{ literal 0 HcmV?d00001 diff --git a/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/appSettingsTemplate_2x.png b/Rectangle/Assets.xcassets/appSettingsTemplate.imageset/appSettingsTemplate_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..652ff855c2c337b8c87452dd2153a039e61e8ff3 GIT binary patch literal 3581 zcmd^Cdpwj`AAiO$avg|6$~85?1uQ@1YvmC+W^%aYQKYvU&(%skC>Xcjq^62_#` z5pHxU!py|N#1zztW{ED^Pypo`9^{LEp2%l=Sv=?$8N>l-lqn96!r{>F2x+zk^CK35%eHlTBC@n$Qwp&BB8s zh0F{?uqd%{3_OdVv53HfvTz%zfmnnvV+b04&Tfd!R5}@fH9?u6G>DQ21j3pg5sCM( zwOgixD}qK8lS#uPk%@_kCW&SyRQgV&DGrB2qR>b*+89I_GuUy=FqUx~LvzW$A#bB%#WBZ5ZOLi-me*el` zp;^HM6T@$&lZ6H5MWx0Pzg2J6$gfe~GC;NsW0Hx&8Z$=WjL|5sziKRC1%CSk{v=lS)I z)ng|(uYdWFc;nVwD7%9&Hdy~#@Du#U*F@T5>jMf|A|5132Z%mGtSsffU;OGFy1*CH znj^BS0G*T(f>Cq)Cin+I-xYo)?9q#-s)v2|@Y9C11tGkIZXM{+HiJ;gYyO3VU9+oe z(<_j`SuTSVbN2xZ+O79;kKd1{O9QxT`N@(65Y~ihF>DBR8B!qnU_hD*l}*HSV;UIw zZ_siFE7}{-`96u2_bQ`0;srn3U$WG1SHXSl{l}>2?X5J4*bT}erPvp zJ2#i4l=|?Zvswl_xHsGJSw%*R$Veyugcd)*N`$7EuicvI;;)`B@FbO~$5_n}WoU<| z|)uSTgL2B z|2M48qf+fmIZJ@{J294)V5g~L;r;?AS2sf;l@*IK$Lb|6jJ?f}@Vc8n;Vp1asjQMB z-46}kAi4l#S9f_#lZ=W+PbnWw9oh%ET-7oNclijoF!jFZ^+1u+yvE|nIyys=lNJq0NA#NIuo9(#6Ly(B&@?52>#Wag!0dI_ znWU;D;`6=nl!9Sd>v>{V1h+94bue=30#=T5Su}Nsn-S=d&L;n`Zx@5B}y7$M5l zE$Ev??iEY^zQSV8dn3JlaEiUId_Z>&(pgY-JHsL>qW34{BvPVIZaho_mOnGD__7h> zng<(tGQ(8oho`I7k&--R*oPG&HIL+SEw7qXtFIr~{ciVlA5F|y`FPc~##YkmeKq`| zlsu_Jbv;KX=NNkPPmfDZoWJ&D=4viigQ_-tNHJOQ&ePwU7wq0AW83njADlHJ+P&uX zl`4&5V|sIYRrFr8lJhF+;XcS7UJWB?_&nqj$A6@@eUhy0qxATpP3R@Xt?s=0@tiI7 zk+a!c125UVF-~HC^s3x$O;e zyCJaMg!oc7ZbApHqIaz+PO-qar!oKm^*$&6F*r}gT}AJz<6wUqX+l5EnFPx?xiN7X zoyCz1m(Svck9D4`mwr~9+9w*p>ziflL_)8fMPMN+db=0?FDU0TKDAdA`Fw~#7-|pr zcI2w%MDWxMK0b)ox4(jRlg&+jVVQe6z!3VVV-wbMUC=BQdDie9x-CDK8|R&sxx3O3 zhWAmw?tdeKcg>)v{v_j2$DR?lEtD#=t}Bu?-EoEKFZ*b+Av+CTShVGP!*j@Y{M6G% zs!Wuhhh`##?|RfAdB?<0ZoZZWt=w+$6JWJ|n=S9XGP2@Jh|Q{!ORDvs7=`2!y56ha zbC0v9w&n=Z|$#|HeAs^d4Vf;ZhiVL9vtEDXz&NA?-_ZGpytt#qZ8eQT-XjrPyQjD zkle!~E)XNJNf(Ju(2LfpdUFP&NUWAyl2kQk?VFK>-fjEGe%RCWkfenpDD0mm1X@U6 zPJip3)ept6qodbP5lmvB?tyE}2g<{_g~PF;&#-*mv61 zEwwXMdbE4BU8`G%vx{z0>ZOuor7zhx@4P8~eA|V$eNjhi#5FWK=HSo)t~M!0ptj?z zroRgdE)pVg^GL(#F2d}u6Z5NYXHF{0ihDNHxZfCmcal<`DBi$UM>-yR_g2_U|_2Glsn2e|(+GN|QG=V`z8*Ru{K;@aAfhheie>S-NlJnxSx+a6q T*9A8VzhE4 Date: Mon, 21 Sep 2026 10:46:55 -0400 Subject: [PATCH 19/79] Reasonable window sizes for panes --- .../AppSettingsView.swift | 0 .../SettingsWindow/AppSettingsViewModel.swift | 122 ++++++ .../SettingsWindow/BehaviorSettingsView.swift | 235 ++++++++++++ .../BehaviorSettingsViewModel.swift | 282 ++++++++++++++ .../MASShortcutViewRepresentable.swift | 22 ++ .../SettingsWindowController.swift | 0 .../ShortcutsViewController.swift | 353 ++++++++++++++++++ 7 files changed, 1014 insertions(+) rename Rectangle/PrefsWindow/{ => SettingsWindow}/AppSettingsView.swift (100%) create mode 100644 Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift create mode 100644 Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift create mode 100644 Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift create mode 100644 Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift rename Rectangle/PrefsWindow/{ => SettingsWindow}/SettingsWindowController.swift (100%) create mode 100644 Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift diff --git a/Rectangle/PrefsWindow/AppSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift similarity index 100% rename from Rectangle/PrefsWindow/AppSettingsView.swift rename to Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift new file mode 100644 index 000000000..3111f3bd6 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift @@ -0,0 +1,122 @@ +import SwiftUI +import AppKit + +final class AppSettingsViewModel: ObservableObject { + // MARK: - General Settings + @Published var launchOnLogin: Bool { + didSet { + LaunchOnLogin.isEnabled = launchOnLogin + Defaults.launchOnLogin.enabled = launchOnLogin + } + } + + @Published var hideMenuBarIcon: Bool { + didSet { + Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon + RectangleStatusItem.instance.refreshVisibility() + } + } + + @Published var checkForUpdatesAutomatically: Bool { + didSet { + AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates = checkForUpdatesAutomatically + } + } + + @Published var hasPendingUpdate: Bool = false + @Published var versionString: String = "" + + @Published var allowAnyShortcut: Bool { + didSet { + Defaults.allowAnyShortcut.enabled = allowAnyShortcut + Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) + } + } + + // MARK: - Initialization + init() { + self.launchOnLogin = Defaults.launchOnLogin.enabled + self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled + self.checkForUpdatesAutomatically = AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates ?? false + self.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled + + let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" + let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "" + self.versionString = "v\(appVersion) (\(build))" + + setupObservers() + } + + private func setupObservers() { + Notification.Name.menuBarIconHidden.onPost { [weak self] _ in + self?.hideMenuBarIcon = true + } + + Notification.Name.updateAvailability.onPost { [weak self] _ in + self?.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate + } + + Notification.Name.configImported.onPost { [weak self] _ in + self?.reloadFromDefaults() + } + } + + func reloadFromDefaults() { + self.launchOnLogin = Defaults.launchOnLogin.enabled + self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled + self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled + } + + func checkForUpdates() { + AppDelegate.instance.updaterController?.checkForUpdates(nil) + } + + func restoreDefaults() { + let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" + let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") + let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") + let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") + + let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) + if response == .alertThirdButtonReturn { return } + + let rectangleDefaults = (response == .alertFirstButtonReturn) + WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } + Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults + Notification.Name.changeDefaults.post() + + Defaults.portraitSnapAreas.typedValue = nil + Defaults.landscapeSnapAreas.typedValue = nil + Notification.Name.defaultSnapAreas.post() + } + + func exportConfig() { + Notification.Name.windowSnapping.post(object: false) + let savePanel = NSSavePanel() + savePanel.allowedContentTypes = [.json] + savePanel.nameFieldStringValue = "RectangleConfig" + + if savePanel.runModal() == .OK, let url = savePanel.url { + do { + if let jsonString = Defaults.encoded() { + try jsonString.write(to: url, atomically: false, encoding: .utf8) + } + } catch { + Logger.log(error.localizedDescription) + } + } + Notification.Name.windowSnapping.post(object: true) + } + + func importConfig() { + Notification.Name.windowSnapping.post(object: false) + let openPanel = NSOpenPanel() + openPanel.allowedContentTypes = [.json] + + if openPanel.runModal() == .OK, let url = openPanel.url { + Defaults.load(fileUrl: url) + } + Notification.Name.windowSnapping.post(object: true) + } +} diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift new file mode 100644 index 000000000..103e64f04 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -0,0 +1,235 @@ +import AppKit +import SwiftUI + +class BehaviorSettingsViewController: NSViewController { + private var hostingController: NSHostingController! + + override func viewDidLoad() { + super.viewDidLoad() + + let swiftUIView = BehaviorSettingsView() + hostingController = NSHostingController(rootView: swiftUIView) + + addChild(hostingController) + hostingController.view.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(hostingController.view) + + NSLayoutConstraint.activate([ + hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), + hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), + hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), + hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) + ]) + } +} + +struct BehaviorSettingsView: View { + @StateObject private var viewModel = BehaviorSettingsViewModel() + + var body: some View { + Form { + // MARK: - Cycle Sizes & Window Behaviors + Section { + HStack { + Text("Repeated commands") + Spacer() + Picker("", selection: $viewModel.subsequentExecutionMode) { + ForEach(SubsequentExecutionMode.ordered, id: \.self) { mode in + Text(mode.title).tag(mode) + } + } + } + + if viewModel.subsequentExecutionMode.resizes { + VStack(alignment: .leading, spacing: 8) { + // Keep fraction choices as compact checkboxes + HStack(spacing: 12) { + Spacer() + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Toggle(size.title, isOn: viewModel.binding(for: size)) + .toggleStyle(.checkbox) + } + } + + HStack(spacing: 12) { + Text("Cyclic corner shortcuts expand:") + Spacer() + Picker("", selection: $viewModel.cornerCycleExpansionAxis) { + Text("horizontally").tag(CornerCycleExpansionAxis.horizontal) + Text("vertically").tag(CornerCycleExpansionAxis.vertical) + } + .pickerStyle(.radioGroup) + .horizontalRadioGroupLayout() + } + + if viewModel.showCooperativeCornerResize { + Toggle("Resize adjacent windows when cycling side or corner shortcuts", isOn: $viewModel.cooperativeCornerResize) + .toggleStyle(.switch) + } + } + .padding(.leading, 4) + .transition(.opacity.combined(with: .move(edge: .top))) + } + + VStack(alignment: .leading, spacing: 4) { + HStack { + Text("Gaps between windows") + Slider( + value: $viewModel.gapSize, + in: 0...100, + onEditingChanged: { editing in + if !editing { viewModel.commitGapSize() } + } + ) + Text("\(Int(viewModel.gapSize)) px") + .frame(width: 45, alignment: .trailing) + } + + if viewModel.gapSize > 0 { + Toggle("Remove top gap when snapping to top edge", isOn: $viewModel.skipGapTopEdge) + .toggleStyle(.switch) + } + } + + Group { + Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) + + if viewModel.showCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } + + Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + + VStack(alignment: .leading, spacing: 2) { + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Text("Hold any modifier key or use the window menu for default macOS behavior") + .font(.caption) + .foregroundColor(.secondary) + } + + if viewModel.showCombinedDisplayMode { + VStack(alignment: .leading, spacing: 2) { + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + .toggleStyle(.switch) + } + + // MARK: - Todo Mode + Section { + HStack { + Toggle(isOn: $viewModel.todoEnabled) { + HStack(spacing: 4) { + Text("Show Todo Mode in menu") + Button(action: viewModel.showTodoModeHelp) { + Image(systemName: "info.circle") + } + .buttonStyle(.plain) + } + } + } + + if viewModel.todoEnabled { + VStack(alignment: .leading, spacing: 10) { + Text("Keep a chosen application visible on the right of your primary screen at all times") + .font(.caption) + .foregroundColor(.secondary) + + HStack { + Text("Todo app width") + + Spacer() + + HStack(spacing: 4) { + TextField("", value: $viewModel.todoSidebarWidth, format: .number) + .frame(width: 100) + .textFieldStyle(.roundedBorder) + .onSubmit { viewModel.commitTodoWidth() } + + Picker("", selection: $viewModel.todoSidebarWidthUnit) { + Text("px").tag(TodoSidebarWidthUnit.pixels) + Text("%").tag(TodoSidebarWidthUnit.pct) + } + .labelsHidden() + .fixedSize() + } + } + + HStack { + Text("Todo side") + Spacer() + Picker("", selection: $viewModel.todoSidebarSide) { + Text("Left").tag(TodoSidebarSide.left) + Text("Right").tag(TodoSidebarSide.right) + } + .frame(width: 90) + } + + HStack { + Text("Toggle Todo") + Spacer() + MASShortcutViewRepresentable( + defaultsKey: TodoManager.toggleDefaultsKey, + validator: TodoShortcutValidator(defaultsKey: TodoManager.toggleDefaultsKey) + ) + .frame(width: 130, height: 22) + } + + HStack { + Text("Reflow Todo") + Spacer() + MASShortcutViewRepresentable( + defaultsKey: TodoManager.reflowDefaultsKey, + validator: TodoShortcutValidator(defaultsKey: TodoManager.reflowDefaultsKey) + ) + .frame(width: 130, height: 22) + } + } + .padding(.leading, 18) + .transition(.opacity.combined(with: .move(edge: .top))) + } + } + + // MARK: - Stage Manager + if viewModel.stageCapable { + Section { + VStack(alignment: .leading, spacing: 4) { + HStack { + Text("Stage Manager recent apps area") + Slider( + value: $viewModel.stageSize, + in: 0...400, + onEditingChanged: { editing in + if !editing { viewModel.commitStageSize() } + } + ) + Text("\(Int(viewModel.stageSize)) px") + .frame(width: 45, alignment: .trailing) + } + Text("If the area is too small, recent apps will be hidden") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + // MARK: - Footer Actions + Section { + HStack { + Button("Extras") { + viewModel.showExtrasPopover() + } + } + } + } + .formStyle(.grouped) + .frame(width: 500) + .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) + .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) + } +} diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift new file mode 100644 index 000000000..9e0dfa387 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -0,0 +1,282 @@ +import SwiftUI +import AppKit + +final class BehaviorSettingsViewModel: ObservableObject { + // MARK: - Window Behavior & Cycle Settings + @Published var subsequentExecutionMode: SubsequentExecutionMode { + didSet { + Defaults.subsequentExecutionMode.value = subsequentExecutionMode + } + } + + @Published var selectedCycleSizes: Set = [] + @Published var cornerCycleExpansionAxis: CornerCycleExpansionAxis { + didSet { + Defaults.cornerCycleExpansionAxis.value = cornerCycleExpansionAxis + } + } + + @Published var cooperativeCornerResize: Bool { + didSet { + Defaults.cooperativeCornerResize.enabled = cooperativeCornerResize + } + } + + @Published var gapSize: Double + @Published var skipGapTopEdge: Bool { + didSet { + Defaults.skipGapTopEdge.enabled = skipGapTopEdge + } + } + + @Published var moveCursorAcrossDisplays: Bool { + didSet { + Defaults.moveCursorAcrossDisplays.enabled = moveCursorAcrossDisplays + } + } + + @Published var useCursorScreenDetection: Bool { + didSet { + Defaults.useCursorScreenDetection.enabled = useCursorScreenDetection + } + } + + @Published var doubleClickTitleBar: Bool { + didSet { + handleDoubleClickTitleBarToggle(doubleClickTitleBar) + } + } + + @Published var autoMaximize: Bool { + didSet { + Defaults.autoMaximize.enabled = autoMaximize + } + } + + @Published var greenButtonOverride: Bool { + didSet { + Defaults.greenButtonOverride.enabled = greenButtonOverride + Notification.Name.greenButtonOverride.post() + } + } + + @Published var combinedDisplayMode: Bool { + didSet { + Defaults.combinedDisplayMode.enabled = combinedDisplayMode + } + } + + // MARK: - Todo Mode Settings + @Published var todoEnabled: Bool { + didSet { + Defaults.todo.enabled = todoEnabled + Notification.Name.todoMenuToggled.post() + } + } + + @Published var todoSidebarWidth: Float { + didSet { + Defaults.todoSidebarWidth.value = todoSidebarWidth + } + } + + @Published var todoSidebarWidthUnit: TodoSidebarWidthUnit { + didSet { + Defaults.todoSidebarWidthUnit.value = todoSidebarWidthUnit + TodoManager.refreshTodoScreen() + TodoManager.changeSidebarWidthUnit(to: todoSidebarWidthUnit) + todoSidebarWidth = Defaults.todoSidebarWidth.value + TodoManager.moveAllIfNeeded(false) + } + } + + @Published var todoSidebarSide: TodoSidebarSide { + didSet { + Defaults.todoSidebarSide.value = todoSidebarSide + TodoManager.moveAllIfNeeded(false) + } + } + + // MARK: - Stage Manager Settings + @Published var stageSize: Double + + // MARK: - UI Conditional Flags + var showCooperativeCornerResize: Bool { Defaults.cooperativeCornerResize.enabled } + var showCursorScreenDetection: Bool { Defaults.useCursorScreenDetection.enabled } + var showCombinedDisplayMode: Bool { !NSScreen.screensHaveSeparateSpaces } + var stageCapable: Bool { StageUtil.stageCapable } + + private var aboutTodoWindowController: NSWindowController? + + // MARK: - Initialization + init() { + + self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value + let isCycleChanged = Defaults.cycleSizesIsChanged.enabled + self.selectedCycleSizes = isCycleChanged ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes + self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value + self.cooperativeCornerResize = Defaults.cooperativeCornerResize.enabled + + self.gapSize = Double(Defaults.gapSize.value) + self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled + + self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled + self.useCursorScreenDetection = Defaults.useCursorScreenDetection.enabled + + self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil + self.autoMaximize = !Defaults.autoMaximize.userDisabled + self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled + + self.todoEnabled = Defaults.todo.userEnabled + self.todoSidebarWidth = Defaults.todoSidebarWidth.value + self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value + self.todoSidebarSide = Defaults.todoSidebarSide.value + + self.stageSize = Double(Defaults.stageSize.value) + + setupObservers() + } + + private func setupObservers() { + Notification.Name.configImported.onPost { [weak self] _ in + self?.reloadFromDefaults() + } + } + + func reloadFromDefaults() { + self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value + self.selectedCycleSizes = Defaults.cycleSizesIsChanged.enabled ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes + self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value + self.gapSize = Double(Defaults.gapSize.value) + self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled + self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled + self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil + self.autoMaximize = !Defaults.autoMaximize.userDisabled + self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled + self.todoEnabled = Defaults.todo.userEnabled + self.todoSidebarWidth = Defaults.todoSidebarWidth.value + self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value + self.todoSidebarSide = Defaults.todoSidebarSide.value + self.stageSize = Double(Defaults.stageSize.value) + } + + // MARK: - Cycle Sizes Binding Helper + func binding(for size: CycleSize) -> Binding { + Binding( + get: { self.selectedCycleSizes.contains(size) }, + set: { isChecked in + if !Defaults.cycleSizesIsChanged.enabled { + Defaults.selectedCycleSizes.value = CycleSize.defaultSizes + } + Defaults.cycleSizesIsChanged.enabled = true + + if isChecked { + self.selectedCycleSizes.insert(size) + } else { + self.selectedCycleSizes.remove(size) + } + Defaults.selectedCycleSizes.value = self.selectedCycleSizes + } + ) + } + + // MARK: - Action Handlers + func commitGapSize() { + if Float(gapSize) != Defaults.gapSize.value { + Defaults.gapSize.value = Float(gapSize) + } + } + + func commitStageSize() { + let value: Float = stageSize == 0 ? -1 : Float(stageSize) + if value != Defaults.stageSize.value { + Defaults.stageSize.value = value + } + } + + func commitTodoWidth() { + TodoManager.moveAllIfNeeded(false) + } + + func checkForUpdates() { + AppDelegate.instance.updaterController?.checkForUpdates(nil) + } + + private func handleDoubleClickTitleBarToggle(_ enabled: Bool) { + if enabled && !TitleBarManager.systemSettingDisabled { + let openSettings = NSLocalizedString("Open System Settings", tableName: "Main", value: "", comment: "") + let conflictTitleText = NSLocalizedString("Conflict with system setting", tableName: "Main", value: "", comment: "") + let conflictDescriptionText = NSLocalizedString("To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.", tableName: "Main", value: "", comment: "") + let closeText = NSLocalizedString("DVo-aG-piG.title", tableName: "Main", value: "Close", comment: "") + + let response = AlertUtil.twoButtonAlert(question: conflictTitleText, text: conflictDescriptionText, confirmText: openSettings, cancelText: closeText) + if response == .alertFirstButtonReturn { + NSWorkspace.shared.open(URL(string: "x-apple.systempreferences:com.apple.preference.dock")!) + } + } + Defaults.doubleClickTitleBar.value = (enabled ? WindowAction.maximize.rawValue : -1) + 1 + Notification.Name.windowTitleBar.post() + } + + func showTodoModeHelp() { + if aboutTodoWindowController == nil { + aboutTodoWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "AboutTodoWindowController") as? NSWindowController + } + NSApp.activate(ignoringOtherApps: true) + aboutTodoWindowController?.showWindow(nil) + } + + func restoreDefaults() { + let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" + let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") + let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") + let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") + + let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) + if response == .alertThirdButtonReturn { return } + + let rectangleDefaults = (response == .alertFirstButtonReturn) + WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } + Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults + Notification.Name.changeDefaults.post() + + Defaults.portraitSnapAreas.typedValue = nil + Defaults.landscapeSnapAreas.typedValue = nil + Notification.Name.defaultSnapAreas.post() + } + + func exportConfig() { + Notification.Name.windowSnapping.post(object: false) + let savePanel = NSSavePanel() + savePanel.allowedContentTypes = [.json] + savePanel.nameFieldStringValue = "RectangleConfig" + + if savePanel.runModal() == .OK, let url = savePanel.url { + do { + if let jsonString = Defaults.encoded() { + try jsonString.write(to: url, atomically: false, encoding: .utf8) + } + } catch { + Logger.log(error.localizedDescription) + } + } + Notification.Name.windowSnapping.post(object: true) + } + + func importConfig() { + Notification.Name.windowSnapping.post(object: false) + let openPanel = NSOpenPanel() + openPanel.allowedContentTypes = [.json] + + if openPanel.runModal() == .OK, let url = openPanel.url { + Defaults.load(fileUrl: url) + } + Notification.Name.windowSnapping.post(object: true) + } + + func showExtrasPopover() { + // Trigger your existing extras popover or sheet presentation logic here + } +} diff --git a/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift b/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift new file mode 100644 index 000000000..f95b162f3 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift @@ -0,0 +1,22 @@ +import SwiftUI +import MASShortcut + +struct MASShortcutViewRepresentable: NSViewRepresentable { + let defaultsKey: String + let validator: MASShortcutValidator? + + func makeNSView(context: Context) -> MASShortcutView { + let view = MASShortcutView() + view.setAssociatedUserDefaultsKey(defaultsKey, withTransformerName: MASDictionaryTransformerName) + if let validator = validator { + view.shortcutValidator = validator + } + return view + } + + func updateNSView(_ nsView: MASShortcutView, context: Context) { + if let validator = validator { + nsView.shortcutValidator = validator + } + } +} diff --git a/Rectangle/PrefsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindowController.swift rename to Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift new file mode 100644 index 000000000..9a077a655 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -0,0 +1,353 @@ +/// ShortcutsViewController.swift + +import Cocoa +import MASShortcut + +final class ShortcutItem: NSObject { + let action: WindowAction + + init(_ action: WindowAction) { + self.action = action + } +} + +final class SpacerItem: NSObject {} + +final class ShortcutCategory: NSObject { + let items: [Any] + + init(actions: [WindowAction], includeSpacer: Bool = true) { + var categoryItems: [Any] = actions.map { ShortcutItem($0) } + if includeSpacer { + categoryItems.append(SpacerItem()) + } + self.items = categoryItems + } +} + +final class ShortcutGroup: NSObject { + let title: String + let items: [Any] + + init(title: String, categories: [ShortcutCategory]) { + self.title = title + + var flatItems: [Any] = [] + for (index, category) in categories.enumerated() { + // Include action items + flatItems.append(contentsOf: category.items.compactMap { $0 as? ShortcutItem }) + + // Add spacer after each category except the last inside the group + if index < categories.count - 1 { + flatItems.append(SpacerItem()) + } + } + self.items = flatItems + } +} + +final class ShortcutSectionCellView: NSTableCellView { + static let identifier = NSUserInterfaceItemIdentifier("ShortcutSectionCell") + + let titleLabel = NSTextField(labelWithString: "") + + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + setup() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setup() + } + + private func setup() { + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = NSFont.boldSystemFont(ofSize: 12) + titleLabel.textColor = .secondaryLabelColor + addSubview(titleLabel) + + NSLayoutConstraint.activate([ + titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10), + titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -4), + titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor) + ]) + } + + func configure(title: String) { + titleLabel.stringValue = title + } +} + +final class ShortcutActionCellView: NSTableCellView { + static let identifier = NSUserInterfaceItemIdentifier("ShortcutActionCell") + + let iconImageView = NSImageView() + let titleLabel = NSTextField(labelWithString: "") + let shortcutView = MASShortcutView() + + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + setup() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setup() + } + + private func setup() { + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = NSFont.systemFont(ofSize: NSFont.systemFontSize) + titleLabel.textColor = .labelColor + titleLabel.alignment = .right + titleLabel.lineBreakMode = .byTruncatingTail + titleLabel.setContentHuggingPriority(.required, for: .horizontal) + titleLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + + iconImageView.translatesAutoresizingMaskIntoConstraints = false + iconImageView.imageScaling = .scaleProportionallyDown + iconImageView.setContentHuggingPriority(.required, for: .horizontal) + iconImageView.setContentCompressionResistancePriority(.required, for: .horizontal) + + shortcutView.translatesAutoresizingMaskIntoConstraints = false + + addSubview(titleLabel) + addSubview(iconImageView) + addSubview(shortcutView) + + NSLayoutConstraint.activate([ + shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), + shortcutView.centerYAnchor.constraint(equalTo: centerYAnchor), + shortcutView.widthAnchor.constraint(equalToConstant: 160), + shortcutView.heightAnchor.constraint(equalToConstant: 19), + + iconImageView.trailingAnchor.constraint(equalTo: shortcutView.leadingAnchor, constant: -16), + iconImageView.centerYAnchor.constraint(equalTo: centerYAnchor), + iconImageView.widthAnchor.constraint(equalToConstant: 21), + iconImageView.heightAnchor.constraint(equalToConstant: 14), + + titleLabel.trailingAnchor.constraint(equalTo: iconImageView.leadingAnchor, constant: -8), + titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor), + titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20) + ]) + } + + override func prepareForReuse() { + super.prepareForReuse() + shortcutView.associatedUserDefaultsKey = nil + } + + func configure(with action: WindowAction, recordingObserver: ShortcutRecordingObserver) { + iconImageView.image = action.image + titleLabel.stringValue = action.displayName ?? "" + + if Defaults.allowAnyShortcut.enabled { + shortcutView.shortcutValidator = PassthroughShortcutValidator() + } else { + shortcutView.shortcutValidator = MASShortcutValidator() + } + + shortcutView.associatedUserDefaultsKey = nil + shortcutView.setAssociatedUserDefaultsKey(action.name, withTransformerName: MASDictionaryTransformerName) + recordingObserver.observe([shortcutView]) + } +} + +class ShortcutsViewController: NSViewController { + + private let initialSize = NSSize(width: 500, height: 610) + private let scrollView = NSScrollView() + private let outlineView = NSOutlineView() + private let shortcutRecordingObserver = ShortcutRecordingObserver() + private var allowAnyShortcutObserver: NSObjectProtocol? + + private var rootItems: [Any] = [] + + override func loadView() { + setupGroups() + let containerView = NSView(frame: NSRect(origin: .zero, size: initialSize)) + + containerView.translatesAutoresizingMaskIntoConstraints = false + + NSLayoutConstraint.activate([ + containerView.widthAnchor.constraint(equalToConstant: initialSize.width), + containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: 200) // Minimum height allowed + ]) + + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.hasVerticalScroller = true + scrollView.hasHorizontalScroller = false + scrollView.autohidesScrollers = true + scrollView.drawsBackground = false + + outlineView.headerView = nil + outlineView.selectionHighlightStyle = .none + outlineView.rowHeight = 28 + outlineView.columnAutoresizingStyle = .uniformColumnAutoresizingStyle + outlineView.indentationPerLevel = 0 + + let column = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("ShortcutColumn")) + column.resizingMask = .autoresizingMask + column.width = 300 + outlineView.addTableColumn(column) + outlineView.outlineTableColumn = column + + outlineView.dataSource = self + outlineView.delegate = self + + scrollView.documentView = outlineView + containerView.addSubview(scrollView) + + NSLayoutConstraint.activate([ + scrollView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20), + scrollView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), + scrollView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), + scrollView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) + ]) + + self.view = containerView + } + + override func viewDidLoad() { + super.viewDidLoad() + subscribeToAllowAnyShortcutToggle() + } + + override func viewWillAppear() { + super.viewWillAppear() + view.window?.setContentSize(initialSize) + } + + private func setupGroups() { + let standardCategories: [ShortcutCategory] = [ + ShortcutCategory(actions: [.leftHalf, .rightHalf, .centerHalf, .topHalf, .bottomHalf]), + ShortcutCategory(actions: [.topLeft, .topRight, .bottomLeft, .bottomRight]), + ShortcutCategory(actions: [.maximize, .almostMaximize, .maximizeHeight, .larger, .smaller, .center, .restore]), + ShortcutCategory(actions: [.nextDisplay, .previousDisplay], includeSpacer: false) + ] + + let moreCategories: [ShortcutCategory] = [ + ShortcutCategory(actions: [.firstThird, .centerThird, .lastThird, .firstTwoThirds, .centerTwoThirds, .lastTwoThirds]), + ShortcutCategory(actions: [ + .firstFourth, .secondFourth, .thirdFourth, .lastFourth, .firstThreeFourths, .centerThreeFourths, .lastThreeFourths + ]), + ShortcutCategory(actions: [ + .topLeftSixth, .topCenterSixth, .topRightSixth, .bottomLeftSixth, .bottomCenterSixth, .bottomRightSixth + ]), + ShortcutCategory(actions: [.moveLeft, .moveRight, .moveUp, .moveDown], includeSpacer: false), + ] + + var items: [Any] = [] + for category in standardCategories { + items.append(contentsOf: category.items) + } + + let moreGroup = ShortcutGroup(title: "More", categories: moreCategories) + items.append(moreGroup) + + rootItems = items + } + + deinit { + if let observer = allowAnyShortcutObserver { + NotificationCenter.default.removeObserver(observer) + } + } + + private func subscribeToAllowAnyShortcutToggle() { + allowAnyShortcutObserver = Notification.Name.allowAnyShortcut.onPost { [weak self] _ in + guard let self = self else { return } + self.outlineView.reloadData() + self.outlineView.expandItem(nil, expandChildren: true) + } + } +} + +// MARK: - NSOutlineViewDataSource + +extension ShortcutsViewController: NSOutlineViewDataSource { + func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int { + if item == nil { + return rootItems.count + } + if let group = item as? ShortcutGroup { + return group.items.count + } + return 0 + } + + func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool { + return item is ShortcutGroup + } + + func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any { + if item == nil { + return rootItems[index] + } + if let group = item as? ShortcutGroup { + return group.items[index] + } + fatalError("Unexpected outline view item: \(String(describing: item))") + } +} + +// MARK: - NSOutlineViewDelegate + +extension ShortcutsViewController: NSOutlineViewDelegate { + func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { + if let group = item as? ShortcutGroup { + let cell = outlineView.makeView(withIdentifier: ShortcutSectionCellView.identifier, owner: self) as? ShortcutSectionCellView ?? ShortcutSectionCellView() + cell.identifier = ShortcutSectionCellView.identifier + cell.configure(title: group.title) + return cell + } + + if let shortcutItem = item as? ShortcutItem { + let cell = outlineView.makeView(withIdentifier: ShortcutActionCellView.identifier, owner: self) as? ShortcutActionCellView ?? ShortcutActionCellView() + cell.identifier = ShortcutActionCellView.identifier + cell.configure(with: shortcutItem.action, recordingObserver: shortcutRecordingObserver) + return cell + } + + if item is SpacerItem { + let spacerView = NSView() + spacerView.translatesAutoresizingMaskIntoConstraints = false + spacerView.heightAnchor.constraint(equalToConstant: 14).isActive = true + return spacerView + } + + return nil + } + + func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat { + if item is SpacerItem { + return 14 + } + return 28 + } + + // MARK: - NSOutlineViewDelegate Dynamic Sizing Fix + + func outlineViewItemDidExpand(_ notification: Notification) { + scheduleScrollViewUpdate() + } + + func outlineViewItemDidCollapse(_ notification: Notification) { + scheduleScrollViewUpdate() + } + + private func scheduleScrollViewUpdate() { + // Defer execution until NSOutlineView completes its internal row animation and index updates + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + + // Recalculate document frame height safely after row changes have finalized + if let documentView = self.scrollView.documentView { + documentView.frame.size.height = self.outlineView.intrinsicContentSize.height + } + + self.scrollView.reflectScrolledClipView(self.scrollView.contentView) + } + } +} From aafe253031df96888c1f7dff162e4514ecf7e5a6 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 10:48:12 -0400 Subject: [PATCH 20/79] Reasonable window sizes for panes --- Rectangle.xcodeproj/project.pbxproj | 22 +- .../PrefsWindow/AppSettingsViewModel.swift | 122 ------ .../PrefsWindow/BehaviorSettingsView.swift | 235 ------------ .../BehaviorSettingsViewModel.swift | 282 -------------- .../MASShortcutViewRepresentable.swift | 22 -- .../SettingsWindowController.swift | 100 +++-- .../PrefsWindow/ShortcutsViewController.swift | 353 ------------------ 7 files changed, 74 insertions(+), 1062 deletions(-) delete mode 100644 Rectangle/PrefsWindow/AppSettingsViewModel.swift delete mode 100644 Rectangle/PrefsWindow/BehaviorSettingsView.swift delete mode 100644 Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift delete mode 100644 Rectangle/PrefsWindow/MASShortcutViewRepresentable.swift delete mode 100644 Rectangle/PrefsWindow/ShortcutsViewController.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 11dd4c818..126e49a5d 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -757,14 +757,8 @@ 98910B3C2311304D0066EC23 /* PrefsWindow */ = { isa = PBXGroup; children = ( - 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */, - 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, - 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */, - 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, - 98ED7049306171650077BD10 /* AppSettingsView.swift */, - 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, + 98ED704D306179160077BD10 /* SettingsWindow */, 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */, - 98985838305C1B6400459AFF /* SettingsWindowController.swift */, 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, 98910B3D231130AF0066EC23 /* SettingsViewController.swift */, 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */, @@ -810,6 +804,20 @@ path = TodoMode; sourceTree = ""; }; + 98ED704D306179160077BD10 /* SettingsWindow */ = { + isa = PBXGroup; + children = ( + 98985838305C1B6400459AFF /* SettingsWindowController.swift */, + 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */, + 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, + 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */, + 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, + 98ED7049306171650077BD10 /* AppSettingsView.swift */, + 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, + ); + path = SettingsWindow; + sourceTree = ""; + }; F1AC0DE000000000000000A5 /* StackBadge */ = { isa = PBXGroup; children = ( diff --git a/Rectangle/PrefsWindow/AppSettingsViewModel.swift b/Rectangle/PrefsWindow/AppSettingsViewModel.swift deleted file mode 100644 index 3111f3bd6..000000000 --- a/Rectangle/PrefsWindow/AppSettingsViewModel.swift +++ /dev/null @@ -1,122 +0,0 @@ -import SwiftUI -import AppKit - -final class AppSettingsViewModel: ObservableObject { - // MARK: - General Settings - @Published var launchOnLogin: Bool { - didSet { - LaunchOnLogin.isEnabled = launchOnLogin - Defaults.launchOnLogin.enabled = launchOnLogin - } - } - - @Published var hideMenuBarIcon: Bool { - didSet { - Defaults.hideMenuBarIcon.enabled = hideMenuBarIcon - RectangleStatusItem.instance.refreshVisibility() - } - } - - @Published var checkForUpdatesAutomatically: Bool { - didSet { - AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates = checkForUpdatesAutomatically - } - } - - @Published var hasPendingUpdate: Bool = false - @Published var versionString: String = "" - - @Published var allowAnyShortcut: Bool { - didSet { - Defaults.allowAnyShortcut.enabled = allowAnyShortcut - Notification.Name.allowAnyShortcut.post(object: allowAnyShortcut) - } - } - - // MARK: - Initialization - init() { - self.launchOnLogin = Defaults.launchOnLogin.enabled - self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled - self.checkForUpdatesAutomatically = AppDelegate.instance.updaterController?.updater.automaticallyChecksForUpdates ?? false - self.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate - self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled - - let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" - let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "" - self.versionString = "v\(appVersion) (\(build))" - - setupObservers() - } - - private func setupObservers() { - Notification.Name.menuBarIconHidden.onPost { [weak self] _ in - self?.hideMenuBarIcon = true - } - - Notification.Name.updateAvailability.onPost { [weak self] _ in - self?.hasPendingUpdate = AppDelegate.instance.hasPendingUpdate - } - - Notification.Name.configImported.onPost { [weak self] _ in - self?.reloadFromDefaults() - } - } - - func reloadFromDefaults() { - self.launchOnLogin = Defaults.launchOnLogin.enabled - self.hideMenuBarIcon = Defaults.hideMenuBarIcon.enabled - self.allowAnyShortcut = Defaults.allowAnyShortcut.enabled - } - - func checkForUpdates() { - AppDelegate.instance.updaterController?.checkForUpdates(nil) - } - - func restoreDefaults() { - let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" - let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") - let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") - let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") - - let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) - if response == .alertThirdButtonReturn { return } - - let rectangleDefaults = (response == .alertFirstButtonReturn) - WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } - Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults - Notification.Name.changeDefaults.post() - - Defaults.portraitSnapAreas.typedValue = nil - Defaults.landscapeSnapAreas.typedValue = nil - Notification.Name.defaultSnapAreas.post() - } - - func exportConfig() { - Notification.Name.windowSnapping.post(object: false) - let savePanel = NSSavePanel() - savePanel.allowedContentTypes = [.json] - savePanel.nameFieldStringValue = "RectangleConfig" - - if savePanel.runModal() == .OK, let url = savePanel.url { - do { - if let jsonString = Defaults.encoded() { - try jsonString.write(to: url, atomically: false, encoding: .utf8) - } - } catch { - Logger.log(error.localizedDescription) - } - } - Notification.Name.windowSnapping.post(object: true) - } - - func importConfig() { - Notification.Name.windowSnapping.post(object: false) - let openPanel = NSOpenPanel() - openPanel.allowedContentTypes = [.json] - - if openPanel.runModal() == .OK, let url = openPanel.url { - Defaults.load(fileUrl: url) - } - Notification.Name.windowSnapping.post(object: true) - } -} diff --git a/Rectangle/PrefsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/BehaviorSettingsView.swift deleted file mode 100644 index 103e64f04..000000000 --- a/Rectangle/PrefsWindow/BehaviorSettingsView.swift +++ /dev/null @@ -1,235 +0,0 @@ -import AppKit -import SwiftUI - -class BehaviorSettingsViewController: NSViewController { - private var hostingController: NSHostingController! - - override func viewDidLoad() { - super.viewDidLoad() - - let swiftUIView = BehaviorSettingsView() - hostingController = NSHostingController(rootView: swiftUIView) - - addChild(hostingController) - hostingController.view.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(hostingController.view) - - NSLayoutConstraint.activate([ - hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), - hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), - hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), - hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) - ]) - } -} - -struct BehaviorSettingsView: View { - @StateObject private var viewModel = BehaviorSettingsViewModel() - - var body: some View { - Form { - // MARK: - Cycle Sizes & Window Behaviors - Section { - HStack { - Text("Repeated commands") - Spacer() - Picker("", selection: $viewModel.subsequentExecutionMode) { - ForEach(SubsequentExecutionMode.ordered, id: \.self) { mode in - Text(mode.title).tag(mode) - } - } - } - - if viewModel.subsequentExecutionMode.resizes { - VStack(alignment: .leading, spacing: 8) { - // Keep fraction choices as compact checkboxes - HStack(spacing: 12) { - Spacer() - ForEach(CycleSize.sortedSizes, id: \.self) { size in - Toggle(size.title, isOn: viewModel.binding(for: size)) - .toggleStyle(.checkbox) - } - } - - HStack(spacing: 12) { - Text("Cyclic corner shortcuts expand:") - Spacer() - Picker("", selection: $viewModel.cornerCycleExpansionAxis) { - Text("horizontally").tag(CornerCycleExpansionAxis.horizontal) - Text("vertically").tag(CornerCycleExpansionAxis.vertical) - } - .pickerStyle(.radioGroup) - .horizontalRadioGroupLayout() - } - - if viewModel.showCooperativeCornerResize { - Toggle("Resize adjacent windows when cycling side or corner shortcuts", isOn: $viewModel.cooperativeCornerResize) - .toggleStyle(.switch) - } - } - .padding(.leading, 4) - .transition(.opacity.combined(with: .move(edge: .top))) - } - - VStack(alignment: .leading, spacing: 4) { - HStack { - Text("Gaps between windows") - Slider( - value: $viewModel.gapSize, - in: 0...100, - onEditingChanged: { editing in - if !editing { viewModel.commitGapSize() } - } - ) - Text("\(Int(viewModel.gapSize)) px") - .frame(width: 45, alignment: .trailing) - } - - if viewModel.gapSize > 0 { - Toggle("Remove top gap when snapping to top edge", isOn: $viewModel.skipGapTopEdge) - .toggleStyle(.switch) - } - } - - Group { - Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) - - if viewModel.showCursorScreenDetection { - Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) - } - - Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) - Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - - VStack(alignment: .leading, spacing: 2) { - Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) - Text("Hold any modifier key or use the window menu for default macOS behavior") - .font(.caption) - .foregroundColor(.secondary) - } - - if viewModel.showCombinedDisplayMode { - VStack(alignment: .leading, spacing: 2) { - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") - .font(.caption) - .foregroundColor(.secondary) - } - } - } - .toggleStyle(.switch) - } - - // MARK: - Todo Mode - Section { - HStack { - Toggle(isOn: $viewModel.todoEnabled) { - HStack(spacing: 4) { - Text("Show Todo Mode in menu") - Button(action: viewModel.showTodoModeHelp) { - Image(systemName: "info.circle") - } - .buttonStyle(.plain) - } - } - } - - if viewModel.todoEnabled { - VStack(alignment: .leading, spacing: 10) { - Text("Keep a chosen application visible on the right of your primary screen at all times") - .font(.caption) - .foregroundColor(.secondary) - - HStack { - Text("Todo app width") - - Spacer() - - HStack(spacing: 4) { - TextField("", value: $viewModel.todoSidebarWidth, format: .number) - .frame(width: 100) - .textFieldStyle(.roundedBorder) - .onSubmit { viewModel.commitTodoWidth() } - - Picker("", selection: $viewModel.todoSidebarWidthUnit) { - Text("px").tag(TodoSidebarWidthUnit.pixels) - Text("%").tag(TodoSidebarWidthUnit.pct) - } - .labelsHidden() - .fixedSize() - } - } - - HStack { - Text("Todo side") - Spacer() - Picker("", selection: $viewModel.todoSidebarSide) { - Text("Left").tag(TodoSidebarSide.left) - Text("Right").tag(TodoSidebarSide.right) - } - .frame(width: 90) - } - - HStack { - Text("Toggle Todo") - Spacer() - MASShortcutViewRepresentable( - defaultsKey: TodoManager.toggleDefaultsKey, - validator: TodoShortcutValidator(defaultsKey: TodoManager.toggleDefaultsKey) - ) - .frame(width: 130, height: 22) - } - - HStack { - Text("Reflow Todo") - Spacer() - MASShortcutViewRepresentable( - defaultsKey: TodoManager.reflowDefaultsKey, - validator: TodoShortcutValidator(defaultsKey: TodoManager.reflowDefaultsKey) - ) - .frame(width: 130, height: 22) - } - } - .padding(.leading, 18) - .transition(.opacity.combined(with: .move(edge: .top))) - } - } - - // MARK: - Stage Manager - if viewModel.stageCapable { - Section { - VStack(alignment: .leading, spacing: 4) { - HStack { - Text("Stage Manager recent apps area") - Slider( - value: $viewModel.stageSize, - in: 0...400, - onEditingChanged: { editing in - if !editing { viewModel.commitStageSize() } - } - ) - Text("\(Int(viewModel.stageSize)) px") - .frame(width: 45, alignment: .trailing) - } - Text("If the area is too small, recent apps will be hidden") - .font(.caption) - .foregroundColor(.secondary) - } - } - } - - // MARK: - Footer Actions - Section { - HStack { - Button("Extras") { - viewModel.showExtrasPopover() - } - } - } - } - .formStyle(.grouped) - .frame(width: 500) - .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) - .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) - } -} diff --git a/Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift deleted file mode 100644 index 9e0dfa387..000000000 --- a/Rectangle/PrefsWindow/BehaviorSettingsViewModel.swift +++ /dev/null @@ -1,282 +0,0 @@ -import SwiftUI -import AppKit - -final class BehaviorSettingsViewModel: ObservableObject { - // MARK: - Window Behavior & Cycle Settings - @Published var subsequentExecutionMode: SubsequentExecutionMode { - didSet { - Defaults.subsequentExecutionMode.value = subsequentExecutionMode - } - } - - @Published var selectedCycleSizes: Set = [] - @Published var cornerCycleExpansionAxis: CornerCycleExpansionAxis { - didSet { - Defaults.cornerCycleExpansionAxis.value = cornerCycleExpansionAxis - } - } - - @Published var cooperativeCornerResize: Bool { - didSet { - Defaults.cooperativeCornerResize.enabled = cooperativeCornerResize - } - } - - @Published var gapSize: Double - @Published var skipGapTopEdge: Bool { - didSet { - Defaults.skipGapTopEdge.enabled = skipGapTopEdge - } - } - - @Published var moveCursorAcrossDisplays: Bool { - didSet { - Defaults.moveCursorAcrossDisplays.enabled = moveCursorAcrossDisplays - } - } - - @Published var useCursorScreenDetection: Bool { - didSet { - Defaults.useCursorScreenDetection.enabled = useCursorScreenDetection - } - } - - @Published var doubleClickTitleBar: Bool { - didSet { - handleDoubleClickTitleBarToggle(doubleClickTitleBar) - } - } - - @Published var autoMaximize: Bool { - didSet { - Defaults.autoMaximize.enabled = autoMaximize - } - } - - @Published var greenButtonOverride: Bool { - didSet { - Defaults.greenButtonOverride.enabled = greenButtonOverride - Notification.Name.greenButtonOverride.post() - } - } - - @Published var combinedDisplayMode: Bool { - didSet { - Defaults.combinedDisplayMode.enabled = combinedDisplayMode - } - } - - // MARK: - Todo Mode Settings - @Published var todoEnabled: Bool { - didSet { - Defaults.todo.enabled = todoEnabled - Notification.Name.todoMenuToggled.post() - } - } - - @Published var todoSidebarWidth: Float { - didSet { - Defaults.todoSidebarWidth.value = todoSidebarWidth - } - } - - @Published var todoSidebarWidthUnit: TodoSidebarWidthUnit { - didSet { - Defaults.todoSidebarWidthUnit.value = todoSidebarWidthUnit - TodoManager.refreshTodoScreen() - TodoManager.changeSidebarWidthUnit(to: todoSidebarWidthUnit) - todoSidebarWidth = Defaults.todoSidebarWidth.value - TodoManager.moveAllIfNeeded(false) - } - } - - @Published var todoSidebarSide: TodoSidebarSide { - didSet { - Defaults.todoSidebarSide.value = todoSidebarSide - TodoManager.moveAllIfNeeded(false) - } - } - - // MARK: - Stage Manager Settings - @Published var stageSize: Double - - // MARK: - UI Conditional Flags - var showCooperativeCornerResize: Bool { Defaults.cooperativeCornerResize.enabled } - var showCursorScreenDetection: Bool { Defaults.useCursorScreenDetection.enabled } - var showCombinedDisplayMode: Bool { !NSScreen.screensHaveSeparateSpaces } - var stageCapable: Bool { StageUtil.stageCapable } - - private var aboutTodoWindowController: NSWindowController? - - // MARK: - Initialization - init() { - - self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value - let isCycleChanged = Defaults.cycleSizesIsChanged.enabled - self.selectedCycleSizes = isCycleChanged ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes - self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value - self.cooperativeCornerResize = Defaults.cooperativeCornerResize.enabled - - self.gapSize = Double(Defaults.gapSize.value) - self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled - - self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled - self.useCursorScreenDetection = Defaults.useCursorScreenDetection.enabled - - self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil - self.autoMaximize = !Defaults.autoMaximize.userDisabled - self.greenButtonOverride = Defaults.greenButtonOverride.enabled - self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled - - self.todoEnabled = Defaults.todo.userEnabled - self.todoSidebarWidth = Defaults.todoSidebarWidth.value - self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value - self.todoSidebarSide = Defaults.todoSidebarSide.value - - self.stageSize = Double(Defaults.stageSize.value) - - setupObservers() - } - - private func setupObservers() { - Notification.Name.configImported.onPost { [weak self] _ in - self?.reloadFromDefaults() - } - } - - func reloadFromDefaults() { - self.subsequentExecutionMode = Defaults.subsequentExecutionMode.value - self.selectedCycleSizes = Defaults.cycleSizesIsChanged.enabled ? Defaults.selectedCycleSizes.value : CycleSize.defaultSizes - self.cornerCycleExpansionAxis = Defaults.cornerCycleExpansionAxis.value - self.gapSize = Double(Defaults.gapSize.value) - self.skipGapTopEdge = Defaults.skipGapTopEdge.enabled - self.moveCursorAcrossDisplays = Defaults.moveCursorAcrossDisplays.userEnabled - self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil - self.autoMaximize = !Defaults.autoMaximize.userDisabled - self.greenButtonOverride = Defaults.greenButtonOverride.enabled - self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled - self.todoEnabled = Defaults.todo.userEnabled - self.todoSidebarWidth = Defaults.todoSidebarWidth.value - self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value - self.todoSidebarSide = Defaults.todoSidebarSide.value - self.stageSize = Double(Defaults.stageSize.value) - } - - // MARK: - Cycle Sizes Binding Helper - func binding(for size: CycleSize) -> Binding { - Binding( - get: { self.selectedCycleSizes.contains(size) }, - set: { isChecked in - if !Defaults.cycleSizesIsChanged.enabled { - Defaults.selectedCycleSizes.value = CycleSize.defaultSizes - } - Defaults.cycleSizesIsChanged.enabled = true - - if isChecked { - self.selectedCycleSizes.insert(size) - } else { - self.selectedCycleSizes.remove(size) - } - Defaults.selectedCycleSizes.value = self.selectedCycleSizes - } - ) - } - - // MARK: - Action Handlers - func commitGapSize() { - if Float(gapSize) != Defaults.gapSize.value { - Defaults.gapSize.value = Float(gapSize) - } - } - - func commitStageSize() { - let value: Float = stageSize == 0 ? -1 : Float(stageSize) - if value != Defaults.stageSize.value { - Defaults.stageSize.value = value - } - } - - func commitTodoWidth() { - TodoManager.moveAllIfNeeded(false) - } - - func checkForUpdates() { - AppDelegate.instance.updaterController?.checkForUpdates(nil) - } - - private func handleDoubleClickTitleBarToggle(_ enabled: Bool) { - if enabled && !TitleBarManager.systemSettingDisabled { - let openSettings = NSLocalizedString("Open System Settings", tableName: "Main", value: "", comment: "") - let conflictTitleText = NSLocalizedString("Conflict with system setting", tableName: "Main", value: "", comment: "") - let conflictDescriptionText = NSLocalizedString("To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.", tableName: "Main", value: "", comment: "") - let closeText = NSLocalizedString("DVo-aG-piG.title", tableName: "Main", value: "Close", comment: "") - - let response = AlertUtil.twoButtonAlert(question: conflictTitleText, text: conflictDescriptionText, confirmText: openSettings, cancelText: closeText) - if response == .alertFirstButtonReturn { - NSWorkspace.shared.open(URL(string: "x-apple.systempreferences:com.apple.preference.dock")!) - } - } - Defaults.doubleClickTitleBar.value = (enabled ? WindowAction.maximize.rawValue : -1) + 1 - Notification.Name.windowTitleBar.post() - } - - func showTodoModeHelp() { - if aboutTodoWindowController == nil { - aboutTodoWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "AboutTodoWindowController") as? NSWindowController - } - NSApp.activate(ignoringOtherApps: true) - aboutTodoWindowController?.showWindow(nil) - } - - func restoreDefaults() { - let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" - let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") - let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") - let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") - - let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) - if response == .alertThirdButtonReturn { return } - - let rectangleDefaults = (response == .alertFirstButtonReturn) - WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } - Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults - Notification.Name.changeDefaults.post() - - Defaults.portraitSnapAreas.typedValue = nil - Defaults.landscapeSnapAreas.typedValue = nil - Notification.Name.defaultSnapAreas.post() - } - - func exportConfig() { - Notification.Name.windowSnapping.post(object: false) - let savePanel = NSSavePanel() - savePanel.allowedContentTypes = [.json] - savePanel.nameFieldStringValue = "RectangleConfig" - - if savePanel.runModal() == .OK, let url = savePanel.url { - do { - if let jsonString = Defaults.encoded() { - try jsonString.write(to: url, atomically: false, encoding: .utf8) - } - } catch { - Logger.log(error.localizedDescription) - } - } - Notification.Name.windowSnapping.post(object: true) - } - - func importConfig() { - Notification.Name.windowSnapping.post(object: false) - let openPanel = NSOpenPanel() - openPanel.allowedContentTypes = [.json] - - if openPanel.runModal() == .OK, let url = openPanel.url { - Defaults.load(fileUrl: url) - } - Notification.Name.windowSnapping.post(object: true) - } - - func showExtrasPopover() { - // Trigger your existing extras popover or sheet presentation logic here - } -} diff --git a/Rectangle/PrefsWindow/MASShortcutViewRepresentable.swift b/Rectangle/PrefsWindow/MASShortcutViewRepresentable.swift deleted file mode 100644 index f95b162f3..000000000 --- a/Rectangle/PrefsWindow/MASShortcutViewRepresentable.swift +++ /dev/null @@ -1,22 +0,0 @@ -import SwiftUI -import MASShortcut - -struct MASShortcutViewRepresentable: NSViewRepresentable { - let defaultsKey: String - let validator: MASShortcutValidator? - - func makeNSView(context: Context) -> MASShortcutView { - let view = MASShortcutView() - view.setAssociatedUserDefaultsKey(defaultsKey, withTransformerName: MASDictionaryTransformerName) - if let validator = validator { - view.shortcutValidator = validator - } - return view - } - - func updateNSView(_ nsView: MASShortcutView, context: Context) { - if let validator = validator { - nsView.shortcutValidator = validator - } - } -} diff --git a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift index 370a3c31c..8e33dfd8c 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift @@ -9,8 +9,8 @@ class SettingsWindowController: NSWindowController { let window = NSWindow(contentViewController: contentViewController) window.styleMask = [.titled, .closable, .miniaturizable, .resizable] - window.title = "Shortcuts" - window.setContentSize(NSSize(width: 480, height: 540)) + window.title = SettingsTabViewController.Tab.shortcuts.label + window.setContentSize(SettingsTabViewController.Tab.shortcuts.defaultSize) window.minSize = NSSize(width: 420, height: 350) window.center() @@ -20,6 +20,53 @@ class SettingsWindowController: NSWindowController { class SettingsTabViewController: NSTabViewController { + enum Tab: Int, CaseIterable { + case shortcuts + case snapAreas + case behavior + case appSettings + + var label: String { + switch self { + case .shortcuts: return "Shortcuts" + case .snapAreas: return "Snap Areas" + case .behavior: return "Behavior" + case .appSettings: return "App Settings" + } + } + + var imageName: String { + switch self { + case .shortcuts: return "keyboardToolbarTemplate" + case .snapAreas: return "snapAreaTemplate" + case .behavior: return "toolbarSettingsTemplate" + case .appSettings: return "appSettingsTemplate" + } + } + + var defaultSize: NSSize { + switch self { + case .shortcuts: return NSSize(width: 500, height: 540) + case .snapAreas: return NSSize(width: 550, height: 480) + case .behavior: return NSSize(width: 500, height: 550) + case .appSettings: return NSSize(width: 500, height: 442) + } + } + + func makeViewController() -> NSViewController { + switch self { + case .shortcuts: + return ShortcutsViewController() + case .snapAreas: + return NSViewController.newControllerFromStoryboard(identifier: "SnapAreaViewController") + case .behavior: + return BehaviorSettingsViewController() + case .appSettings: + return AppSettingsViewController() + } + } + } + private var savedTabSizes: [Int: NSSize] = [:] override func viewDidLoad() { @@ -27,29 +74,12 @@ class SettingsTabViewController: NSTabViewController { self.tabStyle = .toolbar - let shortcutsVC = ShortcutsViewController() - let shortcutsItem = NSTabViewItem(viewController: shortcutsVC) - shortcutsItem.label = "Shortcuts" - shortcutsItem.image = NSImage(imageLiteralResourceName: "keyboardToolbarTemplate") - addTabViewItem(shortcutsItem) - - let snapAreaVC = NSViewController.newControllerFromStoryboard(identifier: "SnapAreaViewController") - let snapAreaItem = NSTabViewItem(viewController: snapAreaVC) - snapAreaItem.label = "Snap Areas" - snapAreaItem.image = NSImage(imageLiteralResourceName: "snapAreaTemplate") - addTabViewItem(snapAreaItem) - - let behaviorVC = BehaviorSettingsViewController() - let behaviorItem = NSTabViewItem(viewController: behaviorVC) - behaviorItem.label = "Behavior" - behaviorItem.image = NSImage(imageLiteralResourceName: "toolbarSettingsTemplate") - addTabViewItem(behaviorItem) - - let appSettingsVC = AppSettingsViewController() - let appSettingsItem = NSTabViewItem(viewController: appSettingsVC) - appSettingsItem.label = "App Settings" - appSettingsItem.image = NSImage(imageLiteralResourceName: "appSettingsTemplate") - addTabViewItem(appSettingsItem) + for tab in Tab.allCases { + let item = NSTabViewItem(viewController: tab.makeViewController()) + item.label = tab.label + item.image = NSImage(imageLiteralResourceName: tab.imageName) + addTabViewItem(item) + } } override var selectedTabViewItemIndex: Int { @@ -78,23 +108,11 @@ class SettingsTabViewController: NSTabViewController { private func tabDidSwitch(to item: NSTabViewItem, at index: Int) { view.window?.title = item.label - if let savedSize = savedTabSizes[selectedTabViewItemIndex] { + if let savedSize = savedTabSizes[index] { resizeWindow(to: savedSize, animated: true) + } else if Tab.allCases.indices.contains(index) { + let initialSize = Tab.allCases[index].defaultSize + resizeWindow(to: initialSize, animated: true) } } } - -class AdvancedSettingsViewController: NSViewController { - override func loadView() { - self.view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 200)) - - let label = NSTextField(labelWithString: "Advanced Settings View") - label.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(label) - - NSLayoutConstraint.activate([ - label.centerXAnchor.constraint(equalTo: view.centerXAnchor), - label.centerYAnchor.constraint(equalTo: view.centerYAnchor) - ]) - } -} diff --git a/Rectangle/PrefsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/ShortcutsViewController.swift deleted file mode 100644 index 9a077a655..000000000 --- a/Rectangle/PrefsWindow/ShortcutsViewController.swift +++ /dev/null @@ -1,353 +0,0 @@ -/// ShortcutsViewController.swift - -import Cocoa -import MASShortcut - -final class ShortcutItem: NSObject { - let action: WindowAction - - init(_ action: WindowAction) { - self.action = action - } -} - -final class SpacerItem: NSObject {} - -final class ShortcutCategory: NSObject { - let items: [Any] - - init(actions: [WindowAction], includeSpacer: Bool = true) { - var categoryItems: [Any] = actions.map { ShortcutItem($0) } - if includeSpacer { - categoryItems.append(SpacerItem()) - } - self.items = categoryItems - } -} - -final class ShortcutGroup: NSObject { - let title: String - let items: [Any] - - init(title: String, categories: [ShortcutCategory]) { - self.title = title - - var flatItems: [Any] = [] - for (index, category) in categories.enumerated() { - // Include action items - flatItems.append(contentsOf: category.items.compactMap { $0 as? ShortcutItem }) - - // Add spacer after each category except the last inside the group - if index < categories.count - 1 { - flatItems.append(SpacerItem()) - } - } - self.items = flatItems - } -} - -final class ShortcutSectionCellView: NSTableCellView { - static let identifier = NSUserInterfaceItemIdentifier("ShortcutSectionCell") - - let titleLabel = NSTextField(labelWithString: "") - - override init(frame frameRect: NSRect) { - super.init(frame: frameRect) - setup() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - setup() - } - - private func setup() { - titleLabel.translatesAutoresizingMaskIntoConstraints = false - titleLabel.font = NSFont.boldSystemFont(ofSize: 12) - titleLabel.textColor = .secondaryLabelColor - addSubview(titleLabel) - - NSLayoutConstraint.activate([ - titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10), - titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -4), - titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor) - ]) - } - - func configure(title: String) { - titleLabel.stringValue = title - } -} - -final class ShortcutActionCellView: NSTableCellView { - static let identifier = NSUserInterfaceItemIdentifier("ShortcutActionCell") - - let iconImageView = NSImageView() - let titleLabel = NSTextField(labelWithString: "") - let shortcutView = MASShortcutView() - - override init(frame frameRect: NSRect) { - super.init(frame: frameRect) - setup() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - setup() - } - - private func setup() { - titleLabel.translatesAutoresizingMaskIntoConstraints = false - titleLabel.font = NSFont.systemFont(ofSize: NSFont.systemFontSize) - titleLabel.textColor = .labelColor - titleLabel.alignment = .right - titleLabel.lineBreakMode = .byTruncatingTail - titleLabel.setContentHuggingPriority(.required, for: .horizontal) - titleLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) - - iconImageView.translatesAutoresizingMaskIntoConstraints = false - iconImageView.imageScaling = .scaleProportionallyDown - iconImageView.setContentHuggingPriority(.required, for: .horizontal) - iconImageView.setContentCompressionResistancePriority(.required, for: .horizontal) - - shortcutView.translatesAutoresizingMaskIntoConstraints = false - - addSubview(titleLabel) - addSubview(iconImageView) - addSubview(shortcutView) - - NSLayoutConstraint.activate([ - shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), - shortcutView.centerYAnchor.constraint(equalTo: centerYAnchor), - shortcutView.widthAnchor.constraint(equalToConstant: 160), - shortcutView.heightAnchor.constraint(equalToConstant: 19), - - iconImageView.trailingAnchor.constraint(equalTo: shortcutView.leadingAnchor, constant: -16), - iconImageView.centerYAnchor.constraint(equalTo: centerYAnchor), - iconImageView.widthAnchor.constraint(equalToConstant: 21), - iconImageView.heightAnchor.constraint(equalToConstant: 14), - - titleLabel.trailingAnchor.constraint(equalTo: iconImageView.leadingAnchor, constant: -8), - titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor), - titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20) - ]) - } - - override func prepareForReuse() { - super.prepareForReuse() - shortcutView.associatedUserDefaultsKey = nil - } - - func configure(with action: WindowAction, recordingObserver: ShortcutRecordingObserver) { - iconImageView.image = action.image - titleLabel.stringValue = action.displayName ?? "" - - if Defaults.allowAnyShortcut.enabled { - shortcutView.shortcutValidator = PassthroughShortcutValidator() - } else { - shortcutView.shortcutValidator = MASShortcutValidator() - } - - shortcutView.associatedUserDefaultsKey = nil - shortcutView.setAssociatedUserDefaultsKey(action.name, withTransformerName: MASDictionaryTransformerName) - recordingObserver.observe([shortcutView]) - } -} - -class ShortcutsViewController: NSViewController { - - private let initialSize = NSSize(width: 500, height: 610) - private let scrollView = NSScrollView() - private let outlineView = NSOutlineView() - private let shortcutRecordingObserver = ShortcutRecordingObserver() - private var allowAnyShortcutObserver: NSObjectProtocol? - - private var rootItems: [Any] = [] - - override func loadView() { - setupGroups() - let containerView = NSView(frame: NSRect(origin: .zero, size: initialSize)) - - containerView.translatesAutoresizingMaskIntoConstraints = false - - NSLayoutConstraint.activate([ - containerView.widthAnchor.constraint(equalToConstant: initialSize.width), - containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: 200) // Minimum height allowed - ]) - - scrollView.translatesAutoresizingMaskIntoConstraints = false - scrollView.hasVerticalScroller = true - scrollView.hasHorizontalScroller = false - scrollView.autohidesScrollers = true - scrollView.drawsBackground = false - - outlineView.headerView = nil - outlineView.selectionHighlightStyle = .none - outlineView.rowHeight = 28 - outlineView.columnAutoresizingStyle = .uniformColumnAutoresizingStyle - outlineView.indentationPerLevel = 0 - - let column = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("ShortcutColumn")) - column.resizingMask = .autoresizingMask - column.width = 300 - outlineView.addTableColumn(column) - outlineView.outlineTableColumn = column - - outlineView.dataSource = self - outlineView.delegate = self - - scrollView.documentView = outlineView - containerView.addSubview(scrollView) - - NSLayoutConstraint.activate([ - scrollView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20), - scrollView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), - scrollView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), - scrollView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) - ]) - - self.view = containerView - } - - override func viewDidLoad() { - super.viewDidLoad() - subscribeToAllowAnyShortcutToggle() - } - - override func viewWillAppear() { - super.viewWillAppear() - view.window?.setContentSize(initialSize) - } - - private func setupGroups() { - let standardCategories: [ShortcutCategory] = [ - ShortcutCategory(actions: [.leftHalf, .rightHalf, .centerHalf, .topHalf, .bottomHalf]), - ShortcutCategory(actions: [.topLeft, .topRight, .bottomLeft, .bottomRight]), - ShortcutCategory(actions: [.maximize, .almostMaximize, .maximizeHeight, .larger, .smaller, .center, .restore]), - ShortcutCategory(actions: [.nextDisplay, .previousDisplay], includeSpacer: false) - ] - - let moreCategories: [ShortcutCategory] = [ - ShortcutCategory(actions: [.firstThird, .centerThird, .lastThird, .firstTwoThirds, .centerTwoThirds, .lastTwoThirds]), - ShortcutCategory(actions: [ - .firstFourth, .secondFourth, .thirdFourth, .lastFourth, .firstThreeFourths, .centerThreeFourths, .lastThreeFourths - ]), - ShortcutCategory(actions: [ - .topLeftSixth, .topCenterSixth, .topRightSixth, .bottomLeftSixth, .bottomCenterSixth, .bottomRightSixth - ]), - ShortcutCategory(actions: [.moveLeft, .moveRight, .moveUp, .moveDown], includeSpacer: false), - ] - - var items: [Any] = [] - for category in standardCategories { - items.append(contentsOf: category.items) - } - - let moreGroup = ShortcutGroup(title: "More", categories: moreCategories) - items.append(moreGroup) - - rootItems = items - } - - deinit { - if let observer = allowAnyShortcutObserver { - NotificationCenter.default.removeObserver(observer) - } - } - - private func subscribeToAllowAnyShortcutToggle() { - allowAnyShortcutObserver = Notification.Name.allowAnyShortcut.onPost { [weak self] _ in - guard let self = self else { return } - self.outlineView.reloadData() - self.outlineView.expandItem(nil, expandChildren: true) - } - } -} - -// MARK: - NSOutlineViewDataSource - -extension ShortcutsViewController: NSOutlineViewDataSource { - func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int { - if item == nil { - return rootItems.count - } - if let group = item as? ShortcutGroup { - return group.items.count - } - return 0 - } - - func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool { - return item is ShortcutGroup - } - - func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any { - if item == nil { - return rootItems[index] - } - if let group = item as? ShortcutGroup { - return group.items[index] - } - fatalError("Unexpected outline view item: \(String(describing: item))") - } -} - -// MARK: - NSOutlineViewDelegate - -extension ShortcutsViewController: NSOutlineViewDelegate { - func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { - if let group = item as? ShortcutGroup { - let cell = outlineView.makeView(withIdentifier: ShortcutSectionCellView.identifier, owner: self) as? ShortcutSectionCellView ?? ShortcutSectionCellView() - cell.identifier = ShortcutSectionCellView.identifier - cell.configure(title: group.title) - return cell - } - - if let shortcutItem = item as? ShortcutItem { - let cell = outlineView.makeView(withIdentifier: ShortcutActionCellView.identifier, owner: self) as? ShortcutActionCellView ?? ShortcutActionCellView() - cell.identifier = ShortcutActionCellView.identifier - cell.configure(with: shortcutItem.action, recordingObserver: shortcutRecordingObserver) - return cell - } - - if item is SpacerItem { - let spacerView = NSView() - spacerView.translatesAutoresizingMaskIntoConstraints = false - spacerView.heightAnchor.constraint(equalToConstant: 14).isActive = true - return spacerView - } - - return nil - } - - func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat { - if item is SpacerItem { - return 14 - } - return 28 - } - - // MARK: - NSOutlineViewDelegate Dynamic Sizing Fix - - func outlineViewItemDidExpand(_ notification: Notification) { - scheduleScrollViewUpdate() - } - - func outlineViewItemDidCollapse(_ notification: Notification) { - scheduleScrollViewUpdate() - } - - private func scheduleScrollViewUpdate() { - // Defer execution until NSOutlineView completes its internal row animation and index updates - DispatchQueue.main.async { [weak self] in - guard let self = self else { return } - - // Recalculate document frame height safely after row changes have finalized - if let documentView = self.scrollView.documentView { - documentView.frame.size.height = self.outlineView.intrinsicContentSize.height - } - - self.scrollView.reflectScrolledClipView(self.scrollView.contentView) - } - } -} From 2e665dc4ac9cf6858291ff500d15f8f9dd575513 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 11:50:52 -0400 Subject: [PATCH 21/79] SwiftUI SnapAreaSettingsView --- Rectangle.xcodeproj/project.pbxproj | 4 + .../SettingsWindowController.swift | 4 +- .../SettingsWindow/SnapAreaSettingsView.swift | 304 ++++++++++++++++++ 3 files changed, 310 insertions(+), 2 deletions(-) create mode 100644 Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 126e49a5d..2aca21261 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -144,6 +144,7 @@ 98ED703E305DC12D0077BD10 /* MASShortcutViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */; }; 98ED704B306171650077BD10 /* AppSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7049306171650077BD10 /* AppSettingsView.swift */; }; 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */; }; + 98ED704F306180AD0077BD10 /* SnapAreaSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -379,6 +380,7 @@ 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutViewRepresentable.swift; sourceTree = ""; }; 98ED7049306171650077BD10 /* AppSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsView.swift; sourceTree = ""; }; 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsViewModel.swift; sourceTree = ""; }; + 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapAreaSettingsView.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -814,6 +816,7 @@ 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, 98ED7049306171650077BD10 /* AppSettingsView.swift */, 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, + 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */, ); path = SettingsWindow; sourceTree = ""; @@ -1174,6 +1177,7 @@ 630644571003EB468CB643D8 /* BottomCenterRightSixteenthCalculation.swift in Sources */, 2D240EE416CC03AC921E3A4F /* BottomRightSixteenthCalculation.swift in Sources */, 98ED703C305DB20A0077BD10 /* BehaviorSettingsViewModel.swift in Sources */, + 98ED704F306180AD0077BD10 /* SnapAreaSettingsView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift index 8e33dfd8c..e27b8a4a9 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift @@ -47,7 +47,7 @@ class SettingsTabViewController: NSTabViewController { var defaultSize: NSSize { switch self { case .shortcuts: return NSSize(width: 500, height: 540) - case .snapAreas: return NSSize(width: 550, height: 480) + case .snapAreas: return NSSize(width: 500, height: 480) case .behavior: return NSSize(width: 500, height: 550) case .appSettings: return NSSize(width: 500, height: 442) } @@ -58,7 +58,7 @@ class SettingsTabViewController: NSTabViewController { case .shortcuts: return ShortcutsViewController() case .snapAreas: - return NSViewController.newControllerFromStoryboard(identifier: "SnapAreaViewController") + return SnapAreaSettingsViewController() case .behavior: return BehaviorSettingsViewController() case .appSettings: diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift new file mode 100644 index 000000000..af813f057 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -0,0 +1,304 @@ +/// SnapAreaView.swift + +import SwiftUI +import Combine + +class SnapAreaSettingsViewController: NSViewController { + private var hostingController: NSHostingController! + + override func viewDidLoad() { + super.viewDidLoad() + + let swiftUIView = SnapAreaSettingsView() + hostingController = NSHostingController(rootView: swiftUIView) + + addChild(hostingController) + hostingController.view.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(hostingController.view) + + NSLayoutConstraint.activate([ + hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), + hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), + hostingController.view.topAnchor.constraint(equalTo: view.topAnchor), + hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor) + ]) + } +} + +// MARK: - ViewModel + +final class SnapAreaViewModel: ObservableObject { + // General Settings + @Published var windowSnapping: Bool = true { + didSet { + guard oldValue != windowSnapping else { return } + Defaults.windowSnapping.enabled = windowSnapping + Notification.Name.windowSnapping.post(object: windowSnapping) + if windowSnapping { + MacTilingDefaults.checkForBuiltInTiling(skipIfAlreadyNotified: false) + } + } + } + + @Published var unsnapRestore: Bool = true { + didSet { + Defaults.unsnapRestore.enabled = unsnapRestore + } + } + + @Published var hapticFeedback: Bool = false { + didSet { + Defaults.hapticFeedbackOnSnap.enabled = hapticFeedback + } + } + + @Published var animateFootprint: Bool = true { + didSet { + let val: Float = animateFootprint ? 0.75 : 0.0 + Defaults.footprintAnimationDurationMultiplier.value = val + } + } + + @Published var experimentalAnimations: Bool = false { + didSet { + guard oldValue != experimentalAnimations else { return } + Defaults.experimentalWindowAnimations.enabled = experimentalAnimations + Notification.Name.windowAnimationPreferencesChanged.post() + } + } + + @Published var footprintBlur: Bool = false { + didSet { + Defaults.footprintBlur.enabled = footprintBlur + } + } + + @Published var blurAppearance: BlurAppearance = .system { + didSet { + Defaults.blurAppearance.value = blurAppearance + } + } + + @Published var missionControlDraggingDisabled: Bool = false { + didSet { + Defaults.missionControlDragging.enabled = !missionControlDraggingDisabled + Notification.Name.missionControlDragging.post(object: !missionControlDraggingDisabled) + } + } + + // Displays / UI State + @Published var isPortraitConnected: Bool = NSScreen.portraitDisplayConnected + @Published var isLandscapePopoverPresented: Bool = false + @Published var isPortraitPopoverPresented: Bool = false + + private var cancellables = Set() + + init() { + syncDefaults() + setupNotificationObservers() + } + + func syncDefaults() { + windowSnapping = !Defaults.windowSnapping.userDisabled + unsnapRestore = !Defaults.unsnapRestore.userDisabled + hapticFeedback = Defaults.hapticFeedbackOnSnap.userEnabled + animateFootprint = Defaults.footprintAnimationDurationMultiplier.value > 0 + footprintBlur = Defaults.footprintBlur.enabled + experimentalAnimations = Defaults.experimentalWindowAnimations.enabled + blurAppearance = Defaults.blurAppearance.value + missionControlDraggingDisabled = Defaults.missionControlDragging.userDisabled + isPortraitConnected = NSScreen.portraitDisplayConnected + } + + private func setupNotificationObservers() { + let center = NotificationCenter.default + + center.publisher(for: NSApplication.didChangeScreenParametersNotification) + .sink { [weak self] _ in + self?.isPortraitConnected = NSScreen.portraitDisplayConnected + } + .store(in: &cancellables) + + center.publisher(for: .configImported) + .sink { [weak self] _ in + self?.syncDefaults() + } + .store(in: &cancellables) + + center.publisher(for: .windowSnapping) + .sink { [weak self] _ in + self?.windowSnapping = !Defaults.windowSnapping.userDisabled + } + .store(in: &cancellables) + } + + // Snap Area Handlers + func getSelectedTag(for directional: Directional, orientation: DisplayOrientation) -> Int { + let snapAreaConfig = orientation == .landscape + ? SnapAreaModel.instance.landscape[directional] + : SnapAreaModel.instance.portrait[directional] + + return snapAreaConfig?.action?.rawValue ?? snapAreaConfig?.compound?.rawValue ?? -1 + } + + func updateSnapArea(selectedTag: Int, directional: Directional, orientation: DisplayOrientation) { + var snapAreaConfig: SnapAreaConfig? + if selectedTag < -1, let compound = CompoundSnapArea(rawValue: selectedTag) { + snapAreaConfig = SnapAreaConfig(compound: compound) + } else if selectedTag > -1, let action = WindowAction(rawValue: selectedTag) { + snapAreaConfig = SnapAreaConfig(action: action) + } + SnapAreaModel.instance.setConfig(type: orientation, directional: directional, snapAreaConfig: snapAreaConfig) + } +} + +// MARK: - Main Snap Area View + +struct SnapAreaSettingsView: View { + @StateObject private var viewModel = SnapAreaViewModel() + + var body: some View { + Form { + + // MARK: Popover Grid Triggers + Section { + HStack(spacing: 16) { + Button(action: { viewModel.isLandscapePopoverPresented.toggle() }) { + Label("Landscape Snap Areas", systemImage: "rectangle.inset.filled") + } + .popover(isPresented: $viewModel.isLandscapePopoverPresented, arrowEdge: .bottom) { + SnapAreaGridPopoverView(viewModel: viewModel, orientation: .landscape) + .padding() + .frame(width: 520, height: 380) + } + + if viewModel.isPortraitConnected { + Button(action: { viewModel.isPortraitPopoverPresented.toggle() }) { + Label("Portrait Snap Areas", systemImage: "rectangle.portrait.inset.filled") + } + .popover(isPresented: $viewModel.isPortraitPopoverPresented, arrowEdge: .bottom) { + SnapAreaGridPopoverView(viewModel: viewModel, orientation: .portrait) + .padding() + .frame(width: 380, height: 520) + } + } + } + .padding(.vertical, 4) + } + + // MARK: Top Section (Single-Column Toggles) + Section { + Toggle("Snap windows by dragging", isOn: $viewModel.windowSnapping) + Toggle("Restore window size when unsnapped", isOn: $viewModel.unsnapRestore) + Toggle("Provide haptic feedback", isOn: $viewModel.hapticFeedback) + Toggle("Animate footprint", isOn: $viewModel.animateFootprint) + Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) + Toggle("Blur footprint", isOn: $viewModel.footprintBlur) + + Picker("Blur appearance", selection: $viewModel.blurAppearance) { + Text("Follow System").tag(BlurAppearance.system) + Text("Light").tag(BlurAppearance.light) + Text("Dark").tag(BlurAppearance.dark) + } + .disabled(!viewModel.footprintBlur) + + if viewModel.missionControlDraggingDisabled { + Toggle("Mission Control dragging", isOn: $viewModel.missionControlDraggingDisabled) + } + } + + } + .formStyle(.grouped) + .frame(minHeight: 400) + .frame(width: 500) + } +} + +// MARK: - Popover Snap Area Grid Layout + +struct SnapAreaGridPopoverView: View { + @ObservedObject var viewModel: SnapAreaViewModel + let orientation: DisplayOrientation + + var body: some View { + VStack(spacing: 12) { + Text("\(orientation == .landscape ? "Landscape" : "Portrait") Snap Areas…") + .font(.headline) + + VStack(spacing: 12) { + // Top Row + HStack(spacing: 8) { + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tl) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .t) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tr) + } + + // Middle Row + HStack(spacing: 12) { + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .l) + + // Display Graphic + RoundedRectangle(cornerRadius: 8) + .fill(Color.blue.opacity(0.15)) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(Color.blue.opacity(0.5), lineWidth: 1.5) + ) + .aspectRatio(orientation == .landscape ? 16 / 10 : 10 / 16, contentMode: .fit) + + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .r) + } + + // Bottom Row + HStack(spacing: 8) { + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .bl) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .b) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .br) + } + } + } + } +} + +// MARK: - Individual Snap Area Menu Picker + +struct SnapAreaPicker: View { + @ObservedObject var viewModel: SnapAreaViewModel + let orientation: DisplayOrientation + let directional: Directional + + @State private var selectedTag: Int = -1 + + var body: some View { + Picker("", selection: $selectedTag) { + Text("-").tag(-1) + + Section { + ForEach(CompoundSnapArea.all.filter { + $0.compatibleOrientation.contains(orientation) && $0.compatibleDirectionals.contains(directional) + }, id: \.rawValue) { compound in + Text(compound.displayName).tag(compound.rawValue) + } + } + + Section { + ForEach(WindowAction.active.filter { $0.isDragSnappable }, id: \.rawValue) { action in + if let name = action.displayName { + Text(name).tag(action.rawValue) + } + } + } + } + .labelsHidden() + .pickerStyle(.menu) + .onAppear { + selectedTag = viewModel.getSelectedTag(for: directional, orientation: orientation) + } + .onChange(of: selectedTag) { oldTag, newTag in + viewModel.updateSnapArea(selectedTag: newTag, directional: directional, orientation: orientation) + } + .onReceive(NotificationCenter.default.publisher(for: .defaultSnapAreas)) { _ in + selectedTag = viewModel.getSelectedTag(for: directional, orientation: orientation) + } + } +} From 7992441b82f2a26d5b07ab04684e48e7228c285f Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 12:01:31 -0400 Subject: [PATCH 22/79] Hide blur appearance if not applicable --- .../SettingsWindow/SnapAreaSettingsView.swift | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index af813f057..969325355 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -160,7 +160,6 @@ struct SnapAreaSettingsView: View { var body: some View { Form { - // MARK: Popover Grid Triggers Section { HStack(spacing: 16) { Button(action: { viewModel.isLandscapePopoverPresented.toggle() }) { @@ -186,7 +185,7 @@ struct SnapAreaSettingsView: View { .padding(.vertical, 4) } - // MARK: Top Section (Single-Column Toggles) + Section { Toggle("Snap windows by dragging", isOn: $viewModel.windowSnapping) Toggle("Restore window size when unsnapped", isOn: $viewModel.unsnapRestore) @@ -195,12 +194,13 @@ struct SnapAreaSettingsView: View { Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) Toggle("Blur footprint", isOn: $viewModel.footprintBlur) - Picker("Blur appearance", selection: $viewModel.blurAppearance) { - Text("Follow System").tag(BlurAppearance.system) - Text("Light").tag(BlurAppearance.light) - Text("Dark").tag(BlurAppearance.dark) + if viewModel.footprintBlur { + Picker("Blur appearance", selection: $viewModel.blurAppearance) { + Text("Follow System").tag(BlurAppearance.system) + Text("Light").tag(BlurAppearance.light) + Text("Dark").tag(BlurAppearance.dark) + } } - .disabled(!viewModel.footprintBlur) if viewModel.missionControlDraggingDisabled { Toggle("Mission Control dragging", isOn: $viewModel.missionControlDraggingDisabled) @@ -211,6 +211,7 @@ struct SnapAreaSettingsView: View { .formStyle(.grouped) .frame(minHeight: 400) .frame(width: 500) + .animation(.easeInOut(duration: 0.2), value: viewModel.footprintBlur) } } From eb1037b0c775d7bdc4a0ca141fe91c74cb387c67 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 12:12:21 -0400 Subject: [PATCH 23/79] Minor visual updates --- .../SettingsWindow/SnapAreaSettingsView.swift | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index 969325355..d381f89dd 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -161,9 +161,9 @@ struct SnapAreaSettingsView: View { Form { Section { - HStack(spacing: 16) { + HStack { Button(action: { viewModel.isLandscapePopoverPresented.toggle() }) { - Label("Landscape Snap Areas", systemImage: "rectangle.inset.filled") + Label("Landscape Snap Areas…", systemImage: "rectangle.inset.filled") } .popover(isPresented: $viewModel.isLandscapePopoverPresented, arrowEdge: .bottom) { SnapAreaGridPopoverView(viewModel: viewModel, orientation: .landscape) @@ -172,8 +172,9 @@ struct SnapAreaSettingsView: View { } if viewModel.isPortraitConnected { + Spacer() Button(action: { viewModel.isPortraitPopoverPresented.toggle() }) { - Label("Portrait Snap Areas", systemImage: "rectangle.portrait.inset.filled") + Label("Portrait Snap Areas…", systemImage: "rectangle.portrait.inset.filled") } .popover(isPresented: $viewModel.isPortraitPopoverPresented, arrowEdge: .bottom) { SnapAreaGridPopoverView(viewModel: viewModel, orientation: .portrait) @@ -185,10 +186,12 @@ struct SnapAreaSettingsView: View { .padding(.vertical, 4) } - Section { Toggle("Snap windows by dragging", isOn: $viewModel.windowSnapping) Toggle("Restore window size when unsnapped", isOn: $viewModel.unsnapRestore) + } + + Section { Toggle("Provide haptic feedback", isOn: $viewModel.hapticFeedback) Toggle("Animate footprint", isOn: $viewModel.animateFootprint) Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) @@ -223,7 +226,7 @@ struct SnapAreaGridPopoverView: View { var body: some View { VStack(spacing: 12) { - Text("\(orientation == .landscape ? "Landscape" : "Portrait") Snap Areas…") + Text("\(orientation == .landscape ? "Landscape" : "Portrait") Snap Areas") .font(.headline) VStack(spacing: 12) { From bd90185d0e8e930b200ca79e4ceb4a90ad19bd80 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 12:16:15 -0400 Subject: [PATCH 24/79] Only show landscape text if portrait is displayed --- .../SettingsWindow/SnapAreaSettingsView.swift | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index d381f89dd..01f5e5f02 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -157,13 +157,17 @@ final class SnapAreaViewModel: ObservableObject { struct SnapAreaSettingsView: View { @StateObject private var viewModel = SnapAreaViewModel() + private var landscapeButtonTitle: String { + viewModel.isPortraitConnected ? "Landscape Snap Areas…" : "Configure Snap Areas…" + } + var body: some View { Form { Section { HStack { Button(action: { viewModel.isLandscapePopoverPresented.toggle() }) { - Label("Landscape Snap Areas…", systemImage: "rectangle.inset.filled") + Label(landscapeButtonTitle, systemImage: "rectangle.inset.filled") } .popover(isPresented: $viewModel.isLandscapePopoverPresented, arrowEdge: .bottom) { SnapAreaGridPopoverView(viewModel: viewModel, orientation: .landscape) @@ -224,9 +228,17 @@ struct SnapAreaGridPopoverView: View { @ObservedObject var viewModel: SnapAreaViewModel let orientation: DisplayOrientation + private var headerTitle: String { + if orientation == .portrait { + return "Portrait Snap Areas" + } else { + return viewModel.isPortraitConnected ? "Landscape Snap Areas" : "Snap Areas" + } + } + var body: some View { VStack(spacing: 12) { - Text("\(orientation == .landscape ? "Landscape" : "Portrait") Snap Areas") + Text(headerTitle) .font(.headline) VStack(spacing: 12) { From 76676534d22921605e98207e285ba48b27ee25a3 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 12:25:40 -0400 Subject: [PATCH 25/79] Add in images to menu --- .../SettingsWindow/SnapAreaSettingsView.swift | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index 01f5e5f02..407a53a24 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -300,7 +300,12 @@ struct SnapAreaPicker: View { Section { ForEach(WindowAction.active.filter { $0.isDragSnappable }, id: \.rawValue) { action in if let name = action.displayName { - Text(name).tag(action.rawValue) + Label { + Text(name) + } icon: { + Image(nsImage: action.image.resizedForMenu()) + } + .tag(action.rawValue) } } } @@ -318,3 +323,14 @@ struct SnapAreaPicker: View { } } } + +extension NSImage { + func resizedForMenu(targetHeight: CGFloat = 14) -> NSImage { + guard size.height > 0 else { return self } + + let aspectRatio = size.width / size.height + let copy = self.copy() as! NSImage + copy.size = NSSize(width: targetHeight * aspectRatio, height: targetHeight) + return copy + } +} From 96c154bf30b77223607560613fcd27cf7b889171 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 15:07:33 -0400 Subject: [PATCH 26/79] No longer popovers for grid views --- .../SettingsWindowController.swift | 4 +- .../SettingsWindow/SnapAreaSettingsView.swift | 130 ++++++++---------- 2 files changed, 59 insertions(+), 75 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift index e27b8a4a9..3b3da0343 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift @@ -47,7 +47,9 @@ class SettingsTabViewController: NSTabViewController { var defaultSize: NSSize { switch self { case .shortcuts: return NSSize(width: 500, height: 540) - case .snapAreas: return NSSize(width: 500, height: 480) + case .snapAreas: return NSScreen.portraitDisplayConnected + ? NSSize(width: 500, height: 860) + : NSSize(width: 500, height: 616) case .behavior: return NSSize(width: 500, height: 550) case .appSettings: return NSSize(width: 500, height: 442) } diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index 407a53a24..c136294f2 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -88,8 +88,6 @@ final class SnapAreaViewModel: ObservableObject { // Displays / UI State @Published var isPortraitConnected: Bool = NSScreen.portraitDisplayConnected - @Published var isLandscapePopoverPresented: Bool = false - @Published var isPortraitPopoverPresented: Bool = false private var cancellables = Set() @@ -157,44 +155,19 @@ final class SnapAreaViewModel: ObservableObject { struct SnapAreaSettingsView: View { @StateObject private var viewModel = SnapAreaViewModel() - private var landscapeButtonTitle: String { - viewModel.isPortraitConnected ? "Landscape Snap Areas…" : "Configure Snap Areas…" + private var landscapeHeaderTitle: String { + viewModel.isPortraitConnected ? "Landscape Snap Areas" : "Snap Areas" } var body: some View { Form { - - Section { - HStack { - Button(action: { viewModel.isLandscapePopoverPresented.toggle() }) { - Label(landscapeButtonTitle, systemImage: "rectangle.inset.filled") - } - .popover(isPresented: $viewModel.isLandscapePopoverPresented, arrowEdge: .bottom) { - SnapAreaGridPopoverView(viewModel: viewModel, orientation: .landscape) - .padding() - .frame(width: 520, height: 380) - } - - if viewModel.isPortraitConnected { - Spacer() - Button(action: { viewModel.isPortraitPopoverPresented.toggle() }) { - Label("Portrait Snap Areas…", systemImage: "rectangle.portrait.inset.filled") - } - .popover(isPresented: $viewModel.isPortraitPopoverPresented, arrowEdge: .bottom) { - SnapAreaGridPopoverView(viewModel: viewModel, orientation: .portrait) - .padding() - .frame(width: 380, height: 520) - } - } - } - .padding(.vertical, 4) - } - + // General Toggles Section { Toggle("Snap windows by dragging", isOn: $viewModel.windowSnapping) Toggle("Restore window size when unsnapped", isOn: $viewModel.unsnapRestore) } - + + // Customization Options Section { Toggle("Provide haptic feedback", isOn: $viewModel.hapticFeedback) Toggle("Animate footprint", isOn: $viewModel.animateFootprint) @@ -213,64 +186,72 @@ struct SnapAreaSettingsView: View { Toggle("Mission Control dragging", isOn: $viewModel.missionControlDraggingDisabled) } } + + // Landscape Inline Section + Section { + SnapAreaGridView(viewModel: viewModel, orientation: .landscape) + } header: { + Label(landscapeHeaderTitle, systemImage: "rectangle.inset.filled") + .font(.headline) + } + // Portrait Inline Section (Only visible if portrait monitor connected) + if viewModel.isPortraitConnected { + Section { + SnapAreaGridView(viewModel: viewModel, orientation: .portrait) + } header: { + Label("Portrait Snap Areas", systemImage: "rectangle.portrait.inset.filled") + .font(.headline) + } + } } .formStyle(.grouped) .frame(minHeight: 400) .frame(width: 500) .animation(.easeInOut(duration: 0.2), value: viewModel.footprintBlur) + .animation(.easeInOut(duration: 0.2), value: viewModel.isPortraitConnected) } } -// MARK: - Popover Snap Area Grid Layout +// MARK: - Grid Snap Area Layout -struct SnapAreaGridPopoverView: View { +struct SnapAreaGridView: View { @ObservedObject var viewModel: SnapAreaViewModel let orientation: DisplayOrientation - private var headerTitle: String { - if orientation == .portrait { - return "Portrait Snap Areas" - } else { - return viewModel.isPortraitConnected ? "Landscape Snap Areas" : "Snap Areas" - } - } - var body: some View { - VStack(spacing: 12) { - Text(headerTitle) - .font(.headline) - - VStack(spacing: 12) { - // Top Row - HStack(spacing: 8) { - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tl) - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .t) - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tr) - } - - // Middle Row - HStack(spacing: 12) { - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .l) - - // Display Graphic - RoundedRectangle(cornerRadius: 8) - .fill(Color.blue.opacity(0.15)) - .overlay( - RoundedRectangle(cornerRadius: 8) - .stroke(Color.blue.opacity(0.5), lineWidth: 1.5) - ) - .aspectRatio(orientation == .landscape ? 16 / 10 : 10 / 16, contentMode: .fit) + Grid(alignment: .trailing, horizontalSpacing: 12, verticalSpacing: 12) { + // Top Row + GridRow(alignment: .center) { + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tl) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .t) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tr) + } - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .r) - } + // Middle Row + GridRow(alignment: .center) { + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .l) + + // Display Graphic Representation (Center Cell) + RoundedRectangle(cornerRadius: 6) + .fill(Color.blue.opacity(0.12)) + .overlay( + RoundedRectangle(cornerRadius: 6) + .stroke(Color.blue.opacity(0.4), lineWidth: 1.5) + ) + .frame(width: 100, height: 62.5) + .rotationEffect(orientation == .portrait ? .degrees(90) : .zero) + .frame(width: 100, height: 100) + .gridCellAnchor(.center) + + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .r) + } - // Bottom Row - HStack(spacing: 8) { - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .bl) - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .b) - SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .br) - } + // Bottom Row + GridRow(alignment: .center) { + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .bl) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .b) + SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .br) } } } @@ -312,6 +293,7 @@ struct SnapAreaPicker: View { } .labelsHidden() .pickerStyle(.menu) + .frame(maxWidth: .infinity, alignment: .trailing) .onAppear { selectedTag = viewModel.getSelectedTag(for: directional, orientation: orientation) } From 87698e5ca2dbd0c037ef8aff6dc6fb14ee2b2f32 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 15:21:28 -0400 Subject: [PATCH 27/79] Mac desktop graphic for snap area config --- .../SettingsWindow/SnapAreaSettingsView.swift | 103 ++++++++++++++++-- 1 file changed, 93 insertions(+), 10 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index c136294f2..f24d481a6 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -233,16 +233,7 @@ struct SnapAreaGridView: View { SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .l) // Display Graphic Representation (Center Cell) - RoundedRectangle(cornerRadius: 6) - .fill(Color.blue.opacity(0.12)) - .overlay( - RoundedRectangle(cornerRadius: 6) - .stroke(Color.blue.opacity(0.4), lineWidth: 1.5) - ) - .frame(width: 100, height: 62.5) - .rotationEffect(orientation == .portrait ? .degrees(90) : .zero) - .frame(width: 100, height: 100) - .gridCellAnchor(.center) + MacDesktopGraphic(orientation: orientation) SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .r) } @@ -316,3 +307,95 @@ extension NSImage { return copy } } + +// MARK: - Mac Desktop Display Graphic + +struct MacDesktopGraphic: View { + let orientation: DisplayOrientation + + var body: some View { + ZStack { + // Main Display Background + RoundedRectangle(cornerRadius: 6) + .fill(Color.blue.opacity(0.12)) + + // Screen Content (Menu Bar & Dock) + VStack(spacing: 0) { + // Menu Bar + Rectangle() + .fill(Color.primary.opacity(0.18)) + .frame(height: 5) + .overlay( + HStack(spacing: 2) { + // Apple Logo Dot + Circle() + .fill(Color.primary.opacity(0.4)) + .frame(width: 2, height: 2) + + // Menu Text Placeholders (Mini Lines) + Capsule() + .fill(Color.primary.opacity(0.4)) + .frame(width: 5, height: 1.2) + + Capsule() + .fill(Color.primary.opacity(0.25)) + .frame(width: 4, height: 1.2) + + Capsule() + .fill(Color.primary.opacity(0.25)) + .frame(width: 4, height: 1.2) + + Spacer() + + // Right-Side Status Items + Capsule() + .fill(Color.primary.opacity(0.25)) + .frame(width: 3, height: 1.2) + + Capsule() + .fill(Color.primary.opacity(0.25)) + .frame(width: 3, height: 1.2) + } + .padding(.horizontal, 3) + ) + + Spacer() + + // Dock + let iconCount = orientation == .portrait ? 4 : 6 + + HStack(spacing: 1.5) { + ForEach(0.. Date: Mon, 21 Sep 2026 16:12:12 -0400 Subject: [PATCH 28/79] More sections in behavior settings --- Rectangle/AppDelegate.swift | 4 +- .../SettingsWindow/AppSettingsView.swift | 1 - .../SettingsWindow/BehaviorSettingsView.swift | 61 ++++++++++--------- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index 5a8ac95c7..789f3e283 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -255,9 +255,9 @@ class AppDelegate: NSObject, NSApplicationDelegate { var settingsWindowController: NSWindowController? @IBAction func openPreferences(_ sender: Any) { - if prefsWindowController == nil { + if settingsWindowController == nil { // prefsWindowController = SettingsWindowController() - prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController +// prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController settingsWindowController = SettingsWindowController() } settingsWindowController?.showWindow(self) diff --git a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift index 33fab2e89..1eecfb739 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift @@ -37,7 +37,6 @@ struct AppSettingsView: View { Text("When the menu bar icon is hidden, relaunch Rectangle from Finder to open") .font(.caption) .foregroundColor(.secondary) - .padding(.leading, 18) } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 103e64f04..bcef4fab6 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -39,7 +39,7 @@ struct BehaviorSettingsView: View { } } } - + if viewModel.subsequentExecutionMode.resizes { VStack(alignment: .leading, spacing: 8) { // Keep fraction choices as compact checkboxes @@ -50,7 +50,7 @@ struct BehaviorSettingsView: View { .toggleStyle(.checkbox) } } - + HStack(spacing: 12) { Text("Cyclic corner shortcuts expand:") Spacer() @@ -61,7 +61,7 @@ struct BehaviorSettingsView: View { .pickerStyle(.radioGroup) .horizontalRadioGroupLayout() } - + if viewModel.showCooperativeCornerResize { Toggle("Resize adjacent windows when cycling side or corner shortcuts", isOn: $viewModel.cooperativeCornerResize) .toggleStyle(.switch) @@ -70,8 +70,10 @@ struct BehaviorSettingsView: View { .padding(.leading, 4) .transition(.opacity.combined(with: .move(edge: .top))) } - - VStack(alignment: .leading, spacing: 4) { + } + + Section { + VStack(alignment: .leading, spacing: 6) { HStack { Text("Gaps between windows") Slider( @@ -84,40 +86,41 @@ struct BehaviorSettingsView: View { Text("\(Int(viewModel.gapSize)) px") .frame(width: 45, alignment: .trailing) } - + if viewModel.gapSize > 0 { Toggle("Remove top gap when snapping to top edge", isOn: $viewModel.skipGapTopEdge) .toggleStyle(.switch) } } - - Group { - Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) - - if viewModel.showCursorScreenDetection { - Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) - } - - Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) - Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - + } + + Section { + if viewModel.showCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } + + Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + + VStack(alignment: .leading, spacing: 2) { + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Text("Hold any modifier key or use the window menu for default macOS behavior") + .font(.caption) + .foregroundColor(.secondary) + } + + if viewModel.showCombinedDisplayMode { VStack(alignment: .leading, spacing: 2) { - Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) - Text("Hold any modifier key or use the window menu for default macOS behavior") + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") .font(.caption) .foregroundColor(.secondary) } - - if viewModel.showCombinedDisplayMode { - VStack(alignment: .leading, spacing: 2) { - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") - .font(.caption) - .foregroundColor(.secondary) - } - } } - .toggleStyle(.switch) + } + + Section { + Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) } // MARK: - Todo Mode From 62c8b8e329a37cd2cd65945ebf8fff7b237521c3 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Mon, 21 Sep 2026 16:44:25 -0400 Subject: [PATCH 29/79] Clicking on more row will now expand --- .../ShortcutsViewController.swift | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index 9a077a655..d66b1e46b 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -161,6 +161,7 @@ class ShortcutsViewController: NSViewController { private let outlineView = NSOutlineView() private let shortcutRecordingObserver = ShortcutRecordingObserver() private var allowAnyShortcutObserver: NSObjectProtocol? + private var lastGroupToggleTime: TimeInterval = 0 private var rootItems: [Any] = [] @@ -350,4 +351,24 @@ extension ShortcutsViewController: NSOutlineViewDelegate { self.scrollView.reflectScrolledClipView(self.scrollView.contentView) } } + + func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { + if item is ShortcutGroup { + let now = ProcessInfo.processInfo.systemUptime + + // Ignore calls occurring within 100 ms of the last toggle + if now - lastGroupToggleTime > 0.10 { + lastGroupToggleTime = now + + if outlineView.isItemExpanded(item) { + outlineView.animator().collapseItem(item) + } else { + outlineView.animator().expandItem(item) + } + } + return false + } + return true + } + } From b167dba217ec9c83680a3a8dfd264d97a6016613 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 09:17:40 -0400 Subject: [PATCH 30/79] Better outline view handling of groups --- .../ShortcutsViewController.swift | 70 ++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index d66b1e46b..74c3dfdd1 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -14,28 +14,26 @@ final class ShortcutItem: NSObject { final class SpacerItem: NSObject {} final class ShortcutCategory: NSObject { - let items: [Any] + let items: [ShortcutItem] - init(actions: [WindowAction], includeSpacer: Bool = true) { - var categoryItems: [Any] = actions.map { ShortcutItem($0) } - if includeSpacer { - categoryItems.append(SpacerItem()) - } - self.items = categoryItems + init(actions: [WindowAction]) { + self.items = actions.map { ShortcutItem($0) } } } final class ShortcutGroup: NSObject { let title: String let items: [Any] + let isCollapsible: Bool - init(title: String, categories: [ShortcutCategory]) { + init(title: String, categories: [ShortcutCategory], isCollapsible: Bool = true) { self.title = title + self.isCollapsible = isCollapsible var flatItems: [Any] = [] for (index, category) in categories.enumerated() { // Include action items - flatItems.append(contentsOf: category.items.compactMap { $0 as? ShortcutItem }) + flatItems.append(contentsOf: category.items) // Add spacer after each category except the last inside the group if index < categories.count - 1 { @@ -154,6 +152,8 @@ final class ShortcutActionCellView: NSTableCellView { } } +// MARK: ShortcutsViewController + class ShortcutsViewController: NSViewController { private let initialSize = NSSize(width: 500, height: 610) @@ -163,7 +163,7 @@ class ShortcutsViewController: NSViewController { private var allowAnyShortcutObserver: NSObjectProtocol? private var lastGroupToggleTime: TimeInterval = 0 - private var rootItems: [Any] = [] + private var rootItems: [ShortcutGroup] = [] override func loadView() { setupGroups() @@ -203,7 +203,7 @@ class ShortcutsViewController: NSViewController { NSLayoutConstraint.activate([ scrollView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20), scrollView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), - scrollView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), + scrollView.topAnchor.constraint(equalTo: containerView.topAnchor), scrollView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) ]) @@ -212,6 +212,12 @@ class ShortcutsViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() + + // Expand non-collapsible groups on load + for group in rootItems where !group.isCollapsible { + outlineView.expandItem(group) + } + subscribeToAllowAnyShortcutToggle() } @@ -225,7 +231,7 @@ class ShortcutsViewController: NSViewController { ShortcutCategory(actions: [.leftHalf, .rightHalf, .centerHalf, .topHalf, .bottomHalf]), ShortcutCategory(actions: [.topLeft, .topRight, .bottomLeft, .bottomRight]), ShortcutCategory(actions: [.maximize, .almostMaximize, .maximizeHeight, .larger, .smaller, .center, .restore]), - ShortcutCategory(actions: [.nextDisplay, .previousDisplay], includeSpacer: false) + ShortcutCategory(actions: [.nextDisplay, .previousDisplay]) ] let moreCategories: [ShortcutCategory] = [ @@ -236,18 +242,14 @@ class ShortcutsViewController: NSViewController { ShortcutCategory(actions: [ .topLeftSixth, .topCenterSixth, .topRightSixth, .bottomLeftSixth, .bottomCenterSixth, .bottomRightSixth ]), - ShortcutCategory(actions: [.moveLeft, .moveRight, .moveUp, .moveDown], includeSpacer: false), + ShortcutCategory(actions: [.moveLeft, .moveRight, .moveUp, .moveDown]) ] - var items: [Any] = [] - for category in standardCategories { - items.append(contentsOf: category.items) - } - - let moreGroup = ShortcutGroup(title: "More", categories: moreCategories) - items.append(moreGroup) + // Explicitly set isCollapsible to false for standardGroup + let standardGroup = ShortcutGroup(title: "", categories: standardCategories, isCollapsible: false) + let moreGroup = ShortcutGroup(title: "More", categories: moreCategories, isCollapsible: true) - rootItems = items + rootItems = [standardGroup, moreGroup] } deinit { @@ -325,9 +327,28 @@ extension ShortcutsViewController: NSOutlineViewDelegate { if item is SpacerItem { return 14 } + if let group = item as? ShortcutGroup, !group.isCollapsible { + return 10 + } return 28 } - + + // Hide disclosure triangle arrow for non-collapsible groups + func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool { + if let group = item as? ShortcutGroup, !group.isCollapsible { + return false + } + return true + } + + // Prevent collapsing if group is non-collapsible + func outlineView(_ outlineView: NSOutlineView, shouldCollapseItem item: Any) -> Bool { + if let group = item as? ShortcutGroup, !group.isCollapsible { + return false + } + return true + } + // MARK: - NSOutlineViewDelegate Dynamic Sizing Fix func outlineViewItemDidExpand(_ notification: Notification) { @@ -353,7 +374,9 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { - if item is ShortcutGroup { + if let group = item as? ShortcutGroup { + guard group.isCollapsible else { return false } + let now = ProcessInfo.processInfo.systemUptime // Ignore calls occurring within 100 ms of the last toggle @@ -370,5 +393,4 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } return true } - } From 6d494dcb9af3dcd0994027e89f9ec9b807be54e5 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 09:32:24 -0400 Subject: [PATCH 31/79] Added extras category --- .../ShortcutsViewController.swift | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index 74c3dfdd1..1a65cee09 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -21,12 +21,12 @@ final class ShortcutCategory: NSObject { } } -final class ShortcutGroup: NSObject { +final class CategoryGroup: NSObject { let title: String let items: [Any] let isCollapsible: Bool - init(title: String, categories: [ShortcutCategory], isCollapsible: Bool = true) { + init(title: String, categories: [ShortcutCategory], subGroups: [CategoryGroup] = [], isCollapsible: Bool = true) { self.title = title self.isCollapsible = isCollapsible @@ -35,11 +35,15 @@ final class ShortcutGroup: NSObject { // Include action items flatItems.append(contentsOf: category.items) - // Add spacer after each category except the last inside the group - if index < categories.count - 1 { + // Add spacer after each category except the last inside the group (or if sub-groups follow) + if index < categories.count - 1 || !subGroups.isEmpty { flatItems.append(SpacerItem()) } } + + // Append child groups at the end of this group + flatItems.append(contentsOf: subGroups) + self.items = flatItems } } @@ -163,7 +167,7 @@ class ShortcutsViewController: NSViewController { private var allowAnyShortcutObserver: NSObjectProtocol? private var lastGroupToggleTime: TimeInterval = 0 - private var rootItems: [ShortcutGroup] = [] + private var rootItems: [CategoryGroup] = [] override func loadView() { setupGroups() @@ -245,13 +249,18 @@ class ShortcutsViewController: NSViewController { ShortcutCategory(actions: [.moveLeft, .moveRight, .moveUp, .moveDown]) ] - // Explicitly set isCollapsible to false for standardGroup - let standardGroup = ShortcutGroup(title: "", categories: standardCategories, isCollapsible: false) - let moreGroup = ShortcutGroup(title: "More", categories: moreCategories, isCollapsible: true) + let extraCategories: [ShortcutCategory] = [ + ShortcutCategory(actions: [.topLeftNinth, .topLeftTwelfth, .topLeftSixteenth]) + ] + + let extraGroup = CategoryGroup(title: "Extras", categories: extraCategories, isCollapsible: true) + + let standardGroup = CategoryGroup(title: "", categories: standardCategories, isCollapsible: false) + let moreGroup = CategoryGroup(title: "More", categories: moreCategories, subGroups: [extraGroup], isCollapsible: true) rootItems = [standardGroup, moreGroup] } - + deinit { if let observer = allowAnyShortcutObserver { NotificationCenter.default.removeObserver(observer) @@ -274,21 +283,21 @@ extension ShortcutsViewController: NSOutlineViewDataSource { if item == nil { return rootItems.count } - if let group = item as? ShortcutGroup { + if let group = item as? CategoryGroup { return group.items.count } return 0 } func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool { - return item is ShortcutGroup + return item is CategoryGroup } func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any { if item == nil { return rootItems[index] } - if let group = item as? ShortcutGroup { + if let group = item as? CategoryGroup { return group.items[index] } fatalError("Unexpected outline view item: \(String(describing: item))") @@ -299,7 +308,7 @@ extension ShortcutsViewController: NSOutlineViewDataSource { extension ShortcutsViewController: NSOutlineViewDelegate { func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { - if let group = item as? ShortcutGroup { + if let group = item as? CategoryGroup { let cell = outlineView.makeView(withIdentifier: ShortcutSectionCellView.identifier, owner: self) as? ShortcutSectionCellView ?? ShortcutSectionCellView() cell.identifier = ShortcutSectionCellView.identifier cell.configure(title: group.title) @@ -327,7 +336,7 @@ extension ShortcutsViewController: NSOutlineViewDelegate { if item is SpacerItem { return 14 } - if let group = item as? ShortcutGroup, !group.isCollapsible { + if let group = item as? CategoryGroup, !group.isCollapsible { return 10 } return 28 @@ -335,7 +344,7 @@ extension ShortcutsViewController: NSOutlineViewDelegate { // Hide disclosure triangle arrow for non-collapsible groups func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool { - if let group = item as? ShortcutGroup, !group.isCollapsible { + if let group = item as? CategoryGroup, !group.isCollapsible { return false } return true @@ -343,7 +352,7 @@ extension ShortcutsViewController: NSOutlineViewDelegate { // Prevent collapsing if group is non-collapsible func outlineView(_ outlineView: NSOutlineView, shouldCollapseItem item: Any) -> Bool { - if let group = item as? ShortcutGroup, !group.isCollapsible { + if let group = item as? CategoryGroup, !group.isCollapsible { return false } return true @@ -374,7 +383,7 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { - if let group = item as? ShortcutGroup { + if let group = item as? CategoryGroup { guard group.isCollapsible else { return false } let now = ProcessInfo.processInfo.systemUptime From ac80b6faa37e6bef740a528871b311b1e1e959a7 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 09:36:05 -0400 Subject: [PATCH 32/79] ellpsis instead of More --- .../PrefsWindow/SettingsWindow/ShortcutsViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index 1a65cee09..59c096e21 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -256,7 +256,7 @@ class ShortcutsViewController: NSViewController { let extraGroup = CategoryGroup(title: "Extras", categories: extraCategories, isCollapsible: true) let standardGroup = CategoryGroup(title: "", categories: standardCategories, isCollapsible: false) - let moreGroup = CategoryGroup(title: "More", categories: moreCategories, subGroups: [extraGroup], isCollapsible: true) + let moreGroup = CategoryGroup(title: "⋯", categories: moreCategories, subGroups: [extraGroup], isCollapsible: true) rootItems = [standardGroup, moreGroup] } From 3734187eb59d6f91fda0639f64e16add00a997b1 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 09:49:01 -0400 Subject: [PATCH 33/79] Filling out extras section --- .../ShortcutsViewController.swift | 4 ++++ Rectangle/WindowAction.swift | 22 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index 59c096e21..0c672030d 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -250,6 +250,10 @@ class ShortcutsViewController: NSViewController { ] let extraCategories: [ShortcutCategory] = [ + ShortcutCategory(actions: [.tileRows, .tileColumns]), + ShortcutCategory(actions: [.largerWidth, .smallerWidth]), + ShortcutCategory(actions: [.topVerticalThird, .middleVerticalThird, .bottomVerticalThird, .topVerticalTwoThirds, .bottomVerticalTwoThirds]), + ShortcutCategory(actions: [.topLeftEighth, .topCenterLeftEighth, .topCenterRightEighth, .topRightEighth, .bottomLeftEighth, .bottomCenterLeftEighth, .bottomCenterRightEighth, .bottomRightEighth]), ShortcutCategory(actions: [.topLeftNinth, .topLeftTwelfth, .topLeftSixteenth]) ] diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index bf5ecd6cd..cb6734088 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -362,7 +362,7 @@ enum WindowAction: Int, Codable { } var displayName: String? { - var key: String + var key: String? var value: String switch self { @@ -552,10 +552,22 @@ enum WindowAction: Int, Codable { value = "Tile Windows in Columns" case .specified, .reverseAll, .tileAll, .cascadeAll, .leftTodo, .rightTodo, .cascadeActiveApp, .tileActiveApp: return nil - case .centerProminently, .largerWidth, .smallerWidth, .largerHeight, .smallerHeight: - return nil - case .topVerticalThird, .middleVerticalThird, .bottomVerticalThird, .topVerticalTwoThirds, .bottomVerticalTwoThirds: + case .largerWidth: + value = "Larger Width" + case .smallerWidth: + value = "Smaller Width" + case .centerProminently, .largerHeight, .smallerHeight: return nil + case .topVerticalThird: + value = "Top Third" + case .middleVerticalThird: + value = "Middle Third" + case .bottomVerticalThird: + value = "Bottom Third" + case .topVerticalTwoThirds: + value = "Top Two Thirds" + case .bottomVerticalTwoThirds: + value = "Bottom Two Thirds" case .topLeftTwelfth: key = "topLeftTwelfth.title" value = "Top Left Twelfth" @@ -645,7 +657,7 @@ enum WindowAction: Int, Codable { return nil } - return NSLocalizedString(key, tableName: "Main", value: value, comment: "") + return NSLocalizedString(key ?? value, tableName: "Main", value: value, comment: "") } var notificationName: Notification.Name { From dc5312eaf08c482e3f0de6654e9ea6720f54a8dc Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 10:39:00 -0400 Subject: [PATCH 34/79] updating icons & titles from Extras --- .../Contents.json | 6 +-- .../screenIcons-tileRowsCols.png | Bin 0 -> 1561 bytes .../tileColumnsTemplate.png | Bin 247 -> 0 bytes .../tileRowsTemplate.imageset/Contents.json | 6 +-- .../tileRowsTemplate.imageset/tileRows.png | Bin 0 -> 1614 bytes .../tileRowsTemplate.png | Bin 236 -> 0 bytes Rectangle/WindowAction.swift | 42 +++++++++--------- 7 files changed, 27 insertions(+), 27 deletions(-) create mode 100644 Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/screenIcons-tileRowsCols.png delete mode 100644 Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/tileColumnsTemplate.png create mode 100644 Rectangle/Assets.xcassets/WindowPositions/tileRowsTemplate.imageset/tileRows.png delete mode 100644 Rectangle/Assets.xcassets/WindowPositions/tileRowsTemplate.imageset/tileRowsTemplate.png diff --git a/Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/Contents.json b/Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/Contents.json index 3bbda05da..a5139a781 100644 --- a/Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/Contents.json +++ b/Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/Contents.json @@ -2,10 +2,10 @@ "images" : [ { "idiom" : "universal", - "filename" : "tileColumnsTemplate.png", "scale" : "1x" }, { + "filename" : "screenIcons-tileRowsCols.png", "idiom" : "universal", "scale" : "2x" }, @@ -15,7 +15,7 @@ } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } } diff --git a/Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/screenIcons-tileRowsCols.png b/Rectangle/Assets.xcassets/WindowPositions/tileColumnsTemplate.imageset/screenIcons-tileRowsCols.png new file mode 100644 index 0000000000000000000000000000000000000000..70a10825e1663ffd4a657b6767b565aa73953dcc GIT binary patch literal 1561 zcmd5+ZAep57(Vl3*~$znFcrG3kUrS`@?-3FcgZ=w$eGEiDIwkTs<*b?b?=p3sh~87 zh@g_9B4YGc5{w{-pdgB*7)n2jKo~+l!jM1&sorxpx4HCxXPk51bKd89&ikId=U(q< zZ!Wf#+Ymy7-?H< zEnONyo3`O@K@T65A(THZ`vZEw*T(fKAyVv9&Pb#YieM$g8yuJ+Nf!wt6bx&e;kKIy z4s5(l*$ES(pL5#-z7C>6Q6-{|q)FN?*a(8))xLhN)7zAy!^&+R)b$8QQPF6Wj8>D1 zIzTZlmy4oVie(*uaA?C}T{IkFZBJ5UMaL^?y{a71WhG2tUGa=Eq`U2Qd{DY2q&%R*ZFB*$?3VYPo%lo(fdeS_5$u;o$l(sbcw&6lF{&^rWelY&>Q19bEf7;zM z%asdONB&qz`NrYVdsn75+`Rg#{^Og(Xp`q#Ogg<#zh}2H&C*M;+qay9JMUkdZuwC0 zd~=&HxHnPUZLQi>Q~ICLzs$^+Sf#{+`RhHGD}UJ&!=Fli9|gW!U_%O?Xx)_A%& zhIn+oy|$6_P=HA5Lwzkq?m~8P!K0!w2Q!{pXddA_5*Hw_yns1ZS7%B?#zd1QMKiXR z@>$V$KA)@KU9RLZV^ROI`>z_A#m+L#depM!i6g(VjCRxU9gl-Hy-(^hUbAs6htG#K zA2e({ThrT1nF|Y3V|OX$UE!z+W?(M>q5td_&b!^xq$9om*)O~CAS&sdXz^Fq0wsOk q`Bx4KZ1#w&Rg+k;{MVa}HH-q~G7F!I>Zt+U&EVTK1s;*b3=G`DAk4@xYmNj11M}+4 zkcg59UmvUF{9L`nl>DSry^7odkVyl#h zD=EpgRf_NpP;kyKN>wn^Gte_ovg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q z_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA5`e7npX_;kDZx;4cKWI5(v*BX^cQty%tK%)EDA|KL=l>HUtnrUNi0c(8en7w zHoz#v(7?*r$jaDM*TBTe0O%KxD^S!TnF9(>tB9b~;{2RaP%5x9H!=VMeM1mwqmLnt zt`(s(G%vHn&IqanO&DEQBtjmWg~-zATK$VMQ-Nt2>{dglZOCF!^)~vT<+PZ!6K3dXlL99JFayT|~#Co2( zs&BJQ)zkJz2HVL>nd8rYJx&&@nDM#uKPSWA<*PsJ`8)smTkH60ruU}jdgFwisb5HY zAjZa?quHZl84DJ-edO69XzsT8N59nPbg}=RmsKjQ@4J(}hU<$&s@xGftM8Jl zixwZ(_^hy?c>YGM3&~R|1upD7A0hg}@RSY53z$Ndl6S^otW`Zm{7fJnOtx+_**Er| ztKAj)?P9EB>AdiEt*|%jyEvBjZR`&_+V%I&3#B<$Y+GQ0jBC3@e>dtKTAA#yI_YTL zg6@J>5*JoQY?Mb;2GYBw?%Ty#;rnNYyWcO+W_+Q$tWNks?cud7V*jIk{;K7bz(g;L YZ+*yF{`{xKAyAR%>FVdQ&MBb@0M`%t`~Uy| literal 0 HcmV?d00001 diff --git a/Rectangle/Assets.xcassets/WindowPositions/tileRowsTemplate.imageset/tileRowsTemplate.png b/Rectangle/Assets.xcassets/WindowPositions/tileRowsTemplate.imageset/tileRowsTemplate.png deleted file mode 100644 index 80a3acefd338fa234ac50abcfeab1783fe9b18c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^azHG?!3HE}t?oSnq}Y|gW!U_%O?Xx7J9lk zhIn+oy=u$H7%0Ma!PreDc)>P-s7|L$=@2vJzz)?F8X{6(MamkZM3g6ch`1#(zV|(N z{m!Q+|5VH!n>5=zTF(l*uern(`>4mr;LcH*=`7ME27EnrMF-Y4ipfn3(72H0!m>X| z`p%kH47)wj86hs!G4*IZTI)RES<>E&Pf={FwBN#rKCM0N?U gd%FVdQ&MBb@0G;kx;s5{u diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index cb6734088..29a2b4936 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -261,14 +261,14 @@ enum WindowAction: Int, Codable { case .topRightThird: return "topRightThird" case .bottomLeftThird: return "bottomLeftThird" case .bottomRightThird: return "bottomRightThird" - case .topLeftEighth: return "topLeftEighth" - case .topCenterLeftEighth: return "topCenterLeftEighth" - case .topCenterRightEighth: return "topCenterRightEighth" - case .topRightEighth: return "topRightEighth" - case .bottomLeftEighth: return "bottomLeftEighth" - case .bottomCenterLeftEighth: return "bottomCenterLeftEighth" - case .bottomCenterRightEighth: return "bottomCenterRightEighth" - case .bottomRightEighth: return "bottomRightEighth" + case .topLeftEighth: return "topLeft8th" + case .topCenterLeftEighth: return "topCenterLeft8th" + case .topCenterRightEighth: return "topCenterRight8th" + case .topRightEighth: return "topRight8th" + case .bottomLeftEighth: return "bottomLeft8th" + case .bottomCenterLeftEighth: return "bottomCenterLeft8th" + case .bottomCenterRightEighth: return "bottomCenterRight8th" + case .bottomRightEighth: return "bottomRight8th" case .doubleHeightUp: return "doubleHeightUp" case .doubleHeightDown: return "doubleHeightDown" case .doubleWidthLeft: return "doubleWidthLeft" @@ -491,7 +491,7 @@ enum WindowAction: Int, Codable { value = "Bottom Right Sixth" case .topLeftNinth: key = "topLeftNinth.title" - value = "Top Left Ninth" + value = "Ninths (3x3)" case .topCenterNinth: key = "topCenterNinth.title" value = "Top Center Ninth" @@ -520,36 +520,36 @@ enum WindowAction: Int, Codable { return nil case .topLeftEighth: key = "topLeftEighth.title" - value = "Top Left Eighth" + value = "Top Left 8th" case .topCenterLeftEighth: key = "topCenterLeftEighth.title" - value = "Top Center Left Eighth" + value = "Top Center Left 8th" case .topCenterRightEighth: key = "topCenterRightEighth.title" - value = "Top Center Right Eighth" + value = "Top Center Right 8th" case .topRightEighth: key = "topRightEighth.title" - value = "Top Right Eighth" + value = "Top Right 8th" case .bottomLeftEighth: key = "bottomLeftEighth.title" - value = "Bottom Left Eighth" + value = "Bottom Left 8th" case .bottomCenterLeftEighth: key = "bottomCenterLeftEighth.title" - value = "Bottom Center Left Eighth" + value = "Bottom Center Left 8th" case .bottomCenterRightEighth: key = "bottomCenterRightEighth.title" - value = "Bottom Center Right Eighth" + value = "Bottom Center Right 8th" case .bottomRightEighth: key = "bottomRightEighth.title" - value = "Bottom Right Eighth" + value = "Bottom Right 8th" case .doubleHeightUp, .doubleHeightDown, .doubleWidthLeft, .doubleWidthRight, .halveHeightUp, .halveHeightDown, .halveWidthLeft, .halveWidthRight: return nil case .tileRows: key = "tileRows.title" - value = "Tile Windows in Rows" + value = "Tile in Rows" case .tileColumns: key = "tileColumns.title" - value = "Tile Windows in Columns" + value = "Tile in Columns" case .specified, .reverseAll, .tileAll, .cascadeAll, .leftTodo, .rightTodo, .cascadeActiveApp, .tileActiveApp: return nil case .largerWidth: @@ -570,7 +570,7 @@ enum WindowAction: Int, Codable { value = "Bottom Two Thirds" case .topLeftTwelfth: key = "topLeftTwelfth.title" - value = "Top Left Twelfth" + value = "Twelfths (4x3)" case .topCenterLeftTwelfth: key = "topCenterLeftTwelfth.title" value = "Top Center Left Twelfth" @@ -606,7 +606,7 @@ enum WindowAction: Int, Codable { value = "Bottom Right Twelfth" case .topLeftSixteenth: key = "topLeftSixteenth.title" - value = "Top Left Sixteenth" + value = "Sixteenths (4x4)" case .topCenterLeftSixteenth: key = "topCenterLeftSixteenth.title" value = "Top Center Left Sixteenth" From 280f727d1f08cf7fdc1da2dd0e7aa438fa2df5ab Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 11:05:10 -0400 Subject: [PATCH 35/79] Exclude larger/smaller width from menu --- Rectangle/AppDelegate.swift | 2 +- Rectangle/WindowAction.swift | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index 789f3e283..b3479ac98 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -378,7 +378,7 @@ extension AppDelegate: NSMenuDelegate { var menuIndex = 0 var categoryMenus: [CategoryMenu] = [] for action in WindowAction.active { - guard let displayName = action.displayName else { continue } + guard !action.excludedFromMenu, let displayName = action.displayName else { continue } let newMenuItem = NSMenuItem(title: displayName, action: #selector(executeMenuWindowAction), keyEquivalent: "") newMenuItem.representedObject = action if #available(macOS 27.0, *) { diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index 29a2b4936..896f58031 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -202,6 +202,13 @@ enum WindowAction: Int, Codable { return false } } + + var excludedFromMenu: Bool { + switch self { + case .smallerWidth, .largerWidth: return true + default: return false + } + } var name: String { switch self { From 605a45cc6b613c74aabc0f371f74efd6d3fa7ced Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 11:34:26 -0400 Subject: [PATCH 36/79] Rough first cut at converting non-shortcut Extras to SwiftUI --- Rectangle.xcodeproj/project.pbxproj | 4 + .../SettingsWindow/BehaviorSettingsView.swift | 8 +- .../SettingsWindow/ExtraSettings.swift | 243 ++++++++++++++++++ 3 files changed, 248 insertions(+), 7 deletions(-) create mode 100644 Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 2aca21261..c6f7bfd2e 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -145,6 +145,7 @@ 98ED704B306171650077BD10 /* AppSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7049306171650077BD10 /* AppSettingsView.swift */; }; 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */; }; 98ED704F306180AD0077BD10 /* SnapAreaSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */; }; + 98ED70533062D3860077BD10 /* ExtraSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED70523062D3810077BD10 /* ExtraSettings.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -381,6 +382,7 @@ 98ED7049306171650077BD10 /* AppSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsView.swift; sourceTree = ""; }; 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsViewModel.swift; sourceTree = ""; }; 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapAreaSettingsView.swift; sourceTree = ""; }; + 98ED70523062D3810077BD10 /* ExtraSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettings.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -814,6 +816,7 @@ 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */, 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, + 98ED70523062D3810077BD10 /* ExtraSettings.swift */, 98ED7049306171650077BD10 /* AppSettingsView.swift */, 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */, @@ -1038,6 +1041,7 @@ 729E0A982AFF76B1006E2F48 /* CenterProminentlyCalculation.swift in Sources */, AA536C2729005DD000579AC6 /* TimeoutCache.swift in Sources */, D04CE30627817A8400BD47B3 /* MiddleLeftNinthCalculation.swift in Sources */, + 98ED70533062D3860077BD10 /* ExtraSettings.swift in Sources */, 9824703B22B139780037B409 /* CUtil.swift in Sources */, 988D067D22EB4E17004EABD7 /* AlmostMaximizeCalculation.swift in Sources */, 98C1008C2305F1FA006E5344 /* SubsequentExecutionMode.swift in Sources */, diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index bcef4fab6..4d444849e 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -222,13 +222,7 @@ struct BehaviorSettingsView: View { } // MARK: - Footer Actions - Section { - HStack { - Button("Extras") { - viewModel.showExtrasPopover() - } - } - } + ExtraSettingsView() } .formStyle(.grouped) .frame(width: 500) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift new file mode 100644 index 000000000..549b80f8d --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift @@ -0,0 +1,243 @@ +/// ExtraSettings.swift + +import SwiftUI +import Combine +import MASShortcut // Required for MASShortcutViewRepresentable + +// MARK: - View Model + +final class ExtraSettingsViewModel: ObservableObject { + + // MARK: Published Properties (State) + @Published var tileColumnsMaxWindows: Int { + didSet { Defaults.tileColumnsMaxWindows.value = tileColumnsMaxWindows } + } + @Published var tileRowsMaxWindows: Int { + didSet { Defaults.tileRowsMaxWindows.value = tileRowsMaxWindows } + } + @Published var widthStepSize: Int { + didSet { Defaults.widthStepSize.value = Float(widthStepSize) } + } + @Published var showAdditionalSizesInMenu: Bool { + didSet { Defaults.showAdditionalSizesInMenu.enabled = showAdditionalSizesInMenu } + } + @Published var cyclingOverlapOffset: Bool { + didSet { Defaults.cyclingOverlapOffset.enabled = cyclingOverlapOffset } + } + @Published var stackBadge: Bool { + didSet { Defaults.stackBadge.enabled = stackBadge } + } + @Published var horizontalSplitRatio: Float { + didSet { + Defaults.horizontalSplitRatio.value = horizontalSplitRatio + // Reset active ratios when user changes presets or manual ratio + // ActiveSideSplitRatios.shared.resetAll() + } + } + @Published var verticalSplitRatio: Float { + didSet { + Defaults.verticalSplitRatio.value = verticalSplitRatio + // ActiveSideSplitRatios.shared.resetAll() + } + } + @Published var halvesPreserveOtherAxisSize: Bool { + didSet { Defaults.halvesPreserveOtherAxisSize.enabled = halvesPreserveOtherAxisSize } + } + @Published var repeatedMaximizeRestoresPrevious: Bool { + didSet { Defaults.repeatedMaximizeRestoresPrevious.enabled = repeatedMaximizeRestoresPrevious } + } + + // Preset Selection States + @Published var selectedHSplitPreset: CycleSize? + @Published var selectedVSplitPreset: CycleSize? + + // MARK: - Initialization + init() { + // Read initial values from Defaults / App Storage + let hRatio = Defaults.horizontalSplitRatio.value + let vRatio = Defaults.verticalSplitRatio.value + + self.tileColumnsMaxWindows = Defaults.tileColumnsMaxWindows.value + self.tileRowsMaxWindows = Defaults.tileRowsMaxWindows.value + self.widthStepSize = Int(Defaults.widthStepSize.value) + self.showAdditionalSizesInMenu = Defaults.showAdditionalSizesInMenu.userEnabled + self.cyclingOverlapOffset = Defaults.cyclingOverlapOffset.userEnabled + self.stackBadge = Defaults.stackBadge.userEnabled + self.horizontalSplitRatio = hRatio + self.verticalSplitRatio = vRatio + self.halvesPreserveOtherAxisSize = Defaults.halvesPreserveOtherAxisSize.enabled + self.repeatedMaximizeRestoresPrevious = Defaults.repeatedMaximizeRestoresPrevious.enabled + + // Match existing ratios to presets or set as custom ("Other") + self.selectedHSplitPreset = CycleSize(rawValue: Int(hRatio)) + self.selectedVSplitPreset = CycleSize(rawValue: Int(vRatio)) + } + + // MARK: - Actions + + func selectHSplitPreset(_ preset: CycleSize?) { + selectedHSplitPreset = preset + if let percentValue = preset?.percentValue { + horizontalSplitRatio = percentValue + } + } + + func selectVSplitPreset(_ preset: CycleSize?) { + selectedVSplitPreset = preset + if let percentValue = preset?.percentValue { + verticalSplitRatio = percentValue + } + } +} + +// MARK: - SwiftUI View + +struct ExtraSettingsView: View { + @StateObject private var viewModel = ExtraSettingsViewModel() + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + + // MARK: - Tile Windows in Rows/Columns + VStack(alignment: .leading, spacing: 8) { + Text(NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "General settings group for multi-window grid limits")) + .font(.headline) + .frame(maxWidth: .infinity, alignment: .center) + + Grid(alignment: .leading, horizontalSpacing: 12, verticalSpacing: 8) { + GridRow { + Text(NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "Maximum windows stacked in each tiled column")) + Stepper(value: $viewModel.tileColumnsMaxWindows, in: 1...Int.max) { + TextField("", value: $viewModel.tileColumnsMaxWindows, formatter: integerFormatter) + .frame(width: 50) + .multilineTextAlignment(.trailing) + } + } + GridRow { + Text(NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "Maximum windows placed side by side in each tiled row")) + Stepper(value: $viewModel.tileRowsMaxWindows, in: 1...Int.max) { + TextField("", value: $viewModel.tileRowsMaxWindows, formatter: integerFormatter) + .frame(width: 50) + .multilineTextAlignment(.trailing) + } + } + } + } + + Divider() + + // MARK: - Width Step Size + HStack { + Text(NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) + Spacer() + TextField("", value: $viewModel.widthStepSize, formatter: integerFormatter) + .frame(width: 60) + .multilineTextAlignment(.trailing) + } + + Divider() + + // MARK: - Grid Positions + VStack(alignment: .leading, spacing: 6) { + Text(NSLocalizedString("Grid Positions", tableName: "Main", value: "", comment: "")) + .font(.headline) + .frame(maxWidth: .infinity, alignment: .center) + + Text(NSLocalizedString("Press the shortcut repeatedly to cycle through all positions in the grid.", tableName: "Main", value: "", comment: "")) + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity, alignment: .center) + + Toggle(NSLocalizedString("Show additional sizes in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) + Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) + Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) + + HStack { + Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) + Spacer() + MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) + .frame(width: 160, height: 19) + } + } + + Divider() + + // MARK: - Side Split Ratios + VStack(alignment: .leading, spacing: 8) { + Text(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) + .font(.headline) + .frame(maxWidth: .infinity, alignment: .center) + + // Horizontal Split + HStack { + Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) + Spacer() + + Picker("", selection: Binding( + get: { viewModel.selectedHSplitPreset }, + set: { viewModel.selectHSplitPreset($0) } + )) { + // TODO: Loop through CycleSize.sortedSizes if available in your project + Text("50 / 50").tag(Optional(CycleSize.oneHalf)) + Text("Other").tag(Optional.none) + } + .labelsHidden() + .frame(width: 110) + + if viewModel.selectedHSplitPreset == nil { + TextField("", value: $viewModel.horizontalSplitRatio, formatter: percentFormatter) + .frame(width: 45) + .multilineTextAlignment(.trailing) + } + } + + // Vertical Split + HStack { + Text(NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) + Spacer() + + Picker("", selection: Binding( + get: { viewModel.selectedVSplitPreset }, + set: { viewModel.selectVSplitPreset($0) } + )) { + Text("50 / 50").tag(Optional(CycleSize.oneHalf)) + Text("Other").tag(Optional.none) + } + .labelsHidden() + .frame(width: 110) + + if viewModel.selectedVSplitPreset == nil { + TextField("", value: $viewModel.verticalSplitRatio, formatter: percentFormatter) + .frame(width: 45) + .multilineTextAlignment(.trailing) + } + } + + Toggle(NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), isOn: $viewModel.halvesPreserveOtherAxisSize) + .help(NSLocalizedString("Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back.", tableName: "Main", value: "", comment: "")) + + Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) + .help(NSLocalizedString("After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position.", tableName: "Main", value: "", comment: "")) + } + } + .padding(15) + .frame(width: 380) + } + + // MARK: - Formatters + private var integerFormatter: NumberFormatter { + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + return formatter + } + + private var percentFormatter: NumberFormatter { + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + formatter.maximum = 99 + return formatter + } +} From 79af761a0bb967f7f0c6b8c4dff977df23349ccb Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 13:41:52 -0400 Subject: [PATCH 37/79] Merged extra settings into behavior settings --- .../PrefsWindow/ExtraSettingsPopover.swift | 547 ------------------ .../SettingsWindow/BehaviorSettingsView.swift | 141 ++++- .../BehaviorSettingsViewModel.swift | 63 +- .../SettingsWindow/ExtraSettings.swift | 197 +------ .../ShortcutsViewController.swift | 2 +- Rectangle/mul.lproj/Main.xcstrings | 41 +- 6 files changed, 220 insertions(+), 771 deletions(-) diff --git a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift index 0ced89c6e..f363b28f7 100644 --- a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift +++ b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift @@ -27,11 +27,6 @@ extension SettingsViewController { let tileColumnsLabel = NSTextField(labelWithString: NSLocalizedString("tileColumns.title", tableName: "Main", value: "Tile Windows in Columns", comment: "")) tileColumnsLabel.alignment = .right tileColumnsLabel.translatesAutoresizingMaskIntoConstraints = false - - let tileRowsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let tileColumnsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - tilingShortcutViews = [tileRowsShortcutView, tileColumnsShortcutView] - let largerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Larger Width", tableName: "Main", value: "", comment: "")) largerWidthLabel.alignment = .right let smallerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Smaller Width", tableName: "Main", value: "", comment: "")) @@ -67,41 +62,6 @@ extension SettingsViewController { let bottomRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Right Eighth", tableName: "Main", value: "", comment: "")) bottomRightEighthLabel.alignment = .right - largerWidthLabel.translatesAutoresizingMaskIntoConstraints = false - smallerWidthLabel.translatesAutoresizingMaskIntoConstraints = false - widthStepLabel.translatesAutoresizingMaskIntoConstraints = false - topVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false - middleVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false - bottomVerticalThirdLabel.translatesAutoresizingMaskIntoConstraints = false - topVerticalTwoThirdsLabel.translatesAutoresizingMaskIntoConstraints = false - bottomVerticalTwoThirdsLabel.translatesAutoresizingMaskIntoConstraints = false - topLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - topCenterLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - topCenterRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - topRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomCenterLeftEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomCenterRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - bottomRightEighthLabel.translatesAutoresizingMaskIntoConstraints = false - - let largerWidthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let smallerWidthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - let topVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let middleVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomVerticalThirdShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topVerticalTwoThirdsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomVerticalTwoThirdsShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - let topLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topCenterLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topCenterRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let topRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomCenterLeftEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomCenterRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let bottomRightEighthShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let widthStepField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) widthStepField.stringValue = String(Int(Defaults.widthStepSize.value)) widthStepField.delegate = self @@ -176,263 +136,6 @@ extension SettingsViewController { vSplitPopUpButton?.selectCurrentValue() } - tileRowsShortcutView.setAssociatedUserDefaultsKey(WindowAction.tileRows.name, withTransformerName: MASDictionaryTransformerName) - tileColumnsShortcutView.setAssociatedUserDefaultsKey(WindowAction.tileColumns.name, withTransformerName: MASDictionaryTransformerName) - - largerWidthShortcutView.setAssociatedUserDefaultsKey(WindowAction.largerWidth.name, withTransformerName: MASDictionaryTransformerName) - smallerWidthShortcutView.setAssociatedUserDefaultsKey(WindowAction.smallerWidth.name, withTransformerName: MASDictionaryTransformerName) - - topVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.topVerticalThird.name, withTransformerName: MASDictionaryTransformerName) - middleVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.middleVerticalThird.name, withTransformerName: MASDictionaryTransformerName) - bottomVerticalThirdShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomVerticalThird.name, withTransformerName: MASDictionaryTransformerName) - topVerticalTwoThirdsShortcutView.setAssociatedUserDefaultsKey(WindowAction.topVerticalTwoThirds.name, withTransformerName: MASDictionaryTransformerName) - bottomVerticalTwoThirdsShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomVerticalTwoThirds.name, withTransformerName: MASDictionaryTransformerName) - - topLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - topCenterLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topCenterLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - topCenterRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topCenterRightEighth.name, withTransformerName: MASDictionaryTransformerName) - topRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.topRightEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomCenterLeftEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomCenterLeftEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomCenterRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomCenterRightEighth.name, withTransformerName: MASDictionaryTransformerName) - bottomRightEighthShortcutView.setAssociatedUserDefaultsKey(WindowAction.bottomRightEighth.name, withTransformerName: MASDictionaryTransformerName) - - if Defaults.allowAnyShortcut.enabled { - let passThroughValidator = PassthroughShortcutValidator() - tileRowsShortcutView.shortcutValidator = passThroughValidator - tileColumnsShortcutView.shortcutValidator = passThroughValidator - largerWidthShortcutView.shortcutValidator = passThroughValidator - smallerWidthShortcutView.shortcutValidator = passThroughValidator - topVerticalThirdShortcutView.shortcutValidator = passThroughValidator - middleVerticalThirdShortcutView.shortcutValidator = passThroughValidator - bottomVerticalThirdShortcutView.shortcutValidator = passThroughValidator - topVerticalTwoThirdsShortcutView.shortcutValidator = passThroughValidator - bottomVerticalTwoThirdsShortcutView.shortcutValidator = passThroughValidator - topLeftEighthShortcutView.shortcutValidator = passThroughValidator - topCenterLeftEighthShortcutView.shortcutValidator = passThroughValidator - topCenterRightEighthShortcutView.shortcutValidator = passThroughValidator - topRightEighthShortcutView.shortcutValidator = passThroughValidator - bottomLeftEighthShortcutView.shortcutValidator = passThroughValidator - bottomCenterLeftEighthShortcutView.shortcutValidator = passThroughValidator - bottomCenterRightEighthShortcutView.shortcutValidator = passThroughValidator - bottomRightEighthShortcutView.shortcutValidator = passThroughValidator - } - - let tileRowsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - tileRowsIcon.image = WindowAction.tileRows.image - tileRowsIcon.image?.size = NSSize(width: 21, height: 14) - - let tileColumnsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - tileColumnsIcon.image = WindowAction.tileColumns.image - tileColumnsIcon.image?.size = NSSize(width: 21, height: 14) - - let largerWidthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - largerWidthIcon.image = WindowAction.largerWidth.image - largerWidthIcon.image?.size = NSSize(width: 21, height: 14) - - let smallerWidthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - smallerWidthIcon.image = WindowAction.smallerWidth.image - smallerWidthIcon.image?.size = NSSize(width: 21, height: 14) - - let topVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topVerticalThirdIcon.image = WindowAction.topVerticalThird.image - topVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) - - let middleVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - middleVerticalThirdIcon.image = WindowAction.middleVerticalThird.image - middleVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomVerticalThirdIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomVerticalThirdIcon.image = WindowAction.bottomVerticalThird.image - bottomVerticalThirdIcon.image?.size = NSSize(width: 21, height: 14) - - let topVerticalTwoThirdsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topVerticalTwoThirdsIcon.image = WindowAction.topVerticalTwoThirds.image - topVerticalTwoThirdsIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomVerticalTwoThirdsIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomVerticalTwoThirdsIcon.image = WindowAction.bottomVerticalTwoThirds.image - bottomVerticalTwoThirdsIcon.image?.size = NSSize(width: 21, height: 14) - - let topLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topLeftEighthIcon.image = WindowAction.topLeftEighth.image - topLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let topCenterLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topCenterLeftEighthIcon.image = WindowAction.topCenterLeftEighth.image - topCenterLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let topCenterRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topCenterRightEighthIcon.image = WindowAction.topCenterRightEighth.image - topCenterRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let topRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - topRightEighthIcon.image = WindowAction.topRightEighth.image - topRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomLeftEighthIcon.image = WindowAction.bottomLeftEighth.image - bottomLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomCenterLeftEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomCenterLeftEighthIcon.image = WindowAction.bottomCenterLeftEighth.image - bottomCenterLeftEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomCenterRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomCenterRightEighthIcon.image = WindowAction.bottomCenterRightEighth.image - bottomCenterRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let bottomRightEighthIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - bottomRightEighthIcon.image = WindowAction.bottomRightEighth.image - bottomRightEighthIcon.image?.size = NSSize(width: 21, height: 14) - - let tileRowsLabelStack = NSStackView() - tileRowsLabelStack.orientation = .horizontal - tileRowsLabelStack.alignment = .centerY - tileRowsLabelStack.spacing = 8 - tileRowsLabelStack.addArrangedSubview(tileRowsLabel) - tileRowsLabelStack.addArrangedSubview(tileRowsIcon) - - let tileColumnsLabelStack = NSStackView() - tileColumnsLabelStack.orientation = .horizontal - tileColumnsLabelStack.alignment = .centerY - tileColumnsLabelStack.spacing = 8 - tileColumnsLabelStack.addArrangedSubview(tileColumnsLabel) - tileColumnsLabelStack.addArrangedSubview(tileColumnsIcon) - - let largerWidthLabelStack = NSStackView() - largerWidthLabelStack.orientation = .horizontal - largerWidthLabelStack.alignment = .centerY - largerWidthLabelStack.spacing = 8 - largerWidthLabelStack.addArrangedSubview(largerWidthLabel) - largerWidthLabelStack.addArrangedSubview(largerWidthIcon) - - let smallerWidthLabelStack = NSStackView() - smallerWidthLabelStack.orientation = .horizontal - smallerWidthLabelStack.alignment = .centerY - smallerWidthLabelStack.spacing = 8 - smallerWidthLabelStack.addArrangedSubview(smallerWidthLabel) - smallerWidthLabelStack.addArrangedSubview(smallerWidthIcon) - - let topVerticalThirdLabelStack = NSStackView() - topVerticalThirdLabelStack.orientation = .horizontal - topVerticalThirdLabelStack.alignment = .centerY - topVerticalThirdLabelStack.spacing = 8 - topVerticalThirdLabelStack.addArrangedSubview(topVerticalThirdLabel) - topVerticalThirdLabelStack.addArrangedSubview(topVerticalThirdIcon) - - let middleVerticalThirdLabelStack = NSStackView() - middleVerticalThirdLabelStack.orientation = .horizontal - middleVerticalThirdLabelStack.alignment = .centerY - middleVerticalThirdLabelStack.spacing = 8 - middleVerticalThirdLabelStack.addArrangedSubview(middleVerticalThirdLabel) - middleVerticalThirdLabelStack.addArrangedSubview(middleVerticalThirdIcon) - - let bottomVerticalThirdLabelStack = NSStackView() - bottomVerticalThirdLabelStack.orientation = .horizontal - bottomVerticalThirdLabelStack.alignment = .centerY - bottomVerticalThirdLabelStack.spacing = 8 - bottomVerticalThirdLabelStack.addArrangedSubview(bottomVerticalThirdLabel) - bottomVerticalThirdLabelStack.addArrangedSubview(bottomVerticalThirdIcon) - - let topVerticalTwoThirdsLabelStack = NSStackView() - topVerticalTwoThirdsLabelStack.orientation = .horizontal - topVerticalTwoThirdsLabelStack.alignment = .centerY - topVerticalTwoThirdsLabelStack.spacing = 8 - topVerticalTwoThirdsLabelStack.addArrangedSubview(topVerticalTwoThirdsLabel) - topVerticalTwoThirdsLabelStack.addArrangedSubview(topVerticalTwoThirdsIcon) - - let bottomVerticalTwoThirdsLabelStack = NSStackView() - bottomVerticalTwoThirdsLabelStack.orientation = .horizontal - bottomVerticalTwoThirdsLabelStack.alignment = .centerY - bottomVerticalTwoThirdsLabelStack.spacing = 8 - bottomVerticalTwoThirdsLabelStack.addArrangedSubview(bottomVerticalTwoThirdsLabel) - bottomVerticalTwoThirdsLabelStack.addArrangedSubview(bottomVerticalTwoThirdsIcon) - - let topLeftEighthLabelStack = NSStackView() - topLeftEighthLabelStack.orientation = .horizontal - topLeftEighthLabelStack.alignment = .centerY - topLeftEighthLabelStack.spacing = 8 - topLeftEighthLabelStack.addArrangedSubview(topLeftEighthLabel) - topLeftEighthLabelStack.addArrangedSubview(topLeftEighthIcon) - - let topCenterLeftEighthLabelStack = NSStackView() - topCenterLeftEighthLabelStack.orientation = .horizontal - topCenterLeftEighthLabelStack.alignment = .centerY - topCenterLeftEighthLabelStack.spacing = 8 - topCenterLeftEighthLabelStack.addArrangedSubview(topCenterLeftEighthLabel) - topCenterLeftEighthLabelStack.addArrangedSubview(topCenterLeftEighthIcon) - - let topCenterRightEighthLabelStack = NSStackView() - topCenterRightEighthLabelStack.orientation = .horizontal - topCenterRightEighthLabelStack.alignment = .centerY - topCenterRightEighthLabelStack.spacing = 8 - topCenterRightEighthLabelStack.addArrangedSubview(topCenterRightEighthLabel) - topCenterRightEighthLabelStack.addArrangedSubview(topCenterRightEighthIcon) - - let topRightEighthLabelStack = NSStackView() - topRightEighthLabelStack.orientation = .horizontal - topRightEighthLabelStack.alignment = .centerY - topRightEighthLabelStack.spacing = 8 - topRightEighthLabelStack.addArrangedSubview(topRightEighthLabel) - topRightEighthLabelStack.addArrangedSubview(topRightEighthIcon) - - let bottomLeftEighthLabelStack = NSStackView() - bottomLeftEighthLabelStack.orientation = .horizontal - bottomLeftEighthLabelStack.alignment = .centerY - bottomLeftEighthLabelStack.spacing = 8 - bottomLeftEighthLabelStack.addArrangedSubview(bottomLeftEighthLabel) - bottomLeftEighthLabelStack.addArrangedSubview(bottomLeftEighthIcon) - - let bottomCenterLeftEighthLabelStack = NSStackView() - bottomCenterLeftEighthLabelStack.orientation = .horizontal - bottomCenterLeftEighthLabelStack.alignment = .centerY - bottomCenterLeftEighthLabelStack.spacing = 8 - bottomCenterLeftEighthLabelStack.addArrangedSubview(bottomCenterLeftEighthLabel) - bottomCenterLeftEighthLabelStack.addArrangedSubview(bottomCenterLeftEighthIcon) - - let bottomCenterRightEighthLabelStack = NSStackView() - bottomCenterRightEighthLabelStack.orientation = .horizontal - bottomCenterRightEighthLabelStack.alignment = .centerY - bottomCenterRightEighthLabelStack.spacing = 8 - bottomCenterRightEighthLabelStack.addArrangedSubview(bottomCenterRightEighthLabel) - bottomCenterRightEighthLabelStack.addArrangedSubview(bottomCenterRightEighthIcon) - - let bottomRightEighthLabelStack = NSStackView() - bottomRightEighthLabelStack.orientation = .horizontal - bottomRightEighthLabelStack.alignment = .centerY - bottomRightEighthLabelStack.spacing = 8 - bottomRightEighthLabelStack.addArrangedSubview(bottomRightEighthLabel) - bottomRightEighthLabelStack.addArrangedSubview(bottomRightEighthIcon) - - let tileRowsRow = NSStackView() - tileRowsRow.orientation = .horizontal - tileRowsRow.alignment = .centerY - tileRowsRow.spacing = 18 - tileRowsRow.addArrangedSubview(tileRowsLabelStack) - tileRowsRow.addArrangedSubview(tileRowsShortcutView) - - let tileColumnsRow = NSStackView() - tileColumnsRow.orientation = .horizontal - tileColumnsRow.alignment = .centerY - tileColumnsRow.spacing = 18 - tileColumnsRow.addArrangedSubview(tileColumnsLabelStack) - tileColumnsRow.addArrangedSubview(tileColumnsShortcutView) - - let largerWidthRow = NSStackView() - largerWidthRow.orientation = .horizontal - largerWidthRow.alignment = .centerY - largerWidthRow.spacing = 18 - largerWidthRow.addArrangedSubview(largerWidthLabelStack) - largerWidthRow.addArrangedSubview(largerWidthShortcutView) - - let smallerWidthRow = NSStackView() - smallerWidthRow.orientation = .horizontal - smallerWidthRow.alignment = .centerY - smallerWidthRow.spacing = 18 - smallerWidthRow.addArrangedSubview(smallerWidthLabelStack) - smallerWidthRow.addArrangedSubview(smallerWidthShortcutView) - let widthStepRow = NSStackView() widthStepRow.orientation = .horizontal widthStepRow.alignment = .centerY @@ -466,102 +169,8 @@ extension SettingsViewController { vSplitControlsStack.addArrangedSubview(vSplitField) vSplitRow.addArrangedSubview(vSplitControlsStack) - let topVerticalThirdRow = NSStackView() - topVerticalThirdRow.orientation = .horizontal - topVerticalThirdRow.alignment = .centerY - topVerticalThirdRow.spacing = 18 - topVerticalThirdRow.addArrangedSubview(topVerticalThirdLabelStack) - topVerticalThirdRow.addArrangedSubview(topVerticalThirdShortcutView) - - let middleVerticalThirdRow = NSStackView() - middleVerticalThirdRow.orientation = .horizontal - middleVerticalThirdRow.alignment = .centerY - middleVerticalThirdRow.spacing = 18 - middleVerticalThirdRow.addArrangedSubview(middleVerticalThirdLabelStack) - middleVerticalThirdRow.addArrangedSubview(middleVerticalThirdShortcutView) - - let bottomVerticalThirdRow = NSStackView() - bottomVerticalThirdRow.orientation = .horizontal - bottomVerticalThirdRow.alignment = .centerY - bottomVerticalThirdRow.spacing = 18 - bottomVerticalThirdRow.addArrangedSubview(bottomVerticalThirdLabelStack) - bottomVerticalThirdRow.addArrangedSubview(bottomVerticalThirdShortcutView) - - let topVerticalTwoThirdsRow = NSStackView() - topVerticalTwoThirdsRow.orientation = .horizontal - topVerticalTwoThirdsRow.alignment = .centerY - topVerticalTwoThirdsRow.spacing = 18 - topVerticalTwoThirdsRow.addArrangedSubview(topVerticalTwoThirdsLabelStack) - topVerticalTwoThirdsRow.addArrangedSubview(topVerticalTwoThirdsShortcutView) - - let bottomVerticalTwoThirdsRow = NSStackView() - bottomVerticalTwoThirdsRow.orientation = .horizontal - bottomVerticalTwoThirdsRow.alignment = .centerY - bottomVerticalTwoThirdsRow.spacing = 18 - bottomVerticalTwoThirdsRow.addArrangedSubview(bottomVerticalTwoThirdsLabelStack) - bottomVerticalTwoThirdsRow.addArrangedSubview(bottomVerticalTwoThirdsShortcutView) - - let topLeftEighthRow = NSStackView() - topLeftEighthRow.orientation = .horizontal - topLeftEighthRow.alignment = .centerY - topLeftEighthRow.spacing = 18 - topLeftEighthRow.addArrangedSubview(topLeftEighthLabelStack) - topLeftEighthRow.addArrangedSubview(topLeftEighthShortcutView) - - let topCenterLeftEighthRow = NSStackView() - topCenterLeftEighthRow.orientation = .horizontal - topCenterLeftEighthRow.alignment = .centerY - topCenterLeftEighthRow.spacing = 18 - topCenterLeftEighthRow.addArrangedSubview(topCenterLeftEighthLabelStack) - topCenterLeftEighthRow.addArrangedSubview(topCenterLeftEighthShortcutView) - - let topCenterRightEighthRow = NSStackView() - topCenterRightEighthRow.orientation = .horizontal - topCenterRightEighthRow.alignment = .centerY - topCenterRightEighthRow.spacing = 18 - topCenterRightEighthRow.addArrangedSubview(topCenterRightEighthLabelStack) - topCenterRightEighthRow.addArrangedSubview(topCenterRightEighthShortcutView) - - let topRightEighthRow = NSStackView() - topRightEighthRow.orientation = .horizontal - topRightEighthRow.alignment = .centerY - topRightEighthRow.spacing = 18 - topRightEighthRow.addArrangedSubview(topRightEighthLabelStack) - topRightEighthRow.addArrangedSubview(topRightEighthShortcutView) - - let bottomLeftEighthRow = NSStackView() - bottomLeftEighthRow.orientation = .horizontal - bottomLeftEighthRow.alignment = .centerY - bottomLeftEighthRow.spacing = 18 - bottomLeftEighthRow.addArrangedSubview(bottomLeftEighthLabelStack) - bottomLeftEighthRow.addArrangedSubview(bottomLeftEighthShortcutView) - - let bottomCenterLeftEighthRow = NSStackView() - bottomCenterLeftEighthRow.orientation = .horizontal - bottomCenterLeftEighthRow.alignment = .centerY - bottomCenterLeftEighthRow.spacing = 18 - bottomCenterLeftEighthRow.addArrangedSubview(bottomCenterLeftEighthLabelStack) - bottomCenterLeftEighthRow.addArrangedSubview(bottomCenterLeftEighthShortcutView) - - let bottomCenterRightEighthRow = NSStackView() - bottomCenterRightEighthRow.orientation = .horizontal - bottomCenterRightEighthRow.alignment = .centerY - bottomCenterRightEighthRow.spacing = 18 - bottomCenterRightEighthRow.addArrangedSubview(bottomCenterRightEighthLabelStack) - bottomCenterRightEighthRow.addArrangedSubview(bottomCenterRightEighthShortcutView) - - let bottomRightEighthRow = NSStackView() - bottomRightEighthRow.orientation = .horizontal - bottomRightEighthRow.alignment = .centerY - bottomRightEighthRow.spacing = 18 - bottomRightEighthRow.addArrangedSubview(bottomRightEighthLabelStack) - bottomRightEighthRow.addArrangedSubview(bottomRightEighthShortcutView) - mainStackView.addArrangedSubview(headerLabel) mainStackView.setCustomSpacing(10, after: headerLabel) - mainStackView.addArrangedSubview(tileRowsRow) - mainStackView.addArrangedSubview(tileColumnsRow) - mainStackView.setCustomSpacing(10, after: tileColumnsRow) let tileGridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "General settings group for multi-window grid limits")) tileGridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) @@ -580,15 +189,7 @@ extension SettingsViewController { mainStackView.addArrangedSubview(rowsLimitRow) mainStackView.setCustomSpacing(10, after: rowsLimitRow) - mainStackView.addArrangedSubview(largerWidthRow) - mainStackView.addArrangedSubview(smallerWidthRow) mainStackView.addArrangedSubview(widthStepRow) - mainStackView.addArrangedSubview(topVerticalThirdRow) - mainStackView.addArrangedSubview(middleVerticalThirdRow) - mainStackView.addArrangedSubview(bottomVerticalThirdRow) - mainStackView.addArrangedSubview(topVerticalTwoThirdsRow) - mainStackView.addArrangedSubview(bottomVerticalTwoThirdsRow) - mainStackView.setCustomSpacing(10, after: bottomVerticalTwoThirdsRow) // Grid Positions - cycling shortcuts for larger grids let showAdditionalSizesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show additional sizes in menu", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleShowAdditionalSizesInMenu(_:))) showAdditionalSizesCheckbox.state = Defaults.showAdditionalSizesInMenu.userEnabled ? .on : .off @@ -619,13 +220,6 @@ extension SettingsViewController { sixteenthsCyclingLabel.alignment = .right sixteenthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - let ninthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let twelfthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - let sixteenthsCyclingShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - - ninthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftNinth.name, withTransformerName: MASDictionaryTransformerName) - twelfthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftTwelfth.name, withTransformerName: MASDictionaryTransformerName) - sixteenthsCyclingShortcutView.setAssociatedUserDefaultsKey(WindowAction.topLeftSixteenth.name, withTransformerName: MASDictionaryTransformerName) let ninthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) ninthsCyclingIcon.image = WindowAction.topLeftNinth.image @@ -647,49 +241,6 @@ extension SettingsViewController { return stack } - func makeRow(_ labelStack: NSStackView, _ shortcutView: MASShortcutView) -> NSStackView { - let row = NSStackView() - row.orientation = .horizontal - row.alignment = .centerY - row.spacing = 18 - row.addArrangedSubview(labelStack) - row.addArrangedSubview(shortcutView) - return row - } - - let ninthsCyclingRow = makeRow(makeLabelStack(ninthsCyclingLabel, ninthsCyclingIcon), ninthsCyclingShortcutView) - let twelfthsCyclingRow = makeRow(makeLabelStack(twelfthsCyclingLabel, twelfthsCyclingIcon), twelfthsCyclingShortcutView) - let sixteenthsCyclingRow = makeRow(makeLabelStack(sixteenthsCyclingLabel, sixteenthsCyclingIcon), sixteenthsCyclingShortcutView) - - if Defaults.allowAnyShortcut.enabled { - let passThroughValidator = PassthroughShortcutValidator() - ninthsCyclingShortcutView.shortcutValidator = passThroughValidator - twelfthsCyclingShortcutView.shortcutValidator = passThroughValidator - sixteenthsCyclingShortcutView.shortcutValidator = passThroughValidator - } - shortcutRecordingObserver.observe([ - tileRowsShortcutView, - tileColumnsShortcutView, - largerWidthShortcutView, - smallerWidthShortcutView, - topVerticalThirdShortcutView, - middleVerticalThirdShortcutView, - bottomVerticalThirdShortcutView, - topVerticalTwoThirdsShortcutView, - bottomVerticalTwoThirdsShortcutView, - topLeftEighthShortcutView, - topCenterLeftEighthShortcutView, - topCenterRightEighthShortcutView, - topRightEighthShortcutView, - bottomLeftEighthShortcutView, - bottomCenterLeftEighthShortcutView, - bottomCenterRightEighthShortcutView, - bottomRightEighthShortcutView, - ninthsCyclingShortcutView, - twelfthsCyclingShortcutView, - sixteenthsCyclingShortcutView - ]) - let overlapOffsetCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleCyclingOverlapOffset(_:))) overlapOffsetCheckbox.state = Defaults.cyclingOverlapOffset.userEnabled ? .on : .off overlapOffsetCheckbox.translatesAutoresizingMaskIntoConstraints = false @@ -720,17 +271,6 @@ extension SettingsViewController { mainStackView.setCustomSpacing(4, after: gridHeaderLabel) mainStackView.addArrangedSubview(cyclingHintLabel) mainStackView.setCustomSpacing(8, after: cyclingHintLabel) - mainStackView.addArrangedSubview(topLeftEighthRow) - mainStackView.addArrangedSubview(topCenterLeftEighthRow) - mainStackView.addArrangedSubview(topCenterRightEighthRow) - mainStackView.addArrangedSubview(topRightEighthRow) - mainStackView.addArrangedSubview(bottomLeftEighthRow) - mainStackView.addArrangedSubview(bottomCenterLeftEighthRow) - mainStackView.addArrangedSubview(bottomCenterRightEighthRow) - mainStackView.addArrangedSubview(bottomRightEighthRow) - mainStackView.addArrangedSubview(ninthsCyclingRow) - mainStackView.addArrangedSubview(twelfthsCyclingRow) - mainStackView.addArrangedSubview(sixteenthsCyclingRow) mainStackView.addArrangedSubview(showAdditionalSizesCheckbox) mainStackView.addArrangedSubview(overlapOffsetCheckbox) mainStackView.addArrangedSubview(stackBadgeCheckbox) @@ -763,93 +303,6 @@ extension SettingsViewController { mainStackView.addArrangedSubview(repeatedMaximizeCheckbox) repeatedMaximizeRestoresPreviousCheckbox = repeatedMaximizeCheckbox - NSLayoutConstraint.activate([ - headerLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - tileGridHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - columnsLimitRow.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - rowsLimitRow.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - splitRatioHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - tileRowsLabel.widthAnchor.constraint(equalTo: tileColumnsLabel.widthAnchor), - tileColumnsLabel.widthAnchor.constraint(equalTo: largerWidthLabel.widthAnchor), - largerWidthLabel.widthAnchor.constraint(equalTo: smallerWidthLabel.widthAnchor), - smallerWidthLabel.widthAnchor.constraint(equalTo: widthStepLabel.widthAnchor), - widthStepLabel.widthAnchor.constraint(equalTo: topVerticalThirdLabel.widthAnchor), - topVerticalThirdLabel.widthAnchor.constraint(equalTo: middleVerticalThirdLabel.widthAnchor), - middleVerticalThirdLabel.widthAnchor.constraint(equalTo: bottomVerticalThirdLabel.widthAnchor), - bottomVerticalThirdLabel.widthAnchor.constraint(equalTo: topVerticalTwoThirdsLabel.widthAnchor), - topVerticalTwoThirdsLabel.widthAnchor.constraint(equalTo: bottomVerticalTwoThirdsLabel.widthAnchor), - bottomVerticalTwoThirdsLabel.widthAnchor.constraint(equalTo: topLeftEighthLabel.widthAnchor), - topLeftEighthLabel.widthAnchor.constraint(equalTo: topCenterLeftEighthLabel.widthAnchor), - topCenterLeftEighthLabel.widthAnchor.constraint(equalTo: topCenterRightEighthLabel.widthAnchor), - topCenterRightEighthLabel.widthAnchor.constraint(equalTo: topRightEighthLabel.widthAnchor), - topRightEighthLabel.widthAnchor.constraint(equalTo: bottomLeftEighthLabel.widthAnchor), - bottomLeftEighthLabel.widthAnchor.constraint(equalTo: bottomCenterLeftEighthLabel.widthAnchor), - bottomCenterLeftEighthLabel.widthAnchor.constraint(equalTo: bottomCenterRightEighthLabel.widthAnchor), - bottomCenterRightEighthLabel.widthAnchor.constraint(equalTo: bottomRightEighthLabel.widthAnchor), - bottomRightEighthLabel.widthAnchor.constraint(equalTo: ninthsCyclingLabel.widthAnchor), - ninthsCyclingLabel.widthAnchor.constraint(equalTo: twelfthsCyclingLabel.widthAnchor), - twelfthsCyclingLabel.widthAnchor.constraint(equalTo: sixteenthsCyclingLabel.widthAnchor), - sixteenthsCyclingLabel.widthAnchor.constraint(equalTo: hSplitLabel.widthAnchor), - stackBadgeToggleShortcutView.leadingAnchor.constraint(equalTo: sixteenthsCyclingShortcutView.leadingAnchor), - stackBadgeToggleShortcutView.widthAnchor.constraint(equalToConstant: 160), - hSplitLabel.widthAnchor.constraint(equalTo: vSplitLabel.widthAnchor), - largerWidthLabelStack.widthAnchor.constraint(equalTo: smallerWidthLabelStack.widthAnchor), - tileRowsShortcutView.widthAnchor.constraint(equalToConstant: 160), - tileColumnsShortcutView.widthAnchor.constraint(equalToConstant: 160), - largerWidthShortcutView.widthAnchor.constraint(equalToConstant: 160), - smallerWidthShortcutView.widthAnchor.constraint(equalToConstant: 160), - widthStepField.widthAnchor.constraint(equalToConstant: 160), - hSplitControlsStack.widthAnchor.constraint(equalToConstant: 160), - vSplitControlsStack.widthAnchor.constraint(equalToConstant: 160), - hSplitPopUpButton.widthAnchor.constraint(equalToConstant: 100), - vSplitPopUpButton.widthAnchor.constraint(equalToConstant: 100), - hSplitField.widthAnchor.constraint(equalToConstant: 52), - vSplitField.widthAnchor.constraint(equalToConstant: 52), - topVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), - middleVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomVerticalThirdShortcutView.widthAnchor.constraint(equalToConstant: 160), - topVerticalTwoThirdsShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomVerticalTwoThirdsShortcutView.widthAnchor.constraint(equalToConstant: 160), - topLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - topCenterLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - topCenterRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - topRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomCenterLeftEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomCenterRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - bottomRightEighthShortcutView.widthAnchor.constraint(equalToConstant: 160), - ninthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), - twelfthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), - sixteenthsCyclingShortcutView.widthAnchor.constraint(equalToConstant: 160), - widthStepField.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor), - tileRowsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - tileColumnsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - showAdditionalSizesCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - overlapOffsetCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - stackBadgeCheckbox.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - smallerWidthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - middleVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomVerticalThirdShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topVerticalTwoThirdsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomVerticalTwoThirdsShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topCenterLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topCenterRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - topRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomCenterLeftEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomCenterRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - bottomRightEighthShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - ninthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - twelfthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - sixteenthsCyclingShortcutView.leadingAnchor.constraint(equalTo: largerWidthShortcutView.leadingAnchor), - gridHeaderLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor), - cyclingHintLabel.widthAnchor.constraint(equalTo: mainStackView.widthAnchor, constant: -20), - hSplitControlsStack.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor), - vSplitControlsStack.trailingAnchor.constraint(equalTo: largerWidthShortcutView.trailingAnchor) - ]) - let containerView = NSView() containerView.addSubview(mainStackView) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 4d444849e..25a91c58b 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -94,33 +94,10 @@ struct BehaviorSettingsView: View { } } - Section { - if viewModel.showCursorScreenDetection { - Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) - } - - Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) - Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - - VStack(alignment: .leading, spacing: 2) { - Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) - Text("Hold any modifier key or use the window menu for default macOS behavior") - .font(.caption) - .foregroundColor(.secondary) - } - - if viewModel.showCombinedDisplayMode { - VStack(alignment: .leading, spacing: 2) { - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") - .font(.caption) - .foregroundColor(.secondary) - } - } - } - Section { Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) + Toggle(NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), isOn: $viewModel.halvesPreserveOtherAxisSize) + Toggle(NSLocalizedString("Show Extra shortcuts in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) } // MARK: - Todo Mode @@ -198,12 +175,112 @@ struct BehaviorSettingsView: View { } } + Section { + if viewModel.showCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } + + Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + + VStack(alignment: .leading, spacing: 2) { + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Text("Hold any modifier key or use the window menu for default macOS behavior") + .font(.caption) + .foregroundColor(.secondary) + } + + if viewModel.showCombinedDisplayMode { + VStack(alignment: .leading, spacing: 2) { + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") + .font(.caption) + .foregroundColor(.secondary) + } + } + + Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) + + } header: { + Text("Maximize") + } + + Section { + VStack(alignment: .leading, spacing: 8) { + Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) + Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) + + HStack { + Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) + Spacer() + MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) + .frame(width: 160, height: 19) + } + } + } header: { + Text(NSLocalizedString("Stacked Windows", tableName: "Main", value: "", comment: "")) + } + + // MARK: - Side Split Ratios + Section { + VStack(alignment: .leading, spacing: 10) { + HStack { + Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) + Spacer() + + if viewModel.selectedHSplitPreset == nil { + TextField("", value: $viewModel.horizontalSplitRatio, formatter: percentFormatter) + .frame(width: 45) + .multilineTextAlignment(.trailing) + } + + Picker("", selection: Binding( + get: { viewModel.selectedHSplitPreset }, + set: { viewModel.selectHSplitPreset($0) } + )) { + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Text(size.title).tag(Optional(size)) + } + Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) + } + .labelsHidden() + .frame(width: 110) + + } + + HStack { + Text(NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) + Spacer() + + if viewModel.selectedVSplitPreset == nil { + TextField("", value: $viewModel.verticalSplitRatio, formatter: percentFormatter) + .frame(width: 45) + .multilineTextAlignment(.trailing) + } + + Picker("", selection: Binding( + get: { viewModel.selectedVSplitPreset }, + set: { viewModel.selectVSplitPreset($0) } + )) { + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Text(size.title).tag(Optional(size)) + } + Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) + } + .labelsHidden() + .frame(width: 110) + } + } + } header: { + Text(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) + } + // MARK: - Stage Manager if viewModel.stageCapable { Section { VStack(alignment: .leading, spacing: 4) { HStack { - Text("Stage Manager recent apps area") + Text("Recent apps area") Slider( value: $viewModel.stageSize, in: 0...400, @@ -218,15 +295,25 @@ struct BehaviorSettingsView: View { .font(.caption) .foregroundColor(.secondary) } + } header: { + Text("Stage Manager") } } // MARK: - Footer Actions - ExtraSettingsView() + ExtraSettingsSections() } .formStyle(.grouped) .frame(width: 500) .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) } + + private var percentFormatter: NumberFormatter { + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + formatter.maximum = 99 + return formatter + } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift index 9e0dfa387..f5c703b7b 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -97,6 +97,40 @@ final class BehaviorSettingsViewModel: ObservableObject { } } + @Published var showAdditionalSizesInMenu: Bool { + didSet { Defaults.showAdditionalSizesInMenu.enabled = showAdditionalSizesInMenu } + } + @Published var cyclingOverlapOffset: Bool { + didSet { Defaults.cyclingOverlapOffset.enabled = cyclingOverlapOffset } + } + @Published var stackBadge: Bool { + didSet { Defaults.stackBadge.enabled = stackBadge } + } + @Published var horizontalSplitRatio: Float { + didSet { + Defaults.horizontalSplitRatio.value = horizontalSplitRatio + ActiveSideSplitRatios.shared.resetAll() + } + } + @Published var verticalSplitRatio: Float { + didSet { + Defaults.verticalSplitRatio.value = verticalSplitRatio + ActiveSideSplitRatios.shared.resetAll() + } + } + @Published var halvesPreserveOtherAxisSize: Bool { + didSet { Defaults.halvesPreserveOtherAxisSize.enabled = halvesPreserveOtherAxisSize } + } + + // Preset Selection States + @Published var selectedHSplitPreset: CycleSize? + @Published var selectedVSplitPreset: CycleSize? + + + @Published var repeatedMaximizeRestoresPrevious: Bool { + didSet { Defaults.repeatedMaximizeRestoresPrevious.enabled = repeatedMaximizeRestoresPrevious } + } + // MARK: - Stage Manager Settings @Published var stageSize: Double @@ -127,6 +161,7 @@ final class BehaviorSettingsViewModel: ObservableObject { self.autoMaximize = !Defaults.autoMaximize.userDisabled self.greenButtonOverride = Defaults.greenButtonOverride.enabled self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled + self.repeatedMaximizeRestoresPrevious = Defaults.repeatedMaximizeRestoresPrevious.enabled self.todoEnabled = Defaults.todo.userEnabled self.todoSidebarWidth = Defaults.todoSidebarWidth.value @@ -134,6 +169,20 @@ final class BehaviorSettingsViewModel: ObservableObject { self.todoSidebarSide = Defaults.todoSidebarSide.value self.stageSize = Double(Defaults.stageSize.value) + + let hRatio = Defaults.horizontalSplitRatio.value + let vRatio = Defaults.verticalSplitRatio.value + + self.showAdditionalSizesInMenu = Defaults.showAdditionalSizesInMenu.userEnabled + self.cyclingOverlapOffset = Defaults.cyclingOverlapOffset.userEnabled + self.stackBadge = Defaults.stackBadge.userEnabled + self.horizontalSplitRatio = hRatio + self.verticalSplitRatio = vRatio + self.halvesPreserveOtherAxisSize = Defaults.halvesPreserveOtherAxisSize.enabled + + // Match existing ratios to presets or set as custom ("Other") + self.selectedHSplitPreset = CycleSize(rawValue: Int(hRatio)) + self.selectedVSplitPreset = CycleSize(rawValue: Int(vRatio)) setupObservers() } @@ -276,7 +325,17 @@ final class BehaviorSettingsViewModel: ObservableObject { Notification.Name.windowSnapping.post(object: true) } - func showExtrasPopover() { - // Trigger your existing extras popover or sheet presentation logic here + func selectHSplitPreset(_ preset: CycleSize?) { + selectedHSplitPreset = preset + if let percentValue = preset?.percentValue { + horizontalSplitRatio = percentValue + } + } + + func selectVSplitPreset(_ preset: CycleSize?) { + selectedVSplitPreset = preset + if let percentValue = preset?.percentValue { + verticalSplitRatio = percentValue + } } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift index 549b80f8d..bb73233f4 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift @@ -8,105 +8,38 @@ import MASShortcut // Required for MASShortcutViewRepresentable final class ExtraSettingsViewModel: ObservableObject { - // MARK: Published Properties (State) @Published var tileColumnsMaxWindows: Int { didSet { Defaults.tileColumnsMaxWindows.value = tileColumnsMaxWindows } } @Published var tileRowsMaxWindows: Int { didSet { Defaults.tileRowsMaxWindows.value = tileRowsMaxWindows } } + @Published var widthStepSize: Int { didSet { Defaults.widthStepSize.value = Float(widthStepSize) } } - @Published var showAdditionalSizesInMenu: Bool { - didSet { Defaults.showAdditionalSizesInMenu.enabled = showAdditionalSizesInMenu } - } - @Published var cyclingOverlapOffset: Bool { - didSet { Defaults.cyclingOverlapOffset.enabled = cyclingOverlapOffset } - } - @Published var stackBadge: Bool { - didSet { Defaults.stackBadge.enabled = stackBadge } - } - @Published var horizontalSplitRatio: Float { - didSet { - Defaults.horizontalSplitRatio.value = horizontalSplitRatio - // Reset active ratios when user changes presets or manual ratio - // ActiveSideSplitRatios.shared.resetAll() - } - } - @Published var verticalSplitRatio: Float { - didSet { - Defaults.verticalSplitRatio.value = verticalSplitRatio - // ActiveSideSplitRatios.shared.resetAll() - } - } - @Published var halvesPreserveOtherAxisSize: Bool { - didSet { Defaults.halvesPreserveOtherAxisSize.enabled = halvesPreserveOtherAxisSize } - } - @Published var repeatedMaximizeRestoresPrevious: Bool { - didSet { Defaults.repeatedMaximizeRestoresPrevious.enabled = repeatedMaximizeRestoresPrevious } - } - - // Preset Selection States - @Published var selectedHSplitPreset: CycleSize? - @Published var selectedVSplitPreset: CycleSize? - // MARK: - Initialization init() { - // Read initial values from Defaults / App Storage - let hRatio = Defaults.horizontalSplitRatio.value - let vRatio = Defaults.verticalSplitRatio.value - self.tileColumnsMaxWindows = Defaults.tileColumnsMaxWindows.value self.tileRowsMaxWindows = Defaults.tileRowsMaxWindows.value self.widthStepSize = Int(Defaults.widthStepSize.value) - self.showAdditionalSizesInMenu = Defaults.showAdditionalSizesInMenu.userEnabled - self.cyclingOverlapOffset = Defaults.cyclingOverlapOffset.userEnabled - self.stackBadge = Defaults.stackBadge.userEnabled - self.horizontalSplitRatio = hRatio - self.verticalSplitRatio = vRatio - self.halvesPreserveOtherAxisSize = Defaults.halvesPreserveOtherAxisSize.enabled - self.repeatedMaximizeRestoresPrevious = Defaults.repeatedMaximizeRestoresPrevious.enabled - - // Match existing ratios to presets or set as custom ("Other") - self.selectedHSplitPreset = CycleSize(rawValue: Int(hRatio)) - self.selectedVSplitPreset = CycleSize(rawValue: Int(vRatio)) - } - - // MARK: - Actions - - func selectHSplitPreset(_ preset: CycleSize?) { - selectedHSplitPreset = preset - if let percentValue = preset?.percentValue { - horizontalSplitRatio = percentValue - } } - func selectVSplitPreset(_ preset: CycleSize?) { - selectedVSplitPreset = preset - if let percentValue = preset?.percentValue { - verticalSplitRatio = percentValue - } - } } // MARK: - SwiftUI View -struct ExtraSettingsView: View { +import SwiftUI + +struct ExtraSettingsSections: View { @StateObject private var viewModel = ExtraSettingsViewModel() var body: some View { - VStack(alignment: .leading, spacing: 16) { - - // MARK: - Tile Windows in Rows/Columns - VStack(alignment: .leading, spacing: 8) { - Text(NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "General settings group for multi-window grid limits")) - .font(.headline) - .frame(maxWidth: .infinity, alignment: .center) - + Group { + Section { Grid(alignment: .leading, horizontalSpacing: 12, verticalSpacing: 8) { GridRow { - Text(NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "Maximum windows stacked in each tiled column")) + Text(NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "")) Stepper(value: $viewModel.tileColumnsMaxWindows, in: 1...Int.max) { TextField("", value: $viewModel.tileColumnsMaxWindows, formatter: integerFormatter) .frame(width: 50) @@ -114,7 +47,7 @@ struct ExtraSettingsView: View { } } GridRow { - Text(NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "Maximum windows placed side by side in each tiled row")) + Text(NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "")) Stepper(value: $viewModel.tileRowsMaxWindows, in: 1...Int.max) { TextField("", value: $viewModel.tileRowsMaxWindows, formatter: integerFormatter) .frame(width: 50) @@ -122,122 +55,30 @@ struct ExtraSettingsView: View { } } } + } header: { + Text(NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "")) } - - Divider() - - // MARK: - Width Step Size - HStack { - Text(NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) - Spacer() - TextField("", value: $viewModel.widthStepSize, formatter: integerFormatter) - .frame(width: 60) - .multilineTextAlignment(.trailing) - } - - Divider() - - // MARK: - Grid Positions - VStack(alignment: .leading, spacing: 6) { - Text(NSLocalizedString("Grid Positions", tableName: "Main", value: "", comment: "")) - .font(.headline) - .frame(maxWidth: .infinity, alignment: .center) - - Text(NSLocalizedString("Press the shortcut repeatedly to cycle through all positions in the grid.", tableName: "Main", value: "", comment: "")) - .font(.caption) - .foregroundColor(.secondary) - .multilineTextAlignment(.center) - .frame(maxWidth: .infinity, alignment: .center) - - Toggle(NSLocalizedString("Show additional sizes in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) - Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) - Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) - + + // MARK: - Window Sizing Steps + Section { HStack { - Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) + Text(NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) Spacer() - MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) - .frame(width: 160, height: 19) + TextField("", value: $viewModel.widthStepSize, formatter: integerFormatter) + .frame(width: 60) + .multilineTextAlignment(.trailing) } + } header: { + Text(NSLocalizedString("Window Sizing", tableName: "Main", value: "", comment: "")) } - Divider() - - // MARK: - Side Split Ratios - VStack(alignment: .leading, spacing: 8) { - Text(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) - .font(.headline) - .frame(maxWidth: .infinity, alignment: .center) - - // Horizontal Split - HStack { - Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) - Spacer() - - Picker("", selection: Binding( - get: { viewModel.selectedHSplitPreset }, - set: { viewModel.selectHSplitPreset($0) } - )) { - // TODO: Loop through CycleSize.sortedSizes if available in your project - Text("50 / 50").tag(Optional(CycleSize.oneHalf)) - Text("Other").tag(Optional.none) - } - .labelsHidden() - .frame(width: 110) - - if viewModel.selectedHSplitPreset == nil { - TextField("", value: $viewModel.horizontalSplitRatio, formatter: percentFormatter) - .frame(width: 45) - .multilineTextAlignment(.trailing) - } - } - - // Vertical Split - HStack { - Text(NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) - Spacer() - - Picker("", selection: Binding( - get: { viewModel.selectedVSplitPreset }, - set: { viewModel.selectVSplitPreset($0) } - )) { - Text("50 / 50").tag(Optional(CycleSize.oneHalf)) - Text("Other").tag(Optional.none) - } - .labelsHidden() - .frame(width: 110) - - if viewModel.selectedVSplitPreset == nil { - TextField("", value: $viewModel.verticalSplitRatio, formatter: percentFormatter) - .frame(width: 45) - .multilineTextAlignment(.trailing) - } - } - - Toggle(NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), isOn: $viewModel.halvesPreserveOtherAxisSize) - .help(NSLocalizedString("Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back.", tableName: "Main", value: "", comment: "")) - - Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) - .help(NSLocalizedString("After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position.", tableName: "Main", value: "", comment: "")) - } } - .padding(15) - .frame(width: 380) } - // MARK: - Formatters private var integerFormatter: NumberFormatter { let formatter = NumberFormatter() formatter.allowsFloats = false formatter.minimum = 1 return formatter } - - private var percentFormatter: NumberFormatter { - let formatter = NumberFormatter() - formatter.allowsFloats = false - formatter.minimum = 1 - formatter.maximum = 99 - return formatter - } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index 0c672030d..b597e5d28 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -257,7 +257,7 @@ class ShortcutsViewController: NSViewController { ShortcutCategory(actions: [.topLeftNinth, .topLeftTwelfth, .topLeftSixteenth]) ] - let extraGroup = CategoryGroup(title: "Extras", categories: extraCategories, isCollapsible: true) + let extraGroup = CategoryGroup(title: "Extra", categories: extraCategories, isCollapsible: true) let standardGroup = CategoryGroup(title: "", categories: standardCategories, isCollapsible: false) let moreGroup = CategoryGroup(title: "⋯", categories: moreCategories, subGroups: [extraGroup], isCollapsible: true) diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 09fce5df3..135ae8c5e 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -39207,6 +39207,9 @@ } } } + }, + "Show Extra shortcuts in menu" : { + }, "Show stacked window list on hover" : { @@ -39941,6 +39944,9 @@ } } } + }, + "Stacked Windows" : { + }, "STb-JK-oB1.title" : { "comment" : "Class = \"NSWindow\"; title = \"Rectangle Settings\"; ObjectID = \"STb-JK-oB1\";", @@ -41370,43 +41376,43 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fenster in Spalten" } }, "en" : { "stringUnit" : { - "state" : "new", - "value" : "Tile Windows in Columns" + "state" : "translated", + "value" : "Tile in Columns" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ventanas en columnas" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ventanas en columnas" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fenêtres en colonnes" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ウインドウを列に並べる" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "按列平铺窗口" } } @@ -41417,43 +41423,43 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fenster in Zeilen" } }, "en" : { "stringUnit" : { - "state" : "new", - "value" : "Tile Windows in Rows" + "state" : "translated", + "value" : "Tile in Rows" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ventanas en filas" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ventanas en filas" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fenêtres en lignes" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ウインドウを行に並べる" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "按行平铺窗口" } } @@ -46997,6 +47003,9 @@ } } } + }, + "Window Sizing" : { + }, "windowSizeWarningMessage" : { "comment" : "Explains that an app can prevent a window from shrinking to the requested layout", From 6498593ed7a4ea9d29218bfdd3215de6a77d6df9 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Tue, 22 Sep 2026 15:04:56 -0400 Subject: [PATCH 38/79] Moving configure buttons into place for extra settings --- Rectangle.xcodeproj/project.pbxproj | 4 + .../SettingsWindow/BehaviorSettingsView.swift | 69 +++++------ .../SettingsWindow/ExtraSettings.swift | 107 +++++++++--------- .../SettingsWindow/PopoverButton.swift | 61 ++++++++++ .../ShortcutsViewController.swift | 79 ++++++++++++- 5 files changed, 235 insertions(+), 85 deletions(-) create mode 100644 Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index c6f7bfd2e..4edd73c9c 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -146,6 +146,7 @@ 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */; }; 98ED704F306180AD0077BD10 /* SnapAreaSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */; }; 98ED70533062D3860077BD10 /* ExtraSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED70523062D3810077BD10 /* ExtraSettings.swift */; }; + 98ED73AA3062FCD20077BD10 /* PopoverButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73A93062FCD20077BD10 /* PopoverButton.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -383,6 +384,7 @@ 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsViewModel.swift; sourceTree = ""; }; 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapAreaSettingsView.swift; sourceTree = ""; }; 98ED70523062D3810077BD10 /* ExtraSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettings.swift; sourceTree = ""; }; + 98ED73A93062FCD20077BD10 /* PopoverButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverButton.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -817,6 +819,7 @@ 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */, 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, 98ED70523062D3810077BD10 /* ExtraSettings.swift */, + 98ED73A93062FCD20077BD10 /* PopoverButton.swift */, 98ED7049306171650077BD10 /* AppSettingsView.swift */, 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */, @@ -1086,6 +1089,7 @@ 98ED703E305DC12D0077BD10 /* MASShortcutViewRepresentable.swift in Sources */, B4521F932BD7CEFB00FD43CC /* ChangeWindowDimensionCalculation.swift in Sources */, 9821402922B3889100ABFB3F /* LowerLeftCalculation.swift in Sources */, + 98ED73AA3062FCD20077BD10 /* PopoverButton.swift in Sources */, 7BE578EF2C5BF4EE0083DAE3 /* CycleSize.swift in Sources */, 9821402122B3884600ABFB3F /* BottomHalfCalculation.swift in Sources */, 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */, diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 25a91c58b..2b6241579 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -25,6 +25,7 @@ class BehaviorSettingsViewController: NSViewController { struct BehaviorSettingsView: View { @StateObject private var viewModel = BehaviorSettingsViewModel() + @State private var isMaximizeExpanded = false // Controls disclosure state var body: some View { Form { @@ -100,6 +101,39 @@ struct BehaviorSettingsView: View { Toggle(NSLocalizedString("Show Extra shortcuts in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) } + // MARK: - Maximize (Disclosure Section) + Section { + DisclosureGroup("Maximize Settings", isExpanded: $isMaximizeExpanded) { + VStack(alignment: .leading, spacing: 10) { + if viewModel.showCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } + + Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + + VStack(alignment: .leading, spacing: 2) { + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Text("Hold any modifier key or use the window menu for default macOS behavior") + .font(.caption) + .foregroundColor(.secondary) + } + + if viewModel.showCombinedDisplayMode { + VStack(alignment: .leading, spacing: 2) { + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") + .font(.caption) + .foregroundColor(.secondary) + } + } + + Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) + } + .padding(.top, 4) + } + } + // MARK: - Todo Mode Section { HStack { @@ -175,36 +209,7 @@ struct BehaviorSettingsView: View { } } - Section { - if viewModel.showCursorScreenDetection { - Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) - } - - Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) - Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - - VStack(alignment: .leading, spacing: 2) { - Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) - Text("Hold any modifier key or use the window menu for default macOS behavior") - .font(.caption) - .foregroundColor(.secondary) - } - - if viewModel.showCombinedDisplayMode { - VStack(alignment: .leading, spacing: 2) { - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") - .font(.caption) - .foregroundColor(.secondary) - } - } - - Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) - - } header: { - Text("Maximize") - } - + // MARK: Stacked Windows Section { VStack(alignment: .leading, spacing: 8) { Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) @@ -299,14 +304,12 @@ struct BehaviorSettingsView: View { Text("Stage Manager") } } - - // MARK: - Footer Actions - ExtraSettingsSections() } .formStyle(.grouped) .frame(width: 500) .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) + .animation(.easeInOut(duration: 0.2), value: isMaximizeExpanded) } private var percentFormatter: NumberFormatter { diff --git a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift index bb73233f4..a365dd0c0 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift @@ -1,13 +1,8 @@ /// ExtraSettings.swift import SwiftUI -import Combine -import MASShortcut // Required for MASShortcutViewRepresentable -// MARK: - View Model - -final class ExtraSettingsViewModel: ObservableObject { - +final class TileSettingsViewModel: ObservableObject { @Published var tileColumnsMaxWindows: Int { didSet { Defaults.tileColumnsMaxWindows.value = tileColumnsMaxWindows } } @@ -15,70 +10,80 @@ final class ExtraSettingsViewModel: ObservableObject { didSet { Defaults.tileRowsMaxWindows.value = tileRowsMaxWindows } } + init() { + self.tileColumnsMaxWindows = Defaults.tileColumnsMaxWindows.value + self.tileRowsMaxWindows = Defaults.tileRowsMaxWindows.value + } +} + +final class WindowSizingSettingsViewModel: ObservableObject { @Published var widthStepSize: Int { didSet { Defaults.widthStepSize.value = Float(widthStepSize) } } init() { - self.tileColumnsMaxWindows = Defaults.tileColumnsMaxWindows.value - self.tileRowsMaxWindows = Defaults.tileRowsMaxWindows.value self.widthStepSize = Int(Defaults.widthStepSize.value) } - } -// MARK: - SwiftUI View +// MARK: - Shared Helpers -import SwiftUI +private var integerFormatter: NumberFormatter { + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + return formatter +} -struct ExtraSettingsSections: View { - @StateObject private var viewModel = ExtraSettingsViewModel() +// MARK: - Standalone Popover Views + +struct TileSettingsView: View { + @StateObject private var viewModel = TileSettingsViewModel() var body: some View { - Group { - Section { - Grid(alignment: .leading, horizontalSpacing: 12, verticalSpacing: 8) { - GridRow { - Text(NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "")) - Stepper(value: $viewModel.tileColumnsMaxWindows, in: 1...Int.max) { - TextField("", value: $viewModel.tileColumnsMaxWindows, formatter: integerFormatter) - .frame(width: 50) - .multilineTextAlignment(.trailing) - } - } - GridRow { - Text(NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "")) - Stepper(value: $viewModel.tileRowsMaxWindows, in: 1...Int.max) { - TextField("", value: $viewModel.tileRowsMaxWindows, formatter: integerFormatter) - .frame(width: 50) - .multilineTextAlignment(.trailing) - } + VStack(alignment: .leading, spacing: 12) { + Text(NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "")) + .font(.headline) + + Grid(alignment: .leading, horizontalSpacing: 12, verticalSpacing: 8) { + GridRow { + Text(NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "")) + Stepper(value: $viewModel.tileColumnsMaxWindows, in: 1...Int.max) { + TextField("", value: $viewModel.tileColumnsMaxWindows, formatter: integerFormatter) + .frame(width: 50) + .multilineTextAlignment(.trailing) } } - } header: { - Text(NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "")) - } - - // MARK: - Window Sizing Steps - Section { - HStack { - Text(NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) - Spacer() - TextField("", value: $viewModel.widthStepSize, formatter: integerFormatter) - .frame(width: 60) - .multilineTextAlignment(.trailing) + GridRow { + Text(NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "")) + Stepper(value: $viewModel.tileRowsMaxWindows, in: 1...Int.max) { + TextField("", value: $viewModel.tileRowsMaxWindows, formatter: integerFormatter) + .frame(width: 50) + .multilineTextAlignment(.trailing) + } } - } header: { - Text(NSLocalizedString("Window Sizing", tableName: "Main", value: "", comment: "")) } - } + .padding() } +} + +struct WindowSizingSettingsView: View { + @StateObject private var viewModel = WindowSizingSettingsViewModel() + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + Text(NSLocalizedString("Window Sizing", tableName: "Main", value: "", comment: "")) + .font(.headline) - private var integerFormatter: NumberFormatter { - let formatter = NumberFormatter() - formatter.allowsFloats = false - formatter.minimum = 1 - return formatter + HStack { + Text(NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) + Spacer() + TextField("", value: $viewModel.widthStepSize, formatter: integerFormatter) + .frame(width: 60) + .multilineTextAlignment(.trailing) + } + } + .padding() } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift b/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift new file mode 100644 index 000000000..eaa1f91a6 --- /dev/null +++ b/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift @@ -0,0 +1,61 @@ +import AppKit +import SwiftUI + +/// An NSButton subclass that manages displaying a SwiftUI view inside an NSPopover when clicked. +final class PopoverButton: NSButton, NSPopoverDelegate { + + private var popover: NSPopover? + private let rootView: Content + + // MARK: - Initializer + + init(title: String = "", image: NSImage? = nil, rootView: Content) { + self.rootView = rootView + super.init(frame: .zero) + + self.title = title + if let image = image { + self.image = image + } + + setupButton() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Setup + + private func setupButton() { + target = self + action = #selector(togglePopover(_:)) + } + + // MARK: - Popover Management + + @objc private func togglePopover(_ sender: Any?) { + if let popover = popover, popover.isShown { + popover.performClose(sender) + } else { + showPopover() + } + } + + private func showPopover() { + let popover = NSPopover() + popover.behavior = .transient + popover.animates = true + popover.contentViewController = NSHostingController(rootView: rootView) + popover.delegate = self + + popover.show(relativeTo: bounds, of: self, preferredEdge: .minY) + self.popover = popover + } + + // MARK: - NSPopoverDelegate + + func popoverDidClose(_ notification: Notification) { + self.popover = nil + } +} diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index b597e5d28..e9ea1dcdb 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -81,12 +81,53 @@ final class ShortcutSectionCellView: NSTableCellView { } } +// MARK: - Action Button Configuration + +struct ActionButtonConfig { + let iconName: String + let popoverMessage: String + + init(iconName: String = "info.circle", popoverMessage: String) { + self.iconName = iconName + self.popoverMessage = popoverMessage + } +} + +import Cocoa +import MASShortcut +import SwiftUI + +// MARK: - Action Button Registry + +enum ActionButtonRegistry { + /// Maps WindowAction to a factory closure that returns a configured NSButton/PopoverButton + static let buttons: [WindowAction: () -> NSButton] = [ + .tileRows: { + let button = PopoverButton( + image: NSImage(systemSymbolName: "gear", accessibilityDescription: "Information"), + rootView: TileSettingsView() + ) + button.bezelStyle = .inline + button.isBordered = false + button.contentTintColor = .secondaryLabelColor + return button + } + ] +} + +// MARK: - ShortcutActionCellView Update + final class ShortcutActionCellView: NSTableCellView { static let identifier = NSUserInterfaceItemIdentifier("ShortcutActionCell") let iconImageView = NSImageView() let titleLabel = NSTextField(labelWithString: "") let shortcutView = MASShortcutView() + + private let buttonContainerView = NSView() + private var currentActionButton: NSButton? + + private var shortcutTrailingConstraint: NSLayoutConstraint? override init(frame frameRect: NSRect) { super.init(frame: frameRect) @@ -113,17 +154,27 @@ final class ShortcutActionCellView: NSTableCellView { iconImageView.setContentCompressionResistancePriority(.required, for: .horizontal) shortcutView.translatesAutoresizingMaskIntoConstraints = false + buttonContainerView.translatesAutoresizingMaskIntoConstraints = false addSubview(titleLabel) addSubview(iconImageView) addSubview(shortcutView) + addSubview(buttonContainerView) + + let trailingConstraint = shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66) + self.shortcutTrailingConstraint = trailingConstraint NSLayoutConstraint.activate([ - shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), + trailingConstraint, shortcutView.centerYAnchor.constraint(equalTo: centerYAnchor), shortcutView.widthAnchor.constraint(equalToConstant: 160), shortcutView.heightAnchor.constraint(equalToConstant: 19), + buttonContainerView.leadingAnchor.constraint(equalTo: shortcutView.trailingAnchor, constant: 8), + buttonContainerView.centerYAnchor.constraint(equalTo: centerYAnchor), + buttonContainerView.widthAnchor.constraint(equalToConstant: 20), + buttonContainerView.heightAnchor.constraint(equalToConstant: 20), + iconImageView.trailingAnchor.constraint(equalTo: shortcutView.leadingAnchor, constant: -16), iconImageView.centerYAnchor.constraint(equalTo: centerYAnchor), iconImageView.widthAnchor.constraint(equalToConstant: 21), @@ -138,6 +189,10 @@ final class ShortcutActionCellView: NSTableCellView { override func prepareForReuse() { super.prepareForReuse() shortcutView.associatedUserDefaultsKey = nil + + // Clear subviews in container to prevent reuse leaks + currentActionButton?.removeFromSuperview() + currentActionButton = nil } func configure(with action: WindowAction, recordingObserver: ShortcutRecordingObserver) { @@ -153,6 +208,28 @@ final class ShortcutActionCellView: NSTableCellView { shortcutView.associatedUserDefaultsKey = nil shortcutView.setAssociatedUserDefaultsKey(action.name, withTransformerName: MASDictionaryTransformerName) recordingObserver.observe([shortcutView]) + + // Remove old button if existing + currentActionButton?.removeFromSuperview() + + // Construct dynamic button if registered for this action + if let buttonFactory = ActionButtonRegistry.buttons[action] { + let button = buttonFactory() + button.translatesAutoresizingMaskIntoConstraints = false + buttonContainerView.addSubview(button) + + NSLayoutConstraint.activate([ + button.topAnchor.constraint(equalTo: buttonContainerView.topAnchor), + button.bottomAnchor.constraint(equalTo: buttonContainerView.bottomAnchor), + button.leadingAnchor.constraint(equalTo: buttonContainerView.leadingAnchor), + button.trailingAnchor.constraint(equalTo: buttonContainerView.trailingAnchor) + ]) + + self.currentActionButton = button + buttonContainerView.isHidden = false + } else { + buttonContainerView.isHidden = true + } } } From 3d5b0446b61e2ed6f170aa223483a303752e1cce Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 09:24:37 -0400 Subject: [PATCH 39/79] Add settings popover for specific window action shortcuts --- .../SettingsWindow/ExtraSettings.swift | 226 ++++++++++++------ .../SettingsWindow/PopoverButton.swift | 39 ++- .../ShortcutsViewController.swift | 92 +++---- Rectangle/mul.lproj/Main.xcstrings | 3 - 4 files changed, 202 insertions(+), 158 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift index a365dd0c0..3c93af052 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift @@ -1,89 +1,177 @@ /// ExtraSettings.swift -import SwiftUI +import AppKit -final class TileSettingsViewModel: ObservableObject { - @Published var tileColumnsMaxWindows: Int { - didSet { Defaults.tileColumnsMaxWindows.value = tileColumnsMaxWindows } +private var integerFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + return formatter +}() + +// MARK: - TileSettingsView + +final class TileSettingsView: NSView, NSTextFieldDelegate { + + private let titleLabel: NSTextField = { + let label = NSTextField(labelWithString: NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "")) + label.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) + return label + }() + + private let columnsLabel = NSTextField(labelWithString: NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "")) + private let columnsTextField = NSTextField() + private let columnsStepper = NSStepper() + + private let rowsLabel = NSTextField(labelWithString: NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "")) + private let rowsTextField = NSTextField() + private let rowsStepper = NSStepper() + + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + setupViews() } - @Published var tileRowsMaxWindows: Int { - didSet { Defaults.tileRowsMaxWindows.value = tileRowsMaxWindows } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupViews() } - init() { - self.tileColumnsMaxWindows = Defaults.tileColumnsMaxWindows.value - self.tileRowsMaxWindows = Defaults.tileRowsMaxWindows.value + private func setupViews() { + // --- Setup Column Controls --- + columnsTextField.formatter = integerFormatter + columnsTextField.alignment = .right + columnsTextField.delegate = self + columnsTextField.integerValue = Defaults.tileColumnsMaxWindows.value + columnsTextField.translatesAutoresizingMaskIntoConstraints = false + columnsTextField.widthAnchor.constraint(equalToConstant: 50).isActive = true + + configureStepper(columnsStepper, value: Defaults.tileColumnsMaxWindows.value) + columnsStepper.target = self + columnsStepper.action = #selector(columnsStepperChanged(_:)) + + let columnsRow = NSStackView(views: [columnsLabel, NSView(), columnsTextField, columnsStepper]) + columnsRow.orientation = .horizontal + columnsRow.alignment = .centerY + columnsRow.spacing = 8 + + // --- Setup Row Controls --- + rowsTextField.formatter = integerFormatter + rowsTextField.alignment = .right + rowsTextField.delegate = self + rowsTextField.integerValue = Defaults.tileRowsMaxWindows.value + rowsTextField.translatesAutoresizingMaskIntoConstraints = false + rowsTextField.widthAnchor.constraint(equalToConstant: 50).isActive = true + + configureStepper(rowsStepper, value: Defaults.tileRowsMaxWindows.value) + rowsStepper.target = self + rowsStepper.action = #selector(rowsStepperChanged(_:)) + + let rowsRow = NSStackView(views: [rowsLabel, NSView(), rowsTextField, rowsStepper]) + rowsRow.orientation = .horizontal + rowsRow.alignment = .centerY + rowsRow.spacing = 8 + + // --- Main Vertical Stack Layout --- + let mainStack = NSStackView(views: [titleLabel, columnsRow, rowsRow]) + mainStack.orientation = .vertical + mainStack.alignment = .leading + mainStack.spacing = 12 + mainStack.translatesAutoresizingMaskIntoConstraints = false + + addSubview(mainStack) + + NSLayoutConstraint.activate([ + mainStack.topAnchor.constraint(equalTo: topAnchor, constant: 16), + mainStack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), + mainStack.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), + mainStack.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -16), + columnsRow.widthAnchor.constraint(equalTo: mainStack.widthAnchor), + rowsRow.widthAnchor.constraint(equalTo: mainStack.widthAnchor) + ]) } -} -final class WindowSizingSettingsViewModel: ObservableObject { - @Published var widthStepSize: Int { - didSet { Defaults.widthStepSize.value = Float(widthStepSize) } + private func configureStepper(_ stepper: NSStepper, value: Int) { + stepper.minValue = 1 + stepper.maxValue = Double(Int.max) + stepper.increment = 1 + stepper.valueWraps = false + stepper.integerValue = value } - init() { - self.widthStepSize = Int(Defaults.widthStepSize.value) + // MARK: - Actions + + @objc private func columnsStepperChanged(_ sender: NSStepper) { + let newValue = sender.integerValue + columnsTextField.integerValue = newValue + Defaults.tileColumnsMaxWindows.value = newValue } -} -// MARK: - Shared Helpers + @objc private func rowsStepperChanged(_ sender: NSStepper) { + let newValue = sender.integerValue + rowsTextField.integerValue = newValue + Defaults.tileRowsMaxWindows.value = newValue + } -private var integerFormatter: NumberFormatter { - let formatter = NumberFormatter() - formatter.allowsFloats = false - formatter.minimum = 1 - return formatter -} + // MARK: - NSTextFieldDelegate -// MARK: - Standalone Popover Views - -struct TileSettingsView: View { - @StateObject private var viewModel = TileSettingsViewModel() - - var body: some View { - VStack(alignment: .leading, spacing: 12) { - Text(NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "")) - .font(.headline) - - Grid(alignment: .leading, horizontalSpacing: 12, verticalSpacing: 8) { - GridRow { - Text(NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "")) - Stepper(value: $viewModel.tileColumnsMaxWindows, in: 1...Int.max) { - TextField("", value: $viewModel.tileColumnsMaxWindows, formatter: integerFormatter) - .frame(width: 50) - .multilineTextAlignment(.trailing) - } - } - GridRow { - Text(NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "")) - Stepper(value: $viewModel.tileRowsMaxWindows, in: 1...Int.max) { - TextField("", value: $viewModel.tileRowsMaxWindows, formatter: integerFormatter) - .frame(width: 50) - .multilineTextAlignment(.trailing) - } - } - } + func controlTextDidChange(_ obj: Notification) { + guard let textField = obj.object as? NSTextField else { return } + let val = max(1, textField.integerValue) + + if textField === columnsTextField { + columnsStepper.integerValue = val + Defaults.tileColumnsMaxWindows.value = val + } else if textField === rowsTextField { + rowsStepper.integerValue = val + Defaults.tileRowsMaxWindows.value = val } - .padding() } } -struct WindowSizingSettingsView: View { - @StateObject private var viewModel = WindowSizingSettingsViewModel() - - var body: some View { - VStack(alignment: .leading, spacing: 12) { - Text(NSLocalizedString("Window Sizing", tableName: "Main", value: "", comment: "")) - .font(.headline) - - HStack { - Text(NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) - Spacer() - TextField("", value: $viewModel.widthStepSize, formatter: integerFormatter) - .frame(width: 60) - .multilineTextAlignment(.trailing) - } - } - .padding() +// MARK: - WidthSettingsView + +final class WidthSettingsView: NSView, NSTextFieldDelegate { + + private let widthStepLabel = NSTextField(labelWithString: NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) + private let widthStepTextField = NSTextField() + + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + setupViews() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupViews() + } + + private func setupViews() { + widthStepTextField.formatter = integerFormatter + widthStepTextField.alignment = .right + widthStepTextField.delegate = self + widthStepTextField.integerValue = Int(Defaults.widthStepSize.value) + widthStepTextField.translatesAutoresizingMaskIntoConstraints = false + widthStepTextField.widthAnchor.constraint(equalToConstant: 60).isActive = true + + let rowStack = NSStackView(views: [widthStepLabel, NSView(), widthStepTextField]) + rowStack.orientation = .horizontal + rowStack.alignment = .centerY + + addSubview(rowStack) + + NSLayoutConstraint.activate([ + rowStack.topAnchor.constraint(equalTo: topAnchor, constant: 16), + rowStack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), + rowStack.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), + rowStack.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -16), + ]) + } + + // MARK: - NSTextFieldDelegate + + func controlTextDidChange(_ obj: Notification) { + let val = max(1, widthStepTextField.integerValue) + Defaults.widthStepSize.value = Float(val) } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift b/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift index eaa1f91a6..45243ab31 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift @@ -1,32 +1,17 @@ +/// PopoverButton.swift + import AppKit -import SwiftUI -/// An NSButton subclass that manages displaying a SwiftUI view inside an NSPopover when clicked. -final class PopoverButton: NSButton, NSPopoverDelegate { +final class PopoverButton: NSButton, NSPopoverDelegate { private var popover: NSPopover? - private let rootView: Content - - // MARK: - Initializer - - init(title: String = "", image: NSImage? = nil, rootView: Content) { - self.rootView = rootView - super.init(frame: .zero) - self.title = title - if let image = image { - self.image = image + var contentView: NSView? { + didSet { + setupButton() } - - setupButton() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") } - // MARK: - Setup - private func setupButton() { target = self action = #selector(togglePopover(_:)) @@ -43,13 +28,19 @@ final class PopoverButton: NSButton, NSPopoverDelegate { } private func showPopover() { + guard let contentView = contentView else { return } + + let controller = NSViewController() + controller.view = contentView + let popover = NSPopover() popover.behavior = .transient popover.animates = true - popover.contentViewController = NSHostingController(rootView: rootView) + popover.contentViewController = controller popover.delegate = self - - popover.show(relativeTo: bounds, of: self, preferredEdge: .minY) + + popover.show(relativeTo: bounds, of: self, preferredEdge: .maxX) + popover.animates = false self.popover = popover } diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index e9ea1dcdb..d34c30585 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -2,6 +2,7 @@ import Cocoa import MASShortcut +import SwiftUI final class ShortcutItem: NSObject { let action: WindowAction @@ -85,49 +86,25 @@ final class ShortcutSectionCellView: NSTableCellView { struct ActionButtonConfig { let iconName: String - let popoverMessage: String - - init(iconName: String = "info.circle", popoverMessage: String) { - self.iconName = iconName - self.popoverMessage = popoverMessage - } -} - -import Cocoa -import MASShortcut -import SwiftUI - -// MARK: - Action Button Registry - -enum ActionButtonRegistry { - /// Maps WindowAction to a factory closure that returns a configured NSButton/PopoverButton - static let buttons: [WindowAction: () -> NSButton] = [ - .tileRows: { - let button = PopoverButton( - image: NSImage(systemSymbolName: "gear", accessibilityDescription: "Information"), - rootView: TileSettingsView() - ) - button.bezelStyle = .inline - button.isBordered = false - button.contentTintColor = .secondaryLabelColor - return button - } - ] + let view: NSView } -// MARK: - ShortcutActionCellView Update - final class ShortcutActionCellView: NSTableCellView { static let identifier = NSUserInterfaceItemIdentifier("ShortcutActionCell") + static var actionButtonConfigs: [WindowAction: ActionButtonConfig] = [ + .largerWidth: ActionButtonConfig(iconName: "gear", view: WidthSettingsView()), + .tileRows: ActionButtonConfig(iconName: "gear", view: TileSettingsView()) + ] + let iconImageView = NSImageView() let titleLabel = NSTextField(labelWithString: "") let shortcutView = MASShortcutView() - - private let buttonContainerView = NSView() - private var currentActionButton: NSButton? + let popoverButton = PopoverButton() private var shortcutTrailingConstraint: NSLayoutConstraint? + private var activePopover: NSPopover? + private var currentConfig: ActionButtonConfig? override init(frame frameRect: NSRect) { super.init(frame: frameRect) @@ -154,12 +131,16 @@ final class ShortcutActionCellView: NSTableCellView { iconImageView.setContentCompressionResistancePriority(.required, for: .horizontal) shortcutView.translatesAutoresizingMaskIntoConstraints = false - buttonContainerView.translatesAutoresizingMaskIntoConstraints = false + + popoverButton.translatesAutoresizingMaskIntoConstraints = false + popoverButton.bezelStyle = .inline + popoverButton.isBordered = false + popoverButton.contentTintColor = .secondaryLabelColor addSubview(titleLabel) addSubview(iconImageView) addSubview(shortcutView) - addSubview(buttonContainerView) + addSubview(popoverButton) let trailingConstraint = shortcutView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66) self.shortcutTrailingConstraint = trailingConstraint @@ -170,10 +151,10 @@ final class ShortcutActionCellView: NSTableCellView { shortcutView.widthAnchor.constraint(equalToConstant: 160), shortcutView.heightAnchor.constraint(equalToConstant: 19), - buttonContainerView.leadingAnchor.constraint(equalTo: shortcutView.trailingAnchor, constant: 8), - buttonContainerView.centerYAnchor.constraint(equalTo: centerYAnchor), - buttonContainerView.widthAnchor.constraint(equalToConstant: 20), - buttonContainerView.heightAnchor.constraint(equalToConstant: 20), + popoverButton.leadingAnchor.constraint(equalTo: shortcutView.trailingAnchor, constant: 8), + popoverButton.centerYAnchor.constraint(equalTo: centerYAnchor), + popoverButton.widthAnchor.constraint(equalToConstant: 20), + popoverButton.heightAnchor.constraint(equalToConstant: 20), iconImageView.trailingAnchor.constraint(equalTo: shortcutView.leadingAnchor, constant: -16), iconImageView.centerYAnchor.constraint(equalTo: centerYAnchor), @@ -189,10 +170,9 @@ final class ShortcutActionCellView: NSTableCellView { override func prepareForReuse() { super.prepareForReuse() shortcutView.associatedUserDefaultsKey = nil - - // Clear subviews in container to prevent reuse leaks - currentActionButton?.removeFromSuperview() - currentActionButton = nil + activePopover?.close() + activePopover = nil + currentConfig = nil } func configure(with action: WindowAction, recordingObserver: ShortcutRecordingObserver) { @@ -209,26 +189,14 @@ final class ShortcutActionCellView: NSTableCellView { shortcutView.setAssociatedUserDefaultsKey(action.name, withTransformerName: MASDictionaryTransformerName) recordingObserver.observe([shortcutView]) - // Remove old button if existing - currentActionButton?.removeFromSuperview() - - // Construct dynamic button if registered for this action - if let buttonFactory = ActionButtonRegistry.buttons[action] { - let button = buttonFactory() - button.translatesAutoresizingMaskIntoConstraints = false - buttonContainerView.addSubview(button) - - NSLayoutConstraint.activate([ - button.topAnchor.constraint(equalTo: buttonContainerView.topAnchor), - button.bottomAnchor.constraint(equalTo: buttonContainerView.bottomAnchor), - button.leadingAnchor.constraint(equalTo: buttonContainerView.leadingAnchor), - button.trailingAnchor.constraint(equalTo: buttonContainerView.trailingAnchor) - ]) - - self.currentActionButton = button - buttonContainerView.isHidden = false + if let config = Self.actionButtonConfigs[action] { + self.currentConfig = config + popoverButton.image = NSImage(systemSymbolName: config.iconName, accessibilityDescription: "Information") + popoverButton.contentView = config.view + popoverButton.isHidden = false } else { - buttonContainerView.isHidden = true + self.currentConfig = nil + popoverButton.isHidden = true } } } diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 135ae8c5e..15b02d3d9 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -47003,9 +47003,6 @@ } } } - }, - "Window Sizing" : { - }, "windowSizeWarningMessage" : { "comment" : "Explains that an app can prevent a window from shrinking to the requested layout", From 58fdf109ad50722eda7199eeec9c16c4366ac9bf Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 09:35:44 -0400 Subject: [PATCH 40/79] Minor code clean up --- .../ShortcutsViewController.swift | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index d34c30585..166e62173 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -432,23 +432,20 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { - if let group = item as? CategoryGroup { - guard group.isCollapsible else { return false } - - let now = ProcessInfo.processInfo.systemUptime + guard let group = item as? CategoryGroup else { return true } + guard group.isCollapsible else { return false } + + let now = ProcessInfo.processInfo.systemUptime + + if now - lastGroupToggleTime > 0.10 { + lastGroupToggleTime = now - // Ignore calls occurring within 100 ms of the last toggle - if now - lastGroupToggleTime > 0.10 { - lastGroupToggleTime = now - - if outlineView.isItemExpanded(item) { - outlineView.animator().collapseItem(item) - } else { - outlineView.animator().expandItem(item) - } + if outlineView.isItemExpanded(item) { + outlineView.animator().collapseItem(item) + } else { + outlineView.animator().expandItem(item) } - return false } - return true + return false } } From 6b8ae806927c6d27479735d15813f4f86eff66b8 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 09:47:09 -0400 Subject: [PATCH 41/79] Only expand/collapse when title is clicked, not entire header --- .../ShortcutsViewController.swift | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift index 166e62173..6d509fda5 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift @@ -53,6 +53,7 @@ final class ShortcutSectionCellView: NSTableCellView { static let identifier = NSUserInterfaceItemIdentifier("ShortcutSectionCell") let titleLabel = NSTextField(labelWithString: "") + var onTitleClick: (() -> Void)? override init(frame frameRect: NSRect) { super.init(frame: frameRect) @@ -75,10 +76,19 @@ final class ShortcutSectionCellView: NSTableCellView { titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -4), titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor) ]) + + // Add gesture recognizer specifically to the title text label + let clickGesture = NSClickGestureRecognizer(target: self, action: #selector(handleTitleClick)) + titleLabel.addGestureRecognizer(clickGesture) + } + + @objc private func handleTitleClick() { + onTitleClick?() } - func configure(title: String) { + func configure(title: String, onTitleClick: (() -> Void)? = nil) { titleLabel.stringValue = title + self.onTitleClick = onTitleClick } } @@ -355,12 +365,23 @@ extension ShortcutsViewController: NSOutlineViewDataSource { // MARK: - NSOutlineViewDelegate +// MARK: - NSOutlineViewDelegate + extension ShortcutsViewController: NSOutlineViewDelegate { func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { if let group = item as? CategoryGroup { let cell = outlineView.makeView(withIdentifier: ShortcutSectionCellView.identifier, owner: self) as? ShortcutSectionCellView ?? ShortcutSectionCellView() cell.identifier = ShortcutSectionCellView.identifier - cell.configure(title: group.title) + + cell.configure(title: group.title) { [weak self, weak group] in + guard let self = self, let group = group, group.isCollapsible else { return } + + if self.outlineView.isItemExpanded(group) { + self.outlineView.animator().collapseItem(group) + } else { + self.outlineView.animator().expandItem(group) + } + } return cell } @@ -418,11 +439,9 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } private func scheduleScrollViewUpdate() { - // Defer execution until NSOutlineView completes its internal row animation and index updates DispatchQueue.main.async { [weak self] in guard let self = self else { return } - // Recalculate document frame height safely after row changes have finalized if let documentView = self.scrollView.documentView { documentView.frame.size.height = self.outlineView.intrinsicContentSize.height } @@ -430,22 +449,4 @@ extension ShortcutsViewController: NSOutlineViewDelegate { self.scrollView.reflectScrolledClipView(self.scrollView.contentView) } } - - func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool { - guard let group = item as? CategoryGroup else { return true } - guard group.isCollapsible else { return false } - - let now = ProcessInfo.processInfo.systemUptime - - if now - lastGroupToggleTime > 0.10 { - lastGroupToggleTime = now - - if outlineView.isItemExpanded(item) { - outlineView.animator().collapseItem(item) - } else { - outlineView.animator().expandItem(item) - } - } - return false - } } From 7566696742d992a4d24d187bcec1d1ab6d186b4c Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 10:18:07 -0400 Subject: [PATCH 42/79] Better initial window sizing --- .../SettingsWindow/AppSettingsView.swift | 2 + .../SettingsWindow/AppSettingsViewModel.swift | 2 + .../SettingsWindow/BehaviorSettingsView.swift | 2 + .../BehaviorSettingsViewModel.swift | 2 + .../MASShortcutViewRepresentable.swift | 2 + .../SettingsWindowController.swift | 69 ++++++++++++++----- .../SettingsWindow/SnapAreaSettingsView.swift | 2 +- 7 files changed, 61 insertions(+), 20 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift index 1eecfb739..39054170e 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift @@ -1,3 +1,5 @@ +/// AppSettingsView.swift + import AppKit import SwiftUI diff --git a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift index 3111f3bd6..1ca4e45a5 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift @@ -1,3 +1,5 @@ +/// AppSettingsViewModel.swift + import SwiftUI import AppKit diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 2b6241579..2939ea255 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -1,3 +1,5 @@ +/// BehaviorSettingsView.swift + import AppKit import SwiftUI diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift index f5c703b7b..b21980d2d 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -1,3 +1,5 @@ +/// BehaviorSettingsViewModel.swift + import SwiftUI import AppKit diff --git a/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift b/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift index f95b162f3..37df72409 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift @@ -1,3 +1,5 @@ +/// MASShortcutViewRepresentable.swift + import SwiftUI import MASShortcut diff --git a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift index 3b3da0343..b9645c1a7 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift @@ -1,6 +1,7 @@ /// SettingsWindowController.swift import AppKit +import SwiftUI class SettingsWindowController: NSWindowController { @@ -10,8 +11,11 @@ class SettingsWindowController: NSWindowController { window.styleMask = [.titled, .closable, .miniaturizable, .resizable] window.title = SettingsTabViewController.Tab.shortcuts.label - window.setContentSize(SettingsTabViewController.Tab.shortcuts.defaultSize) - window.minSize = NSSize(width: 420, height: 350) + + let initialTab = SettingsTabViewController.Tab.shortcuts + let initialSize = initialTab.defaultSize ?? initialTab.makeViewController().view.fittingSize + window.setContentSize(initialSize) + window.minSize = NSSize(width: 500, height: 350) window.center() self.init(window: window) @@ -44,14 +48,10 @@ class SettingsTabViewController: NSTabViewController { } } - var defaultSize: NSSize { + var defaultSize: NSSize? { switch self { case .shortcuts: return NSSize(width: 500, height: 540) - case .snapAreas: return NSScreen.portraitDisplayConnected - ? NSSize(width: 500, height: 860) - : NSSize(width: 500, height: 616) - case .behavior: return NSSize(width: 500, height: 550) - case .appSettings: return NSSize(width: 500, height: 442) + default: return nil } } @@ -97,24 +97,55 @@ class SettingsTabViewController: NSTabViewController { } } - private func resizeWindow(to newSize: NSSize, animated: Bool) { + private func tabDidSwitch(to item: NSTabViewItem, at index: Int) { + guard let window = view.window, let viewController = item.viewController else { return } + + window.title = item.label + + if let savedSize = savedTabSizes[index] { + resizeWindow(toFrameSize: savedSize, animated: true) + } else if Tab.allCases.indices.contains(index) { + let tab = Tab.allCases[index] + + if let explicitSize = tab.defaultSize { + resizeWindow(toContentSize: explicitSize, animated: true) + } else { + let dynamicSize = calculateContentSize(for: viewController) + resizeWindow(toContentSize: dynamicSize, animated: true) + } + } + } + + private func calculateContentSize(for vc: NSViewController) -> NSSize { + _ = vc.view // Ensure the view hierarchy is loaded + + if vc.preferredContentSize != .zero { + return vc.preferredContentSize + } + + let fitting = vc.view.fittingSize + if fitting != .zero { + return fitting + } + + return vc.view.bounds.size + } + + private func resizeWindow(toFrameSize targetFrameSize: NSSize, animated: Bool) { guard let window = view.window else { return } var frame = window.frame - frame.origin.y -= (newSize.height - frame.size.height) - frame.size = newSize + frame.origin.y -= (targetFrameSize.height - frame.size.height) + frame.size = targetFrameSize window.setFrame(frame, display: true, animate: animated) } - private func tabDidSwitch(to item: NSTabViewItem, at index: Int) { - view.window?.title = item.label + private func resizeWindow(toContentSize contentSize: NSSize, animated: Bool) { + guard let window = view.window else { return } - if let savedSize = savedTabSizes[index] { - resizeWindow(to: savedSize, animated: true) - } else if Tab.allCases.indices.contains(index) { - let initialSize = Tab.allCases[index].defaultSize - resizeWindow(to: initialSize, animated: true) - } + // Convert inner content size to total window frame rect (accounting for title bar and toolbar) + let targetFrameRect = window.frameRect(forContentRect: NSRect(origin: .zero, size: contentSize)) + resizeWindow(toFrameSize: targetFrameRect.size, animated: animated) } } diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index f24d481a6..990028fb6 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -1,4 +1,4 @@ -/// SnapAreaView.swift +/// SnapAreaSettingsView.swift import SwiftUI import Combine From b30edd4df08a5fd13675b3311e4395917ffc3ffe Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 10:27:06 -0400 Subject: [PATCH 43/79] Updated Maximize Settings --- .../PrefsWindow/SettingsWindow/BehaviorSettingsView.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 2939ea255..de4564025 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -106,7 +106,8 @@ struct BehaviorSettingsView: View { // MARK: - Maximize (Disclosure Section) Section { DisclosureGroup("Maximize Settings", isExpanded: $isMaximizeExpanded) { - VStack(alignment: .leading, spacing: 10) { + VStack(alignment: .leading, spacing: 12) { + Divider() if viewModel.showCursorScreenDetection { Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) } @@ -114,6 +115,8 @@ struct BehaviorSettingsView: View { Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) + VStack(alignment: .leading, spacing: 2) { Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) Text("Hold any modifier key or use the window menu for default macOS behavior") @@ -129,8 +132,6 @@ struct BehaviorSettingsView: View { .foregroundColor(.secondary) } } - - Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) } .padding(.top, 4) } From c40c48788b6809f7f59a08d78f477bc52d1f281e Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 10:34:20 -0400 Subject: [PATCH 44/79] Some cleanup --- .../SettingsWindow/BehaviorSettingsView.swift | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index de4564025..e668f2d4d 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -1,16 +1,18 @@ -/// BehaviorSettingsView.swift +// BehaviorSettingsView.swift import AppKit import SwiftUI -class BehaviorSettingsViewController: NSViewController { - private var hostingController: NSHostingController! +// MARK: - AppKit View Controller Wrapper +final class BehaviorSettingsViewController: NSViewController { + private var hostingController: NSHostingController? override func viewDidLoad() { super.viewDidLoad() let swiftUIView = BehaviorSettingsView() - hostingController = NSHostingController(rootView: swiftUIView) + let hostingController = NSHostingController(rootView: swiftUIView) + self.hostingController = hostingController addChild(hostingController) hostingController.view.translatesAutoresizingMaskIntoConstraints = false @@ -25,10 +27,20 @@ class BehaviorSettingsViewController: NSViewController { } } +// MARK: - SwiftUI Settings View struct BehaviorSettingsView: View { @StateObject private var viewModel = BehaviorSettingsViewModel() @State private var isMaximizeExpanded = false // Controls disclosure state + // Cached formatter to avoid expensive re-allocations during view body updates + private static let percentFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.allowsFloats = false + formatter.minimum = 1 + formatter.maximum = 99 + return formatter + }() + var body: some View { Form { // MARK: - Cycle Sizes & Window Behaviors @@ -75,6 +87,7 @@ struct BehaviorSettingsView: View { } } + // MARK: - Gaps Section { VStack(alignment: .leading, spacing: 6) { HStack { @@ -97,6 +110,7 @@ struct BehaviorSettingsView: View { } } + // MARK: - Cursor & Display Rules Section { Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) Toggle(NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), isOn: $viewModel.halvesPreserveOtherAxisSize) @@ -212,7 +226,7 @@ struct BehaviorSettingsView: View { } } - // MARK: Stacked Windows + // MARK: - Stacked Windows Section { VStack(alignment: .leading, spacing: 8) { Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) @@ -237,7 +251,7 @@ struct BehaviorSettingsView: View { Spacer() if viewModel.selectedHSplitPreset == nil { - TextField("", value: $viewModel.horizontalSplitRatio, formatter: percentFormatter) + TextField("", value: $viewModel.horizontalSplitRatio, formatter: Self.percentFormatter) .frame(width: 45) .multilineTextAlignment(.trailing) } @@ -253,7 +267,6 @@ struct BehaviorSettingsView: View { } .labelsHidden() .frame(width: 110) - } HStack { @@ -261,7 +274,7 @@ struct BehaviorSettingsView: View { Spacer() if viewModel.selectedVSplitPreset == nil { - TextField("", value: $viewModel.verticalSplitRatio, formatter: percentFormatter) + TextField("", value: $viewModel.verticalSplitRatio, formatter: Self.percentFormatter) .frame(width: 45) .multilineTextAlignment(.trailing) } @@ -314,12 +327,4 @@ struct BehaviorSettingsView: View { .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) .animation(.easeInOut(duration: 0.2), value: isMaximizeExpanded) } - - private var percentFormatter: NumberFormatter { - let formatter = NumberFormatter() - formatter.allowsFloats = false - formatter.minimum = 1 - formatter.maximum = 99 - return formatter - } } From f2e0bbcccb4ac7fd161809281803f1674b0ef71f Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 10:35:33 -0400 Subject: [PATCH 45/79] Move todo up one --- .../SettingsWindow/BehaviorSettingsView.swift | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index e668f2d4d..0654952d4 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -117,40 +117,6 @@ struct BehaviorSettingsView: View { Toggle(NSLocalizedString("Show Extra shortcuts in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) } - // MARK: - Maximize (Disclosure Section) - Section { - DisclosureGroup("Maximize Settings", isExpanded: $isMaximizeExpanded) { - VStack(alignment: .leading, spacing: 12) { - Divider() - if viewModel.showCursorScreenDetection { - Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) - } - - Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) - Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - - Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) - - VStack(alignment: .leading, spacing: 2) { - Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) - Text("Hold any modifier key or use the window menu for default macOS behavior") - .font(.caption) - .foregroundColor(.secondary) - } - - if viewModel.showCombinedDisplayMode { - VStack(alignment: .leading, spacing: 2) { - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") - .font(.caption) - .foregroundColor(.secondary) - } - } - } - .padding(.top, 4) - } - } - // MARK: - Todo Mode Section { HStack { @@ -225,6 +191,40 @@ struct BehaviorSettingsView: View { .transition(.opacity.combined(with: .move(edge: .top))) } } + + // MARK: - Maximize (Disclosure Section) + Section { + DisclosureGroup("Maximize Settings", isExpanded: $isMaximizeExpanded) { + VStack(alignment: .leading, spacing: 12) { + Divider() + if viewModel.showCursorScreenDetection { + Toggle("Use cursor screen detection", isOn: $viewModel.useCursorScreenDetection) + } + + Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) + Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) + + Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) + + VStack(alignment: .leading, spacing: 2) { + Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) + Text("Hold any modifier key or use the window menu for default macOS behavior") + .font(.caption) + .foregroundColor(.secondary) + } + + if viewModel.showCombinedDisplayMode { + VStack(alignment: .leading, spacing: 2) { + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + .padding(.top, 4) + } + } // MARK: - Stacked Windows Section { From 3ab1ca15d2e03d39c35a4acde61c39e3192fd7d4 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 10:49:38 -0400 Subject: [PATCH 46/79] Move combined display mode setting --- .../SettingsWindow/BehaviorSettingsView.swift | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 0654952d4..f8d9dc001 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -115,6 +115,14 @@ struct BehaviorSettingsView: View { Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) Toggle(NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), isOn: $viewModel.halvesPreserveOtherAxisSize) Toggle(NSLocalizedString("Show Extra shortcuts in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) + if viewModel.showCombinedDisplayMode { + VStack(alignment: .leading, spacing: 2) { + Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) + Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") + .font(.caption) + .foregroundColor(.secondary) + } + } } // MARK: - Todo Mode @@ -212,15 +220,6 @@ struct BehaviorSettingsView: View { .font(.caption) .foregroundColor(.secondary) } - - if viewModel.showCombinedDisplayMode { - VStack(alignment: .leading, spacing: 2) { - Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) - Text("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.") - .font(.caption) - .foregroundColor(.secondary) - } - } } .padding(.top, 4) } From 1b2f5f11ac34eb48474a4984f23f36144acd81b9 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 13:29:51 -0400 Subject: [PATCH 47/79] Minor settings adjustments --- .../SettingsWindow/BehaviorSettingsViewModel.swift | 5 ++--- Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift index b21980d2d..75833467b 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -182,9 +182,8 @@ final class BehaviorSettingsViewModel: ObservableObject { self.verticalSplitRatio = vRatio self.halvesPreserveOtherAxisSize = Defaults.halvesPreserveOtherAxisSize.enabled - // Match existing ratios to presets or set as custom ("Other") - self.selectedHSplitPreset = CycleSize(rawValue: Int(hRatio)) - self.selectedVSplitPreset = CycleSize(rawValue: Int(vRatio)) + self.selectedHSplitPreset = CycleSize.matching(percentValue: hRatio) + self.selectedVSplitPreset = CycleSize.matching(percentValue: vRatio) setupObservers() } diff --git a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift index 3c93af052..afa8ea639 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift @@ -73,7 +73,7 @@ final class TileSettingsView: NSView, NSTextFieldDelegate { rowsRow.spacing = 8 // --- Main Vertical Stack Layout --- - let mainStack = NSStackView(views: [titleLabel, columnsRow, rowsRow]) + let mainStack = NSStackView(views: [titleLabel, rowsRow, columnsRow]) mainStack.orientation = .vertical mainStack.alignment = .leading mainStack.spacing = 12 From 4fa6eb0bc30012e8f7e96a5abe7b0a39fe189719 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 13:34:05 -0400 Subject: [PATCH 48/79] Fixing split ratio display --- .../PrefsWindow/SettingsWindow/BehaviorSettingsView.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index f8d9dc001..41b3fa1e4 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -251,7 +251,6 @@ struct BehaviorSettingsView: View { if viewModel.selectedHSplitPreset == nil { TextField("", value: $viewModel.horizontalSplitRatio, formatter: Self.percentFormatter) - .frame(width: 45) .multilineTextAlignment(.trailing) } @@ -265,7 +264,6 @@ struct BehaviorSettingsView: View { Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) } .labelsHidden() - .frame(width: 110) } HStack { @@ -274,7 +272,6 @@ struct BehaviorSettingsView: View { if viewModel.selectedVSplitPreset == nil { TextField("", value: $viewModel.verticalSplitRatio, formatter: Self.percentFormatter) - .frame(width: 45) .multilineTextAlignment(.trailing) } @@ -288,7 +285,6 @@ struct BehaviorSettingsView: View { Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) } .labelsHidden() - .frame(width: 110) } } } header: { From 0db53efa4425611adf1f329bf185cf51129d36d3 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 13:38:28 -0400 Subject: [PATCH 49/79] Put Sections into disclosure groups --- .../SettingsWindow/BehaviorSettingsView.swift | 138 ++++++++++-------- 1 file changed, 76 insertions(+), 62 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 41b3fa1e4..8d63df73c 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -30,7 +30,12 @@ final class BehaviorSettingsViewController: NSViewController { // MARK: - SwiftUI Settings View struct BehaviorSettingsView: View { @StateObject private var viewModel = BehaviorSettingsViewModel() - @State private var isMaximizeExpanded = false // Controls disclosure state + + // Disclosure states + @State private var isMaximizeExpanded = false + @State private var isStackedWindowsExpanded = false + @State private var isSideSplitRatiosExpanded = false + @State private var isStageManagerExpanded = false // Cached formatter to avoid expensive re-allocations during view body updates private static let percentFormatter: NumberFormatter = { @@ -227,92 +232,98 @@ struct BehaviorSettingsView: View { // MARK: - Stacked Windows Section { - VStack(alignment: .leading, spacing: 8) { - Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) - Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) + DisclosureGroup(NSLocalizedString("Stacked Windows", tableName: "Main", value: "", comment: ""), isExpanded: $isStackedWindowsExpanded) { + VStack(alignment: .leading, spacing: 8) { + Divider() + Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) + Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) - HStack { - Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) - Spacer() - MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) - .frame(width: 160, height: 19) + HStack { + Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) + Spacer() + MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) + .frame(width: 160, height: 19) + } } + .padding(.top, 4) } - } header: { - Text(NSLocalizedString("Stacked Windows", tableName: "Main", value: "", comment: "")) } // MARK: - Side Split Ratios Section { - VStack(alignment: .leading, spacing: 10) { - HStack { - Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) - Spacer() + DisclosureGroup(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: ""), isExpanded: $isSideSplitRatiosExpanded) { + VStack(alignment: .leading, spacing: 10) { + Divider() + HStack { + Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) + Spacer() - if viewModel.selectedHSplitPreset == nil { - TextField("", value: $viewModel.horizontalSplitRatio, formatter: Self.percentFormatter) - .multilineTextAlignment(.trailing) - } + if viewModel.selectedHSplitPreset == nil { + TextField("", value: $viewModel.horizontalSplitRatio, formatter: Self.percentFormatter) + .multilineTextAlignment(.trailing) + } - Picker("", selection: Binding( - get: { viewModel.selectedHSplitPreset }, - set: { viewModel.selectHSplitPreset($0) } - )) { - ForEach(CycleSize.sortedSizes, id: \.self) { size in - Text(size.title).tag(Optional(size)) + Picker("", selection: Binding( + get: { viewModel.selectedHSplitPreset }, + set: { viewModel.selectHSplitPreset($0) } + )) { + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Text(size.title).tag(Optional(size)) + } + Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) } - Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) + .labelsHidden() } - .labelsHidden() - } - HStack { - Text(NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) - Spacer() + HStack { + Text(NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) + Spacer() - if viewModel.selectedVSplitPreset == nil { - TextField("", value: $viewModel.verticalSplitRatio, formatter: Self.percentFormatter) - .multilineTextAlignment(.trailing) - } + if viewModel.selectedVSplitPreset == nil { + TextField("", value: $viewModel.verticalSplitRatio, formatter: Self.percentFormatter) + .multilineTextAlignment(.trailing) + } - Picker("", selection: Binding( - get: { viewModel.selectedVSplitPreset }, - set: { viewModel.selectVSplitPreset($0) } - )) { - ForEach(CycleSize.sortedSizes, id: \.self) { size in - Text(size.title).tag(Optional(size)) + Picker("", selection: Binding( + get: { viewModel.selectedVSplitPreset }, + set: { viewModel.selectVSplitPreset($0) } + )) { + ForEach(CycleSize.sortedSizes, id: \.self) { size in + Text(size.title).tag(Optional(size)) + } + Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) } - Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) + .labelsHidden() } - .labelsHidden() } + .padding(.top, 4) } - } header: { - Text(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) } // MARK: - Stage Manager if viewModel.stageCapable { Section { - VStack(alignment: .leading, spacing: 4) { - HStack { - Text("Recent apps area") - Slider( - value: $viewModel.stageSize, - in: 0...400, - onEditingChanged: { editing in - if !editing { viewModel.commitStageSize() } - } - ) - Text("\(Int(viewModel.stageSize)) px") - .frame(width: 45, alignment: .trailing) + DisclosureGroup("Stage Manager", isExpanded: $isStageManagerExpanded) { + VStack(alignment: .leading, spacing: 4) { + Divider() + HStack { + Text("Recent apps area") + Slider( + value: $viewModel.stageSize, + in: 0...400, + onEditingChanged: { editing in + if !editing { viewModel.commitStageSize() } + } + ) + Text("\(Int(viewModel.stageSize)) px") + .frame(width: 45, alignment: .trailing) + } + Text("If the area is too small, recent apps will be hidden") + .font(.caption) + .foregroundColor(.secondary) } - Text("If the area is too small, recent apps will be hidden") - .font(.caption) - .foregroundColor(.secondary) + .padding(.top, 4) } - } header: { - Text("Stage Manager") } } } @@ -321,5 +332,8 @@ struct BehaviorSettingsView: View { .animation(.easeInOut(duration: 0.2), value: viewModel.todoEnabled) .animation(.easeInOut(duration: 0.2), value: viewModel.subsequentExecutionMode) .animation(.easeInOut(duration: 0.2), value: isMaximizeExpanded) + .animation(.easeInOut(duration: 0.2), value: isStackedWindowsExpanded) + .animation(.easeInOut(duration: 0.2), value: isSideSplitRatiosExpanded) + .animation(.easeInOut(duration: 0.2), value: isStageManagerExpanded) } } From 7a39cd89aeca9eddf807e16feac8b026ee785338 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:07:39 -0400 Subject: [PATCH 50/79] symbols on disclosure groups, and cleaned up spacinog --- .../SettingsWindow/BehaviorSettingsView.swift | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 8d63df73c..7c8ee5dde 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -1,5 +1,3 @@ -// BehaviorSettingsView.swift - import AppKit import SwiftUI @@ -200,14 +198,14 @@ struct BehaviorSettingsView: View { .frame(width: 130, height: 22) } } - .padding(.leading, 18) + .padding(.leading, 12) .transition(.opacity.combined(with: .move(edge: .top))) } } // MARK: - Maximize (Disclosure Section) Section { - DisclosureGroup("Maximize Settings", isExpanded: $isMaximizeExpanded) { + DisclosureGroup(isExpanded: $isMaximizeExpanded) { VStack(alignment: .leading, spacing: 12) { Divider() if viewModel.showCursorScreenDetection { @@ -227,17 +225,30 @@ struct BehaviorSettingsView: View { } } .padding(.top, 4) + .padding(.leading, 12) + } label: { + Label("Maximize Settings", systemImage: "arrow.up.left.and.arrow.down.right") } } // MARK: - Stacked Windows Section { - DisclosureGroup(NSLocalizedString("Stacked Windows", tableName: "Main", value: "", comment: ""), isExpanded: $isStackedWindowsExpanded) { - VStack(alignment: .leading, spacing: 8) { + DisclosureGroup(isExpanded: $isStackedWindowsExpanded) { + VStack(alignment: .leading, spacing: 12) { Divider() - Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) - Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) - + VStack(alignment: .leading, spacing: 4) { + Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) + Text("This leaves a little space showing the window below and is best with gaps between windows") + .font(.caption) + .foregroundColor(.secondary) + } + Divider() + VStack(alignment: .leading, spacing: 4) { + Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) + Text("Hover cursor near the top left corner to show the list") + .font(.caption) + .foregroundColor(.secondary) + } HStack { Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) Spacer() @@ -246,14 +257,20 @@ struct BehaviorSettingsView: View { } } .padding(.top, 4) + .padding(.leading, 12) + } label: { + Label(NSLocalizedString("Stacked Windows", tableName: "Main", value: "", comment: ""), systemImage: "square.on.square") } } // MARK: - Side Split Ratios Section { - DisclosureGroup(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: ""), isExpanded: $isSideSplitRatiosExpanded) { + DisclosureGroup(isExpanded: $isSideSplitRatiosExpanded) { VStack(alignment: .leading, spacing: 10) { Divider() + Text("Configure the divide between side and corner actions") + .font(.caption) + .foregroundColor(.secondary) HStack { Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) Spacer() @@ -297,13 +314,16 @@ struct BehaviorSettingsView: View { } } .padding(.top, 4) + .padding(.leading, 12) + } label: { + Label(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: ""), systemImage: "rectangle.split.2x1") } } // MARK: - Stage Manager if viewModel.stageCapable { Section { - DisclosureGroup("Stage Manager", isExpanded: $isStageManagerExpanded) { + DisclosureGroup(isExpanded: $isStageManagerExpanded) { VStack(alignment: .leading, spacing: 4) { Divider() HStack { @@ -323,6 +343,9 @@ struct BehaviorSettingsView: View { .foregroundColor(.secondary) } .padding(.top, 4) + .padding(.leading, 12) + } label: { + Label("Stage Manager", systemImage: "squares.leading.rectangle") } } } From f133039db970de4758dc11647f9fe7a0787cb888 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:23:40 -0400 Subject: [PATCH 51/79] Move Animate windows setting into Behavior --- .../SettingsWindow/BehaviorSettingsView.swift | 5 ++-- .../BehaviorSettingsViewModel.swift | 29 +++++++------------ .../SettingsWindow/SnapAreaSettingsView.swift | 15 ++-------- Rectangle/mul.lproj/Main.xcstrings | 3 ++ 4 files changed, 19 insertions(+), 33 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 7c8ee5dde..201e24ab8 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -115,9 +115,10 @@ struct BehaviorSettingsView: View { // MARK: - Cursor & Display Rules Section { + Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) - Toggle(NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), isOn: $viewModel.halvesPreserveOtherAxisSize) - Toggle(NSLocalizedString("Show Extra shortcuts in menu", tableName: "Main", value: "", comment: ""), isOn: $viewModel.showAdditionalSizesInMenu) + Toggle("Preserve side axis size for half actions, similar to Windows", isOn: $viewModel.halvesPreserveOtherAxisSize) + Toggle("Show Extra shortcuts in menu", isOn: $viewModel.showAdditionalSizesInMenu) if viewModel.showCombinedDisplayMode { VStack(alignment: .leading, spacing: 2) { Toggle("Treat multiple displays as one", isOn: $viewModel.combinedDisplayMode) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift index 75833467b..7266c1f9f 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -62,6 +62,14 @@ final class BehaviorSettingsViewModel: ObservableObject { } } + @Published var experimentalAnimations: Bool { + didSet { + guard oldValue != experimentalAnimations else { return } + Defaults.experimentalWindowAnimations.enabled = experimentalAnimations + Notification.Name.windowAnimationPreferencesChanged.post() + } + } + @Published var combinedDisplayMode: Bool { didSet { Defaults.combinedDisplayMode.enabled = combinedDisplayMode @@ -162,6 +170,7 @@ final class BehaviorSettingsViewModel: ObservableObject { self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil self.autoMaximize = !Defaults.autoMaximize.userDisabled self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.experimentalAnimations = Defaults.experimentalWindowAnimations.enabled self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled self.repeatedMaximizeRestoresPrevious = Defaults.repeatedMaximizeRestoresPrevious.enabled @@ -204,6 +213,7 @@ final class BehaviorSettingsViewModel: ObservableObject { self.doubleClickTitleBar = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil self.autoMaximize = !Defaults.autoMaximize.userDisabled self.greenButtonOverride = Defaults.greenButtonOverride.enabled + self.experimentalAnimations = Defaults.experimentalWindowAnimations.enabled self.combinedDisplayMode = Defaults.combinedDisplayMode.userEnabled self.todoEnabled = Defaults.todo.userEnabled self.todoSidebarWidth = Defaults.todoSidebarWidth.value @@ -278,25 +288,6 @@ final class BehaviorSettingsViewModel: ObservableObject { aboutTodoWindowController?.showWindow(nil) } - func restoreDefaults() { - let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" - let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") - let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") - let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") - - let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) - if response == .alertThirdButtonReturn { return } - - let rectangleDefaults = (response == .alertFirstButtonReturn) - WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } - Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults - Notification.Name.changeDefaults.post() - - Defaults.portraitSnapAreas.typedValue = nil - Defaults.landscapeSnapAreas.typedValue = nil - Notification.Name.defaultSnapAreas.post() - } - func exportConfig() { Notification.Name.windowSnapping.post(object: false) let savePanel = NSSavePanel() diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift index 990028fb6..607392482 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift @@ -59,20 +59,12 @@ final class SnapAreaViewModel: ObservableObject { } } - @Published var experimentalAnimations: Bool = false { - didSet { - guard oldValue != experimentalAnimations else { return } - Defaults.experimentalWindowAnimations.enabled = experimentalAnimations - Notification.Name.windowAnimationPreferencesChanged.post() - } - } - @Published var footprintBlur: Bool = false { didSet { Defaults.footprintBlur.enabled = footprintBlur } } - + @Published var blurAppearance: BlurAppearance = .system { didSet { Defaults.blurAppearance.value = blurAppearance @@ -102,7 +94,6 @@ final class SnapAreaViewModel: ObservableObject { hapticFeedback = Defaults.hapticFeedbackOnSnap.userEnabled animateFootprint = Defaults.footprintAnimationDurationMultiplier.value > 0 footprintBlur = Defaults.footprintBlur.enabled - experimentalAnimations = Defaults.experimentalWindowAnimations.enabled blurAppearance = Defaults.blurAppearance.value missionControlDraggingDisabled = Defaults.missionControlDragging.userDisabled isPortraitConnected = NSScreen.portraitDisplayConnected @@ -168,12 +159,12 @@ struct SnapAreaSettingsView: View { } // Customization Options - Section { + Section { Toggle("Provide haptic feedback", isOn: $viewModel.hapticFeedback) Toggle("Animate footprint", isOn: $viewModel.animateFootprint) - Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) Toggle("Blur footprint", isOn: $viewModel.footprintBlur) + if viewModel.footprintBlur { Picker("Blur appearance", selection: $viewModel.blurAppearance) { Text("Follow System").tag(BlurAppearance.system) diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 15b02d3d9..8106f8bc5 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -34867,6 +34867,9 @@ }, "Preserve maximize state when moving across displays" : { + }, + "Preserve side axis size for half actions, similar to Windows" : { + }, "Press the shortcut repeatedly to cycle through all positions in the grid." : { "localizations" : { From 9b0fe1e6fba46a58d3e348eb4e9833befd89df7d Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:30:43 -0400 Subject: [PATCH 52/79] Fix show stacked window list on hover not reflecting keyboard shortcut toggling --- .../SettingsWindow/BehaviorSettingsViewModel.swift | 4 ++++ Rectangle/mul.lproj/Main.xcstrings | 6 ------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift index 7266c1f9f..3f3bd8c68 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -201,6 +201,9 @@ final class BehaviorSettingsViewModel: ObservableObject { Notification.Name.configImported.onPost { [weak self] _ in self?.reloadFromDefaults() } + Notification.Name.stackBadgeChanged.onPost { [weak self] _ in + self?.stackBadge = Defaults.stackBadge.userEnabled + } } func reloadFromDefaults() { @@ -219,6 +222,7 @@ final class BehaviorSettingsViewModel: ObservableObject { self.todoSidebarWidth = Defaults.todoSidebarWidth.value self.todoSidebarWidthUnit = Defaults.todoSidebarWidthUnit.value self.todoSidebarSide = Defaults.todoSidebarSide.value + self.stackBadge = Defaults.stackBadge.userEnabled self.stageSize = Double(Defaults.stageSize.value) } diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 8106f8bc5..ef11f26eb 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -34867,9 +34867,6 @@ }, "Preserve maximize state when moving across displays" : { - }, - "Preserve side axis size for half actions, similar to Windows" : { - }, "Press the shortcut repeatedly to cycle through all positions in the grid." : { "localizations" : { @@ -39210,9 +39207,6 @@ } } } - }, - "Show Extra shortcuts in menu" : { - }, "Show stacked window list on hover" : { From 19d354111c8df25bf53464fbb2c6c2b1daf72c3b Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:32:24 -0400 Subject: [PATCH 53/79] Wording --- Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 201e24ab8..03715ec7b 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -246,7 +246,7 @@ struct BehaviorSettingsView: View { Divider() VStack(alignment: .leading, spacing: 4) { Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) - Text("Hover cursor near the top left corner to show the list") + Text("Hover cursor near the top left corner of a window to show the list") .font(.caption) .foregroundColor(.secondary) } From 62bbdfb313be997734f2e82ec05b84a42bc3b884 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:33:25 -0400 Subject: [PATCH 54/79] shortcut recorder height --- Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift index 03715ec7b..3bc7a9b4c 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift @@ -254,7 +254,7 @@ struct BehaviorSettingsView: View { Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) Spacer() MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) - .frame(width: 160, height: 19) + .frame(width: 160, height: 24) } } .padding(.top, 4) From eaf17620f99d5fd3f9d6e02ca4925c559115c0db Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:40:46 -0400 Subject: [PATCH 55/79] Post additional sizes in menu setting change --- .../SettingsWindow/BehaviorSettingsViewModel.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift index 3f3bd8c68..1597b41e9 100644 --- a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift @@ -108,7 +108,10 @@ final class BehaviorSettingsViewModel: ObservableObject { } @Published var showAdditionalSizesInMenu: Bool { - didSet { Defaults.showAdditionalSizesInMenu.enabled = showAdditionalSizesInMenu } + didSet { + Defaults.showAdditionalSizesInMenu.enabled = showAdditionalSizesInMenu + Notification.Name.showAdditionalSizesInMenuChanged.post() + } } @Published var cyclingOverlapOffset: Bool { didSet { Defaults.cyclingOverlapOffset.enabled = cyclingOverlapOffset } From 2b586de1e35d778c8c05da846f238e86e37744b3 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 14:53:41 -0400 Subject: [PATCH 56/79] Moving things around --- Rectangle.xcodeproj/project.pbxproj | 20 +- .../xcshareddata/xcschemes/Rectangle.xcscheme | 2 +- Rectangle/Localizable.xcstrings | 183 ++++++++++++++++++ .../SettingsWindow/AppSettingsView.swift | 0 .../SettingsWindow/AppSettingsViewModel.swift | 0 .../SettingsWindow/BehaviorSettingsView.swift | 0 .../BehaviorSettingsViewModel.swift | 0 .../SettingsWindow/ExtraSettings.swift | 0 .../MASShortcutViewRepresentable.swift | 0 .../SettingsWindow/PopoverButton.swift | 0 .../SettingsWindowController.swift | 0 .../ShortcutsViewController.swift | 0 .../SettingsWindow/SnapAreaSettingsView.swift | 0 13 files changed, 197 insertions(+), 8 deletions(-) create mode 100644 Rectangle/Localizable.xcstrings rename Rectangle/{PrefsWindow => }/SettingsWindow/AppSettingsView.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/AppSettingsViewModel.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/BehaviorSettingsView.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/BehaviorSettingsViewModel.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/ExtraSettings.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/MASShortcutViewRepresentable.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/PopoverButton.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/SettingsWindowController.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/ShortcutsViewController.swift (100%) rename Rectangle/{PrefsWindow => }/SettingsWindow/SnapAreaSettingsView.swift (100%) diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 4edd73c9c..c0705efb7 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -147,6 +147,7 @@ 98ED704F306180AD0077BD10 /* SnapAreaSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */; }; 98ED70533062D3860077BD10 /* ExtraSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED70523062D3810077BD10 /* ExtraSettings.swift */; }; 98ED73AA3062FCD20077BD10 /* PopoverButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73A93062FCD20077BD10 /* PopoverButton.swift */; }; + 98ED73AE3064567B0077BD10 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -385,6 +386,7 @@ 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapAreaSettingsView.swift; sourceTree = ""; }; 98ED70523062D3810077BD10 /* ExtraSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettings.swift; sourceTree = ""; }; 98ED73A93062FCD20077BD10 /* PopoverButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverButton.swift; sourceTree = ""; }; + 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -696,6 +698,7 @@ 9824700C22AF9B7D0037B409 /* AppDelegate.swift */, 9824701022AF9B7E0037B409 /* Assets.xcassets */, 482E9E412EB1528D00D7928A /* AppIcon.icon */, + 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */, 9824701222AF9B7E0037B409 /* Main.storyboard */, 9824701522AF9B7E0037B409 /* Info.plist */, 981F27D02340E3E1006CD263 /* InternetAccessPolicy.plist */, @@ -724,6 +727,7 @@ AA49DD1029B8C1B100690E13 /* TitleBarManager.swift */, AA49DD2029B8C1B100690E13 /* GreenButtonManager.swift */, 98987AA62391890C00BE72C4 /* Logging */, + 98ED704D306179160077BD10 /* SettingsWindow */, 98910B3C2311304D0066EC23 /* PrefsWindow */, 989DA30C243FC0C3008C7AA4 /* WelcomeWindow */, 98C2755F231FF6AE009B9292 /* Snapping */, @@ -763,7 +767,6 @@ 98910B3C2311304D0066EC23 /* PrefsWindow */ = { isa = PBXGroup; children = ( - 98ED704D306179160077BD10 /* SettingsWindow */, 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */, 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, 98910B3D231130AF0066EC23 /* SettingsViewController.swift */, @@ -814,15 +817,15 @@ isa = PBXGroup; children = ( 98985838305C1B6400459AFF /* SettingsWindowController.swift */, - 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */, 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */, + 98ED70523062D3810077BD10 /* ExtraSettings.swift */, 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */, 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */, - 98ED70523062D3810077BD10 /* ExtraSettings.swift */, - 98ED73A93062FCD20077BD10 /* PopoverButton.swift */, 98ED7049306171650077BD10 /* AppSettingsView.swift */, 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */, + 98ED73A93062FCD20077BD10 /* PopoverButton.swift */, + 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */, ); path = SettingsWindow; sourceTree = ""; @@ -889,7 +892,7 @@ attributes = { BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1020; - LastUpgradeCheck = 1500; + LastUpgradeCheck = 2700; ORGANIZATIONNAME = "Ryan Hanson"; TargetAttributes = { 9824700822AF9B7D0037B409 = { @@ -973,6 +976,7 @@ 9824701422AF9B7E0037B409 /* Main.storyboard in Resources */, 981F27D12340E3E1006CD263 /* InternetAccessPolicy.plist in Resources */, 98987AA42391890400BE72C4 /* LogViewer.storyboard in Resources */, + 98ED73AE3064567B0077BD10 /* Localizable.xcstrings in Resources */, 482E9E422EB1528D00D7928A /* AppIcon.icon in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1285,7 +1289,9 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; @@ -1345,7 +1351,9 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; name = Release; @@ -1418,7 +1426,6 @@ 9824702822AF9B7E0037B409 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -1443,7 +1450,6 @@ 9824702922AF9B7E0037B409 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; diff --git a/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle.xcscheme b/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle.xcscheme index 745c3310f..eae947a6e 100644 --- a/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle.xcscheme +++ b/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle.xcscheme @@ -1,6 +1,6 @@ Desktop & Dock > Displays have separate Spaces to be OFF." : { + + } + }, + "version" : "1.3" +} \ No newline at end of file diff --git a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift b/Rectangle/SettingsWindow/AppSettingsView.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/AppSettingsView.swift rename to Rectangle/SettingsWindow/AppSettingsView.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift b/Rectangle/SettingsWindow/AppSettingsViewModel.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/AppSettingsViewModel.swift rename to Rectangle/SettingsWindow/AppSettingsViewModel.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/SettingsWindow/BehaviorSettingsView.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsView.swift rename to Rectangle/SettingsWindow/BehaviorSettingsView.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/SettingsWindow/BehaviorSettingsViewModel.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/BehaviorSettingsViewModel.swift rename to Rectangle/SettingsWindow/BehaviorSettingsViewModel.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift b/Rectangle/SettingsWindow/ExtraSettings.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/ExtraSettings.swift rename to Rectangle/SettingsWindow/ExtraSettings.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift b/Rectangle/SettingsWindow/MASShortcutViewRepresentable.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/MASShortcutViewRepresentable.swift rename to Rectangle/SettingsWindow/MASShortcutViewRepresentable.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift b/Rectangle/SettingsWindow/PopoverButton.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/PopoverButton.swift rename to Rectangle/SettingsWindow/PopoverButton.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift b/Rectangle/SettingsWindow/SettingsWindowController.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/SettingsWindowController.swift rename to Rectangle/SettingsWindow/SettingsWindowController.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift b/Rectangle/SettingsWindow/ShortcutsViewController.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/ShortcutsViewController.swift rename to Rectangle/SettingsWindow/ShortcutsViewController.swift diff --git a/Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/SettingsWindow/SnapAreaSettingsView.swift similarity index 100% rename from Rectangle/PrefsWindow/SettingsWindow/SnapAreaSettingsView.swift rename to Rectangle/SettingsWindow/SnapAreaSettingsView.swift From ac8e74636ba09c90dbdc0e8b95e1b105f1fe590b Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 15:21:02 -0400 Subject: [PATCH 57/79] Added Localizable.xcstrings --- Rectangle/Localizable.xcstrings | 27 +++++++++++++++++++ .../SettingsWindow/BehaviorSettingsView.swift | 20 +++++++------- Rectangle/mul.lproj/Main.xcstrings | 3 --- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 34a9e1b88..c52feb114 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -60,6 +60,9 @@ }, "Hold any modifier key or use the window menu for default macOS behavior" : { + }, + "Horizontal (L/R, %)" : { + }, "horizontally" : { @@ -93,6 +96,12 @@ }, "Move cursor along with window across displays" : { + }, + "Offset window position on overlap" : { + + }, + "Other" : { + }, "Portrait Snap Areas" : { @@ -123,6 +132,9 @@ }, "Repeated commands" : { + }, + "Repeated Maximize restores the previous size and position" : { + }, "Resize adjacent windows when cycling side or corner shortcuts" : { @@ -138,12 +150,21 @@ }, "Show Extra shortcuts in menu" : { + }, + "Show stacked window list on hover" : { + }, "Show Todo Mode in menu" : { + }, + "Side Split Ratio" : { + }, "Snap windows by dragging" : { + }, + "Stacked Windows" : { + }, "Stage Manager" : { @@ -159,6 +180,9 @@ }, "Toggle Todo" : { + }, + "Toggle window list" : { + }, "Treat multiple displays as one" : { @@ -168,6 +192,9 @@ }, "Use cursor screen detection" : { + }, + "Vertical (T/B, %)" : { + }, "vertically" : { diff --git a/Rectangle/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/SettingsWindow/BehaviorSettingsView.swift index 3bc7a9b4c..f2dd846cb 100644 --- a/Rectangle/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/SettingsWindow/BehaviorSettingsView.swift @@ -216,7 +216,7 @@ struct BehaviorSettingsView: View { Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - Toggle(NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), isOn: $viewModel.repeatedMaximizeRestoresPrevious) + Toggle("Repeated Maximize restores the previous size and position", isOn: $viewModel.repeatedMaximizeRestoresPrevious) VStack(alignment: .leading, spacing: 2) { Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) @@ -238,20 +238,20 @@ struct BehaviorSettingsView: View { VStack(alignment: .leading, spacing: 12) { Divider() VStack(alignment: .leading, spacing: 4) { - Toggle(NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), isOn: $viewModel.cyclingOverlapOffset) + Toggle("Offset window position on overlap", isOn: $viewModel.cyclingOverlapOffset) Text("This leaves a little space showing the window below and is best with gaps between windows") .font(.caption) .foregroundColor(.secondary) } Divider() VStack(alignment: .leading, spacing: 4) { - Toggle(NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), isOn: $viewModel.stackBadge) + Toggle("Show stacked window list on hover", isOn: $viewModel.stackBadge) Text("Hover cursor near the top left corner of a window to show the list") .font(.caption) .foregroundColor(.secondary) } HStack { - Text(NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) + Text("Toggle window list") Spacer() MASShortcutViewRepresentable(defaultsKey: StackBadgeManager.toggleDefaultsKey, validator: nil) .frame(width: 160, height: 24) @@ -260,7 +260,7 @@ struct BehaviorSettingsView: View { .padding(.top, 4) .padding(.leading, 12) } label: { - Label(NSLocalizedString("Stacked Windows", tableName: "Main", value: "", comment: ""), systemImage: "square.on.square") + Label("Stacked Windows", systemImage: "square.on.square") } } @@ -273,7 +273,7 @@ struct BehaviorSettingsView: View { .font(.caption) .foregroundColor(.secondary) HStack { - Text(NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) + Text("Horizontal (L/R, %)") Spacer() if viewModel.selectedHSplitPreset == nil { @@ -288,13 +288,13 @@ struct BehaviorSettingsView: View { ForEach(CycleSize.sortedSizes, id: \.self) { size in Text(size.title).tag(Optional(size)) } - Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) + Text("Other").tag(Optional.none) } .labelsHidden() } HStack { - Text(NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) + Text("Vertical (T/B, %)") Spacer() if viewModel.selectedVSplitPreset == nil { @@ -309,7 +309,7 @@ struct BehaviorSettingsView: View { ForEach(CycleSize.sortedSizes, id: \.self) { size in Text(size.title).tag(Optional(size)) } - Text(NSLocalizedString("Other", tableName: "Main", value: "", comment: "")).tag(Optional.none) + Text("Other").tag(Optional.none) } .labelsHidden() } @@ -317,7 +317,7 @@ struct BehaviorSettingsView: View { .padding(.top, 4) .padding(.leading, 12) } label: { - Label(NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: ""), systemImage: "rectangle.split.2x1") + Label("Side Split Ratio", systemImage: "rectangle.split.2x1") } } diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index ef11f26eb..12297fb64 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -39941,9 +39941,6 @@ } } } - }, - "Stacked Windows" : { - }, "STb-JK-oB1.title" : { "comment" : "Class = \"NSWindow\"; title = \"Rectangle Settings\"; ObjectID = \"STb-JK-oB1\";", From 6d57b81b0ee1c9882c54e70a0eeb7bb7ca387638 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 16:30:33 -0400 Subject: [PATCH 58/79] SwiftUI WelcomeView --- Rectangle.xcodeproj/project.pbxproj | 8 +- Rectangle/AppDelegate.swift | 2 +- Rectangle/Defaults.swift | 1 + Rectangle/Localizable.xcstrings | 18 +++ Rectangle/WelcomeWindow/WelcomeView.swift | 125 ++++++++++++++++++ .../WelcomeWindow/WelcomeViewController.swift | 30 ----- Rectangle/mul.lproj/Main.xcstrings | 6 - 7 files changed, 149 insertions(+), 41 deletions(-) create mode 100644 Rectangle/WelcomeWindow/WelcomeView.swift delete mode 100644 Rectangle/WelcomeWindow/WelcomeViewController.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index c0705efb7..7c6a59493 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -111,7 +111,7 @@ 9898583B305C1B6400459AFF /* ShortcutsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */; }; 98987AA42391890400BE72C4 /* LogViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98987AA22391890300BE72C4 /* LogViewer.storyboard */; }; 98987AA52391890400BE72C4 /* LogViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98987AA32391890400BE72C4 /* LogViewer.swift */; }; - 989DA30E243FC0DF008C7AA4 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989DA30D243FC0DF008C7AA4 /* WelcomeViewController.swift */; }; + 989DA30E243FC0DF008C7AA4 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989DA30D243FC0DF008C7AA4 /* WelcomeView.swift */; }; 98A009AB2512491300CFBF0C /* CenterHalfCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98A009AA2512491300CFBF0C /* CenterHalfCalculation.swift */; }; 98A009AD2512498000CFBF0C /* FirstFourthCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98A009AC2512498000CFBF0C /* FirstFourthCalculation.swift */; }; 98A009AF2512517900CFBF0C /* SecondFourthCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98A009AE2512517900CFBF0C /* SecondFourthCalculation.swift */; }; @@ -350,7 +350,7 @@ 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsViewController.swift; sourceTree = ""; }; 98987AA22391890300BE72C4 /* LogViewer.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LogViewer.storyboard; sourceTree = ""; }; 98987AA32391890400BE72C4 /* LogViewer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LogViewer.swift; sourceTree = ""; }; - 989DA30D243FC0DF008C7AA4 /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = ""; }; + 989DA30D243FC0DF008C7AA4 /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = ""; }; 98A009AA2512491300CFBF0C /* CenterHalfCalculation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CenterHalfCalculation.swift; sourceTree = ""; }; 98A009AC2512498000CFBF0C /* FirstFourthCalculation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirstFourthCalculation.swift; sourceTree = ""; }; 98A009AE2512517900CFBF0C /* SecondFourthCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecondFourthCalculation.swift; sourceTree = ""; }; @@ -789,7 +789,7 @@ 989DA30C243FC0C3008C7AA4 /* WelcomeWindow */ = { isa = PBXGroup; children = ( - 989DA30D243FC0DF008C7AA4 /* WelcomeViewController.swift */, + 989DA30D243FC0DF008C7AA4 /* WelcomeView.swift */, ); path = WelcomeWindow; sourceTree = ""; @@ -1084,7 +1084,7 @@ 982470432EFA00010037B409 /* WindowManager+CooperativeCornerResize.swift in Sources */, D0423D8327A8D31D008A4894 /* HorizontalThirdsRepeated.swift in Sources */, 98C97FFD25893B040061F01F /* Config.swift in Sources */, - 989DA30E243FC0DF008C7AA4 /* WelcomeViewController.swift in Sources */, + 989DA30E243FC0DF008C7AA4 /* WelcomeView.swift in Sources */, 9818E01228B59B64004AA524 /* ThirdsCompoundCalculation.swift in Sources */, 7BE578F12EFA00010083DAE3 /* CooperativeCornerResize.swift in Sources */, 98C27561231FFA5F009B9292 /* SnappingManager.swift in Sources */, diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index b3479ac98..9d5429ee1 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -56,7 +56,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { checkLaunchOnLogin() let alreadyTrusted = accessibilityAuthorization.checkAccessibility { - self.showWelcomeWindow() + WelcomeView.show() self.checkForConflictingApps() self.openPreferences(self) self.statusItem.statusMenu = self.mainStatusMenu diff --git a/Rectangle/Defaults.swift b/Rectangle/Defaults.swift index 402a1831a..1ec2ab18d 100644 --- a/Rectangle/Defaults.swift +++ b/Rectangle/Defaults.swift @@ -124,6 +124,7 @@ class Defaults { static let screensOrderedByX = IntEnumDefault(key: "screensOrderedByX", defaultValue: .yThenMinX) static let combinedDisplayMode = OptionalBoolDefault(key: "combinedDisplayMode") static let greenButtonOverride = BoolDefault(key: "greenButtonOverride") + static let wasWelcomeDisplayed = BoolDefault(key: "wasWelcomeDisplayed") static var array: [Default] = [ launchOnLogin, disabledApps, diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index c52feb114..ffce37681 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -30,6 +30,9 @@ }, "Check for Updates…" : { + }, + "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" : { + }, "Configure the divide between side and corner actions" : { @@ -102,6 +105,9 @@ }, "Other" : { + }, + "Please select your default shortcuts and behavior" : { + }, "Portrait Snap Areas" : { @@ -120,6 +126,9 @@ }, "Recent apps area" : { + }, + "Recommended" : { + }, "Reflow Todo" : { @@ -162,6 +171,12 @@ }, "Snap windows by dragging" : { + }, + "Spectacle" : { + + }, + "Spectacle shortcuts are more likely to conflict with other shortcuts" : { + }, "Stacked Windows" : { @@ -198,6 +213,9 @@ }, "vertically" : { + }, + "Welcome to Rectangle!" : { + }, "When the menu bar icon is hidden, relaunch Rectangle from Finder to open" : { diff --git a/Rectangle/WelcomeWindow/WelcomeView.swift b/Rectangle/WelcomeWindow/WelcomeView.swift new file mode 100644 index 000000000..60edd71c7 --- /dev/null +++ b/Rectangle/WelcomeWindow/WelcomeView.swift @@ -0,0 +1,125 @@ +/// WelcomeView.swift + +import SwiftUI +import AppKit + +struct WelcomeView: View { + private static var windowController: NSWindowController? + private static var windowDelegate: WelcomeWindowDelegate? + + var body: some View { + VStack(spacing: 16) { + Text("Welcome to Rectangle!") + .font(.largeTitle) + .bold() + + Text("Please select your default shortcuts and behavior") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + + // Equal sized buttons + VStack(spacing: 10) { + Button(action: { + finishSelection(usingRecommended: true) + }) { + HStack(spacing: 6) { + Image("StatusTemplate") + .renderingMode(.template) + Text("Recommended") + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .buttonStyle(.borderedProminent) + .controlSize(.large) + .frame(width: 200, height: 38) + + Button(action: { + finishSelection(usingRecommended: false) + }) { + Text("Spectacle") + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .buttonStyle(.bordered) + .controlSize(.large) + .frame(width: 200, height: 38) + } + .padding(.vertical, 8) + + // Explanatory Text with Multi-line Wrapping + VStack(spacing: 8) { + Text("Spectacle shortcuts are more likely to conflict with other shortcuts") + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + + Text("Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts") + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + } + } + .padding(24) + .frame(width: 380) + } + + // MARK: - Presentation & Lifecycle + + static func show() { + guard windowController == nil, !Defaults.wasWelcomeDisplayed.enabled else { return } + + Defaults.wasWelcomeDisplayed.enabled = true + + let hostingController = NSHostingController(rootView: WelcomeView()) + let window = NSWindow(contentViewController: hostingController) + + window.isReleasedWhenClosed = false + window.styleMask = [.titled, .closable] + window.titleVisibility = .hidden + window.titlebarAppearsTransparent = true + window.center() + + let delegate = WelcomeWindowDelegate() + window.delegate = delegate + windowDelegate = delegate + + let controller = NSWindowController(window: window) + windowController = controller + + NSApp.activate(ignoringOtherApps: true) + + let response = NSApp.runModal(for: window) + + let usingRecommended = (response == .alertFirstButtonReturn || response == .abort || response == .stop) + applyDefaults(usingRecommended: usingRecommended) + + window.delegate = nil + windowController?.close() + windowController = nil + windowDelegate = nil + } + + private func finishSelection(usingRecommended: Bool) { + Self.applyDefaults(usingRecommended: usingRecommended) + + let code: NSApplication.ModalResponse = usingRecommended ? .alertFirstButtonReturn : .alertSecondButtonReturn + NSApp.stopModal(withCode: code) + } + + private static func applyDefaults(usingRecommended: Bool) { + Defaults.alternateDefaultShortcuts.enabled = usingRecommended + Defaults.subsequentExecutionMode.value = usingRecommended ? .acrossMonitor : .resize + } +} + +// MARK: - Window Delegate + +private class WelcomeWindowDelegate: NSObject, NSWindowDelegate { + func windowWillClose(_ notification: Notification) { + if NSApp.modalWindow != nil { + NSApp.stopModal(withCode: .abort) + } + } +} diff --git a/Rectangle/WelcomeWindow/WelcomeViewController.swift b/Rectangle/WelcomeWindow/WelcomeViewController.swift deleted file mode 100644 index dadec6d58..000000000 --- a/Rectangle/WelcomeWindow/WelcomeViewController.swift +++ /dev/null @@ -1,30 +0,0 @@ -/// WelcomeViewController.swift - -import Cocoa - -class WelcomeViewController: NSViewController { - - @IBAction func selectRecommended(_ sender: Any) { - NSApp.stopModal(withCode: .alertFirstButtonReturn) - } - - @IBAction func selectSpectacle(_ sender: Any) { - NSApp.stopModal(withCode: .alertSecondButtonReturn) - } -} - -class WelcomeWindowController: NSWindowController { - - override func windowDidLoad() { - super.windowDidLoad() - let closeButton = self.window?.standardWindowButton(.closeButton) - closeButton?.target = self - closeButton?.action = #selector(windowClosed) - } - - @objc func windowClosed() { - NSApp.stopModal(withCode: .alertFirstButtonReturn) - } - -} - diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 12297fb64..60ed7a3ae 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -49450,12 +49450,6 @@ "value" : "Знайти і замінити…" } }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "T\u0018ìm kiếm và thay thế...\n" - } - }, "zh-Hans" : { "stringUnit" : { "state" : "translated", From 84f06b440e3d0297a4355ffc7c6e2a6d77a44a44 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Wed, 23 Sep 2026 16:37:43 -0400 Subject: [PATCH 59/79] Moved todo about into swiftui popover --- Rectangle/Localizable.xcstrings | 18 +++++ .../SettingsWindow/BehaviorSettingsView.swift | 68 ++++++++++++++++++- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index ffce37681..85cda308d 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -12,6 +12,9 @@ }, "%lld px" : { + }, + "About Todo Mode" : { + }, "Animate footprint" : { @@ -24,6 +27,9 @@ }, "Blur footprint" : { + }, + "Bring your chosen todo application frontmost" : { + }, "Check for updates automatically" : { @@ -78,9 +84,18 @@ }, "Import Config" : { + }, + "In the Rectangle menu, enable Todo Mode." : { + + }, + "In the Rectangle menu, select\n\"Use [Application] as Todo App\"" : { + }, "Keep a chosen application visible on the right of your primary screen at all times" : { + }, + "Keep a chosen application visible on the right side of your primary screen at all times" : { + }, "Launch on login" : { @@ -222,6 +237,9 @@ }, "When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF." : { + }, + "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." : { + } }, "version" : "1.3" diff --git a/Rectangle/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/SettingsWindow/BehaviorSettingsView.swift index f2dd846cb..6428c70cb 100644 --- a/Rectangle/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/SettingsWindow/BehaviorSettingsView.swift @@ -34,6 +34,9 @@ struct BehaviorSettingsView: View { @State private var isStackedWindowsExpanded = false @State private var isSideSplitRatiosExpanded = false @State private var isStageManagerExpanded = false + + // Popover state + @State private var showTodoInfoPopover = false // Cached formatter to avoid expensive re-allocations during view body updates private static let percentFormatter: NumberFormatter = { @@ -135,10 +138,13 @@ struct BehaviorSettingsView: View { Toggle(isOn: $viewModel.todoEnabled) { HStack(spacing: 4) { Text("Show Todo Mode in menu") - Button(action: viewModel.showTodoModeHelp) { + Button(action: { showTodoInfoPopover.toggle() }) { Image(systemName: "info.circle") } .buttonStyle(.plain) + .popover(isPresented: $showTodoInfoPopover, arrowEdge: .trailing) { + TodoModeInfoView() + } } } } @@ -361,3 +367,63 @@ struct BehaviorSettingsView: View { .animation(.easeInOut(duration: 0.2), value: isStageManagerExpanded) } } + +// MARK: - Todo Mode Info Popover View +struct TodoModeInfoView: View { + // Structural data wrapper to hold LocalizedStringKey + private struct Step: Identifiable { + let id: Int + let number: String + let text: LocalizedStringKey + } + + private let steps: [Step] = [ + Step(id: 1, number: "1.", text: "Bring your chosen todo application frontmost"), + Step(id: 2, number: "2.", text: "In the Rectangle menu, select\n\"Use [Application] as Todo App\""), + Step(id: 3, number: "3.", text: "In the Rectangle menu, enable Todo Mode.") + ] + + var body: some View { + VStack(spacing: 16) { + Text("About Todo Mode") + .font(.title2) + .bold() + + Image(nsImage: NSImage(named: NSImage.applicationIconName) ?? NSImage()) + .resizable() + .scaledToFit() + .frame(width: 56, height: 56) + + Text("Keep a chosen application visible on the right side of your primary screen at all times") + .multilineTextAlignment(.center) + .font(.subheadline) + .foregroundColor(.secondary) + + // MARK: - Formatted Steps + VStack(alignment: .leading, spacing: 10) { + ForEach(steps) { step in + HStack(alignment: .top, spacing: 10) { + Text(step.number) + .font(.body) + .bold() + .foregroundColor(.accentColor) + + Text(step.text) + .font(.body) + .fixedSize(horizontal: false, vertical: true) + } + } + } + .padding(12) + .background(Color(NSColor.controlBackgroundColor)) + .cornerRadius(8) + + Text("While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut.") + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.leading) + } + .padding(20) + .frame(width: 330) + } +} From e6359e568aaaf473476195ddca2bff1012f8d103 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 09:38:31 -0400 Subject: [PATCH 60/79] Accessibility Auth UI in SwiftUI --- Rectangle.xcodeproj/project.pbxproj | 4 + .../AccessibilityAuthorization.swift | 85 +++++++++++++++---- .../AccessibilityView.swift | 70 +++++++++++++++ Rectangle/Localizable.xcstrings | 18 ++++ 4 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 Rectangle/AccessibilityAuthorization/AccessibilityView.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 7c6a59493..44fef853e 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -148,6 +148,7 @@ 98ED70533062D3860077BD10 /* ExtraSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED70523062D3810077BD10 /* ExtraSettings.swift */; }; 98ED73AA3062FCD20077BD10 /* PopoverButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73A93062FCD20077BD10 /* PopoverButton.swift */; }; 98ED73AE3064567B0077BD10 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */; }; + 98ED73B0306558490077BD10 /* AccessibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73AF306558490077BD10 /* AccessibilityView.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -387,6 +388,7 @@ 98ED70523062D3810077BD10 /* ExtraSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettings.swift; sourceTree = ""; }; 98ED73A93062FCD20077BD10 /* PopoverButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverButton.swift; sourceTree = ""; }; 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + 98ED73AF306558490077BD10 /* AccessibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityView.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -643,6 +645,7 @@ children = ( 9824702E22AFA2E50037B409 /* AccessibilityAuthorization.swift */, 9824702A22AFA22E0037B409 /* AccessibilityWindowController.swift */, + 98ED73AF306558490077BD10 /* AccessibilityView.swift */, ); path = AccessibilityAuthorization; sourceTree = ""; @@ -1135,6 +1138,7 @@ BB0B80492EFB0AF900A9B165 /* TopVerticalTwoThirdsCalculation.swift in Sources */, BB0B804A2EFB0AF900A9B165 /* MiddleVerticalThirdCalculation.swift in Sources */, BB0B804B2EFB0AF900A9B165 /* BottomVerticalTwoThirdsCalculation.swift in Sources */, + 98ED73B0306558490077BD10 /* AccessibilityView.swift in Sources */, BB0B804C2EFB0AF900A9B165 /* BottomVerticalThirdCalculation.swift in Sources */, BB0B804D2EFB0AF900A9B165 /* TopVerticalThirdCalculation.swift in Sources */, 6490B39D27BF984D0056C220 /* BottomCenterLeftEighthCalculation.swift in Sources */, diff --git a/Rectangle/AccessibilityAuthorization/AccessibilityAuthorization.swift b/Rectangle/AccessibilityAuthorization/AccessibilityAuthorization.swift index b1a1d1a9f..a2c3a142a 100644 --- a/Rectangle/AccessibilityAuthorization/AccessibilityAuthorization.swift +++ b/Rectangle/AccessibilityAuthorization/AccessibilityAuthorization.swift @@ -1,43 +1,94 @@ /// AccessibilityAuthorization.swift import Foundation -import Cocoa +import SwiftUI -class AccessibilityAuthorization { +class AccessibilityAuthorization: ObservableObject { - private var accessibilityWindowController: NSWindowController? + private var windowController: NSWindowController? + private var timer: Timer? + @discardableResult public func checkAccessibility(completion: @escaping () -> Void) -> Bool { if !AXIsProcessTrusted() { - - accessibilityWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "AccessibilityWindowController") as? NSWindowController - - NSApp.activate(ignoringOtherApps: true) - accessibilityWindowController?.showWindow(self) - pollAccessibility(completion: completion) + showWindow(completion: completion) + startPolling(completion: completion) return false } else { return true } } - private func pollAccessibility(completion: @escaping () -> Void) { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + private func showWindow(completion: @escaping () -> Void) { + if windowController == nil { + let rootView = AccessibilityView(manager: self) + let hostingController = NSHostingController(rootView: rootView) + + let window = CustomAccessibilityWindow( + contentViewController: hostingController + ) + + let wc = NSWindowController(window: window) + self.windowController = wc + } + + NSApp.activate(ignoringOtherApps: true) + DispatchQueue.main.async { + self.windowController?.window?.center() + self.windowController?.showWindow(self) + } + } + + private func startPolling(completion: @escaping () -> Void) { + timer?.invalidate() + timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { [weak self] t in + guard let self = self else { return } + if AXIsProcessTrusted() { - self.accessibilityWindowController?.close() - self.accessibilityWindowController = nil + t.invalidate() + self.timer = nil + self.closeWindow() completion() - } else { - self.pollAccessibility(completion: completion) } } } func showAuthorizationWindow() { - if accessibilityWindowController?.window?.isMiniaturized == true { - accessibilityWindowController?.window?.deminiaturize(self) + if windowController?.window?.isMiniaturized == true { + windowController?.window?.deminiaturize(self) } NSApp.activate(ignoringOtherApps: true) } + private func closeWindow() { + windowController?.close() + windowController = nil + } +} + +// MARK: - Window Handling Termination on Close + +private class CustomAccessibilityWindow: NSWindow { + + init(contentViewController: NSViewController) { + super.init( + contentRect: NSRect(x: 0, y: 0, width: 320, height: 380), + styleMask: [.titled, .closable, .fullSizeContentView], + backing: .buffered, + defer: false + ) + + self.contentViewController = contentViewController + self.titlebarAppearsTransparent = true + self.titleVisibility = .hidden + self.isMovableByWindowBackground = true + + let closeButton = self.standardWindowButton(.closeButton) + closeButton?.target = self + closeButton?.action = #selector(closeButtonClicked) + } + + @objc private func closeButtonClicked() { + exit(1) + } } diff --git a/Rectangle/AccessibilityAuthorization/AccessibilityView.swift b/Rectangle/AccessibilityAuthorization/AccessibilityView.swift new file mode 100644 index 000000000..f72d7771d --- /dev/null +++ b/Rectangle/AccessibilityAuthorization/AccessibilityView.swift @@ -0,0 +1,70 @@ +/// AccessibilityView.swift + +import SwiftUI +import AppKit + +// MARK: - SwiftUI Views + +struct AccessibilityView: View { + @ObservedObject var manager: AccessibilityAuthorization + + var body: some View { + VStack(spacing: 16) { + Text("Authorize Rectangle") + .font(.system(size: 20, weight: .semibold)) + + if let appIcon = NSApp.applicationIconImage { + Image(nsImage: appIcon) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 64, height: 64) + .cornerRadius(12) + } + + Text("Rectangle needs your permission to control your window positions.") + .font(.system(size: 13, weight: .regular)) + .foregroundColor(.secondary) + .fixedSize(horizontal: false, vertical: true) + .multilineTextAlignment(.center) + + Text(systemSettingsPath) + .font(.system(size: 11, weight: .medium)) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + .frame(maxWidth: 250) + + Button(action: openSystemSettings) { + Text("Open System Settings") + .font(.system(size: 13, weight: .medium)) + .frame(maxWidth: .infinity) + .padding(.vertical, 4) + } + .buttonStyle(.borderedProminent) + .controlSize(.large) + .padding(.horizontal, 20) + + Text("Enable Rectangle.app") + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.secondary) + .padding(.bottom, 8) + } + .padding(24) + .frame(width: 320) + } + + private var systemSettingsPath: String { + if #available(macOS 27, *) { + return String(localized: "Go to System Settings → Privacy & Security → Device Control and Data Access") + } else { + return String(localized: "Go to System Settings → Privacy & Security → Accessibility") + } + } + + private func openSystemSettings() { + if let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility") { + NSWorkspace.shared.open(url) + } + } +} + diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 85cda308d..9acf14f5d 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -21,6 +21,9 @@ }, "Animate windows (experimental)" : { + }, + "Authorize Rectangle" : { + }, "Blur appearance" : { @@ -51,6 +54,9 @@ }, "Double-click window title bar to maximize/restore" : { + }, + "Enable Rectangle.app" : { + }, "Export Config" : { @@ -60,6 +66,12 @@ }, "Gaps between windows" : { + }, + "Go to System Settings → Privacy & Security → Accessibility" : { + + }, + "Go to System Settings → Privacy & Security → Device Control and Data Access" : { + }, "Green stoplight button maximizes instead of Full Screen" : { @@ -117,6 +129,9 @@ }, "Offset window position on overlap" : { + }, + "Open System Settings" : { + }, "Other" : { @@ -144,6 +159,9 @@ }, "Recommended" : { + }, + "Rectangle needs your permission to control your window positions." : { + }, "Reflow Todo" : { From 8f93eb5c278b20b0882b67957d575f3a7606d61d Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 09:58:22 -0400 Subject: [PATCH 61/79] Better visuals for snap area grid --- .../SettingsWindow/SnapAreaSettingsView.swift | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Rectangle/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/SettingsWindow/SnapAreaSettingsView.swift index 607392482..1e80943c9 100644 --- a/Rectangle/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/SettingsWindow/SnapAreaSettingsView.swift @@ -211,7 +211,7 @@ struct SnapAreaGridView: View { let orientation: DisplayOrientation var body: some View { - Grid(alignment: .trailing, horizontalSpacing: 12, verticalSpacing: 12) { + Grid(alignment: .center, horizontalSpacing: 12, verticalSpacing: 12) { // Top Row GridRow(alignment: .center) { SnapAreaPicker(viewModel: viewModel, orientation: orientation, directional: .tl) @@ -248,6 +248,17 @@ struct SnapAreaPicker: View { @State private var selectedTag: Int = -1 + private var pickerAlignment: Alignment { + switch directional { + case .tl, .l, .bl: + return .trailing + case .t, .b, .c: + return .center + case .tr, .r, .br: + return .leading + } + } + var body: some View { Picker("", selection: $selectedTag) { Text("-").tag(-1) @@ -275,7 +286,14 @@ struct SnapAreaPicker: View { } .labelsHidden() .pickerStyle(.menu) - .frame(maxWidth: .infinity, alignment: .trailing) + .buttonStyle(.plain) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .overlay( + RoundedRectangle(cornerRadius: 6) + .stroke(Color.secondary.opacity(0.4), lineWidth: 1) + ) + .frame(maxWidth: .infinity, alignment: pickerAlignment) .onAppear { selectedTag = viewModel.getSelectedTag(for: directional, orientation: orientation) } From e6091739540a7afaafa6458dc622e5eef0bb2b27 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 10:07:25 -0400 Subject: [PATCH 62/79] Fix some of the display names --- .../PrefsWindow/ExtraSettingsPopover.swift | 2 +- .../ShortcutsViewController.swift | 2 +- Rectangle/WindowAction.swift | 18 +++++++++++++++--- Rectangle/mul.lproj/Main.xcstrings | 2 +- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift index f363b28f7..9a0d97666 100644 --- a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift +++ b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift @@ -294,7 +294,7 @@ extension SettingsViewController { mainStackView.addArrangedSubview(halvesCheckbox) halvesPreserveOtherAxisSizeCheckbox = halvesCheckbox - let repeatedMaximizeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Repeated Maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleRepeatedMaximizeRestoresPrevious(_:))) + let repeatedMaximizeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Repeated maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleRepeatedMaximizeRestoresPrevious(_:))) repeatedMaximizeCheckbox.state = Defaults.repeatedMaximizeRestoresPrevious.enabled ? .on : .off repeatedMaximizeCheckbox.toolTip = NSLocalizedString("After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position.", tableName: "Main", value: "", comment: "") repeatedMaximizeCheckbox.translatesAutoresizingMaskIntoConstraints = false diff --git a/Rectangle/SettingsWindow/ShortcutsViewController.swift b/Rectangle/SettingsWindow/ShortcutsViewController.swift index 6d509fda5..0519a291c 100644 --- a/Rectangle/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/SettingsWindow/ShortcutsViewController.swift @@ -187,7 +187,7 @@ final class ShortcutActionCellView: NSTableCellView { func configure(with action: WindowAction, recordingObserver: ShortcutRecordingObserver) { iconImageView.image = action.image - titleLabel.stringValue = action.displayName ?? "" + titleLabel.stringValue = action.settingsDisplayName ?? action.displayName ?? "" if Defaults.allowAnyShortcut.enabled { shortcutView.shortcutValidator = PassthroughShortcutValidator() diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index 896f58031..097d90fd3 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -498,7 +498,7 @@ enum WindowAction: Int, Codable { value = "Bottom Right Sixth" case .topLeftNinth: key = "topLeftNinth.title" - value = "Ninths (3x3)" + value = "Top Left Ninth" case .topCenterNinth: key = "topCenterNinth.title" value = "Top Center Ninth" @@ -577,7 +577,7 @@ enum WindowAction: Int, Codable { value = "Bottom Two Thirds" case .topLeftTwelfth: key = "topLeftTwelfth.title" - value = "Twelfths (4x3)" + value = "Top Left Twelfth" case .topCenterLeftTwelfth: key = "topCenterLeftTwelfth.title" value = "Top Center Left Twelfth" @@ -613,7 +613,7 @@ enum WindowAction: Int, Codable { value = "Bottom Right Twelfth" case .topLeftSixteenth: key = "topLeftSixteenth.title" - value = "Sixteenths (4x4)" + value = "Top Left Sixteenth" case .topCenterLeftSixteenth: key = "topCenterLeftSixteenth.title" value = "Top Center Left Sixteenth" @@ -666,6 +666,18 @@ enum WindowAction: Int, Codable { return NSLocalizedString(key ?? value, tableName: "Main", value: value, comment: "") } + + var settingsDisplayName: String? { + switch self { + case .topLeftNinth: + return "Ninths (3x3)" + case .topLeftTwelfth: + return "Twelfths (3x4)" + case .topLeftSixteenth: + return "Sixteenths (4x4)" + default: return nil + } + } var notificationName: Notification.Name { return Notification.Name(name) diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 60ed7a3ae..8cae221c0 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -37798,7 +37798,7 @@ } } }, - "Repeated Maximize restores the previous size and position" : { + "Repeated maximize restores the previous size and position" : { }, "Resize adjacent windows when cycling side or corner shortcuts" : { From 624ba46dace082a88c97918fa2a07666ee8d9015 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 10:08:53 -0400 Subject: [PATCH 63/79] Refine comments --- Rectangle/SettingsWindow/ShortcutsViewController.swift | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Rectangle/SettingsWindow/ShortcutsViewController.swift b/Rectangle/SettingsWindow/ShortcutsViewController.swift index 0519a291c..f2326cd53 100644 --- a/Rectangle/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/SettingsWindow/ShortcutsViewController.swift @@ -33,7 +33,6 @@ final class CategoryGroup: NSObject { var flatItems: [Any] = [] for (index, category) in categories.enumerated() { - // Include action items flatItems.append(contentsOf: category.items) // Add spacer after each category except the last inside the group (or if sub-groups follow) @@ -211,7 +210,7 @@ final class ShortcutActionCellView: NSTableCellView { } } -// MARK: ShortcutsViewController +// MARK: - ShortcutsViewController class ShortcutsViewController: NSViewController { @@ -232,7 +231,7 @@ class ShortcutsViewController: NSViewController { NSLayoutConstraint.activate([ containerView.widthAnchor.constraint(equalToConstant: initialSize.width), - containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: 200) // Minimum height allowed + containerView.heightAnchor.constraint(greaterThanOrEqualToConstant: 200) // Minimum height ]) scrollView.translatesAutoresizingMaskIntoConstraints = false @@ -365,8 +364,6 @@ extension ShortcutsViewController: NSOutlineViewDataSource { // MARK: - NSOutlineViewDelegate -// MARK: - NSOutlineViewDelegate - extension ShortcutsViewController: NSOutlineViewDelegate { func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? { if let group = item as? CategoryGroup { From 84ef9f549008e404793e34b03b5a041f190598a4 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 10:09:21 -0400 Subject: [PATCH 64/79] capitalization --- Rectangle/SettingsWindow/BehaviorSettingsView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rectangle/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/SettingsWindow/BehaviorSettingsView.swift index 6428c70cb..32093dfa3 100644 --- a/Rectangle/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/SettingsWindow/BehaviorSettingsView.swift @@ -222,7 +222,7 @@ struct BehaviorSettingsView: View { Toggle("Double-click window title bar to maximize/restore", isOn: $viewModel.doubleClickTitleBar) Toggle("Preserve maximize state when moving across displays", isOn: $viewModel.autoMaximize) - Toggle("Repeated Maximize restores the previous size and position", isOn: $viewModel.repeatedMaximizeRestoresPrevious) + Toggle("Repeated maximize restores the previous size and position", isOn: $viewModel.repeatedMaximizeRestoresPrevious) VStack(alignment: .leading, spacing: 2) { Toggle("Green stoplight button maximizes instead of Full Screen", isOn: $viewModel.greenButtonOverride) From 79a021468b3d302036aaa3f83408133802becfe2 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 10:33:56 -0400 Subject: [PATCH 65/79] Starting path toward localization migration --- Rectangle/AppDelegate.swift | 12 +- Rectangle/Localizable.xcstrings | 359 +++++++++++++++++- .../SettingsWindow/AppSettingsViewModel.swift | 6 +- .../BehaviorSettingsViewModel.swift | 8 +- Rectangle/SettingsWindow/ExtraSettings.swift | 8 +- .../CompoundSnapArea/CompoundSnapArea.swift | 22 +- Rectangle/TodoMode/TodoManager.swift | 14 +- Rectangle/WindowAction.swift | 302 +++++---------- Rectangle/mul.lproj/Main.xcstrings | 29 +- 9 files changed, 508 insertions(+), 252 deletions(-) diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index 9d5429ee1..594d87441 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -308,7 +308,7 @@ extension AppDelegate: NSMenuDelegate { } if let frontAppName = ApplicationToggle.frontAppName { - let ignoreString = NSLocalizedString("D99-0O-MB6.title", tableName: "Main", value: "Ignore frontmost.app", comment: "") + let ignoreString = String(localized: "Ignore frontmost.app") ignoreMenuItem.title = ignoreString.replacingOccurrences(of: "frontmost.app", with: frontAppName) ignoreMenuItem.state = ApplicationToggle.shortcutsDisabled ? .on : .off ignoreMenuItem.isHidden = false @@ -488,26 +488,26 @@ extension AppDelegate { private func addTodoModeMenuItems(startingIndex: Int) { var menuIndex = startingIndex - let todoModeItemTitle = NSLocalizedString("Enable Todo Mode", tableName: "Main", value: "", comment: "") + let todoModeItemTitle = String(localized: "Enable Todo Mode") let todoModeMenuItem = NSMenuItem(title: todoModeItemTitle, action: #selector(toggleTodoMode), keyEquivalent: "") todoModeMenuItem.tag = TodoItem.mode.tag todoModeMenuItem.target = self mainStatusMenu.insertItem(todoModeMenuItem, at: menuIndex) menuIndex += 1 - let todoAppItemTitle = NSLocalizedString("Use frontmost.app as Todo App", tableName: "Main", value: "", comment: "") + let todoAppItemTitle = String(localized: "Use frontmost.app as Todo App") let todoAppMenuItem = NSMenuItem(title: todoAppItemTitle, action: #selector(setTodoApp), keyEquivalent: "") todoAppMenuItem.tag = TodoItem.app.tag mainStatusMenu.insertItem(todoAppMenuItem, at: menuIndex) menuIndex += 1 - let todoWindowItemTitle = NSLocalizedString("Use as Todo Window", tableName: "Main", value: "", comment: "") + let todoWindowItemTitle = String(localized: "Use as Todo Window") let todoWindowMenuItem = NSMenuItem(title: todoWindowItemTitle, action: #selector(setTodoWindow), keyEquivalent: "") todoWindowMenuItem.tag = TodoItem.window.tag mainStatusMenu.insertItem(todoWindowMenuItem, at: menuIndex) menuIndex += 1 - let todoReflowItemTitle = NSLocalizedString("Reflow Todo", tableName: "Main", value: "", comment: "") + let todoReflowItemTitle = String(localized: "Reflow Todo") let todoReflowItem = NSMenuItem(title: todoReflowItemTitle, action: #selector(todoReflow), keyEquivalent: "") todoReflowItem.tag = TodoItem.reflow.tag mainStatusMenu.insertItem(todoReflowItem, at: menuIndex) @@ -558,7 +558,7 @@ extension AppDelegate { } if let frontAppName = ApplicationToggle.frontAppName { - let appString = NSLocalizedString("Use frontmost.app as Todo App", tableName: "Main", value: "", comment: "") + let appString = String(localized: "Use frontmost.app as Todo App") todoAppMenuItem.title = appString.replacingOccurrences( of: "frontmost.app", with: frontAppName) todoAppMenuItem.isEnabled = !applicationToggle.todoAppIsActive() diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 9acf14f5d..1e6002997 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -15,6 +15,9 @@ }, "About Todo Mode" : { + }, + "Almost Maximize" : { + }, "Animate footprint" : { @@ -30,9 +33,99 @@ }, "Blur footprint" : { + }, + "Bottom" : { + + }, + "Bottom Center Left 8th" : { + + }, + "Bottom Center Left Sixteenth" : { + + }, + "Bottom Center Left Twelfth" : { + + }, + "Bottom Center Ninth" : { + + }, + "Bottom Center Right 8th" : { + + }, + "Bottom Center Right Sixteenth" : { + + }, + "Bottom Center Right Twelfth" : { + + }, + "Bottom Center Sixth" : { + + }, + "Bottom eighths from corners; thirds" : { + + }, + "Bottom Left" : { + + }, + "Bottom Left 8th" : { + + }, + "Bottom Left Ninth" : { + + }, + "Bottom Left Sixteenth" : { + + }, + "Bottom Left Sixth" : { + + }, + "Bottom Left Twelfth" : { + + }, + "Bottom Right" : { + + }, + "Bottom Right 8th" : { + + }, + "Bottom Right Ninth" : { + + }, + "Bottom Right Sixteenth" : { + + }, + "Bottom Right Sixth" : { + + }, + "Bottom Right Twelfth" : { + + }, + "Bottom sixths from corners; thirds" : { + + }, + "Bottom Third" : { + + }, + "Bottom Two Thirds" : { + }, "Bring your chosen todo application frontmost" : { + }, + "Cancel" : { + + }, + "Center" : { + + }, + "Center Third" : { + + }, + "Center Three Fourths" : { + + }, + "Center Two Thirds" : { + }, "Check for updates automatically" : { @@ -42,27 +135,57 @@ }, "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" : { + }, + "Close" : { + }, "Configure the divide between side and corner actions" : { + }, + "Conflict with system setting" : { + + }, + "Currently using: " : { + }, "Cyclic corner shortcuts expand:" : { }, "Dark" : { + }, + "Default Shortcuts" : { + }, "Double-click window title bar to maximize/restore" : { }, "Enable Rectangle.app" : { + }, + "Enable Todo Mode" : { + }, "Export Config" : { + }, + "First Fourth" : { + + }, + "First Third" : { + + }, + "First Three Fourths" : { + + }, + "First Two Thirds" : { + }, "Follow System" : { + }, + "Fourths columns" : { + }, "Gaps between windows" : { @@ -93,6 +216,9 @@ }, "If the area is too small, recent apps will be hidden" : { + }, + "Ignore frontmost.app" : { + }, "Import Config" : { @@ -108,24 +234,114 @@ }, "Keep a chosen application visible on the right side of your primary screen at all times" : { + }, + "Larger" : { + + }, + "Larger Width" : { + + }, + "Last Fourth" : { + + }, + "Last Third" : { + + }, + "Last Three Fourths" : { + + }, + "Last Two Thirds" : { + }, "Launch on login" : { }, "Left" : { + }, + "Left or right side" : { + + }, + "Left side, top/bottom near corners" : { + }, "Light" : { + }, + "Lower Middle Center Left Sixteenth" : { + + }, + "Lower Middle Center Right Sixteenth" : { + + }, + "Lower Middle Left Sixteenth" : { + + }, + "Lower Middle Right Sixteenth" : { + + }, + "Maximize" : { + + }, + "Maximize Height" : { + }, "Maximize Settings" : { + }, + "Maximum windows per column" : { + + }, + "Maximum windows per row" : { + + }, + "Middle Center Left Twelfth" : { + + }, + "Middle Center Ninth" : { + + }, + "Middle Center Right Twelfth" : { + + }, + "Middle Left Ninth" : { + + }, + "Middle Left Twelfth" : { + + }, + "Middle Right Ninth" : { + + }, + "Middle Right Twelfth" : { + + }, + "Middle Third" : { + }, "Mission Control dragging" : { }, "Move cursor along with window across displays" : { + }, + "Move Down" : { + + }, + "Move Left" : { + + }, + "Move Right" : { + + }, + "Move to Center" : { + + }, + "Move Up" : { + + }, + "Next Display" : { + }, "Offset window position on overlap" : { @@ -147,6 +363,9 @@ }, "Preserve side axis size for half actions, similar to Windows" : { + }, + "Previous Display" : { + }, "Provide haptic feedback" : { @@ -175,11 +394,14 @@ "Repeated commands" : { }, - "Repeated Maximize restores the previous size and position" : { + "Repeated maximize restores the previous size and position" : { }, "Resize adjacent windows when cycling side or corner shortcuts" : { + }, + "Restore" : { + }, "Restore Default Shortcuts & Snap Areas" : { @@ -189,6 +411,12 @@ }, "Right" : { + }, + "Right side, top/bottom near corners" : { + + }, + "Second Fourth" : { + }, "Show Extra shortcuts in menu" : { @@ -201,6 +429,12 @@ }, "Side Split Ratio" : { + }, + "Smaller" : { + + }, + "Smaller Width" : { + }, "Snap windows by dragging" : { @@ -216,30 +450,150 @@ }, "Stage Manager" : { + }, + "Third Fourth" : { + + }, + "Thirds, drag toward center for two thirds" : { + + }, + "Thirds, top/bottom near corners" : { + }, "This leaves a little space showing the window below and is best with gaps between windows" : { + }, + "Tile in Columns" : { + + }, + "Tile in Rows" : { + + }, + "Tile Windows in Rows/Columns" : { + + }, + "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." : { + }, "Todo app width" : { }, "Todo side" : { + }, + "Toggle stacked window badge" : { + }, "Toggle Todo" : { }, "Toggle window list" : { + }, + "Top" : { + + }, + "Top Center Left 8th" : { + + }, + "Top Center Left Sixteenth" : { + + }, + "Top Center Left Twelfth" : { + + }, + "Top Center Ninth" : { + + }, + "Top Center Right 8th" : { + + }, + "Top Center Right Sixteenth" : { + + }, + "Top Center Right Twelfth" : { + + }, + "Top Center Sixth" : { + + }, + "Top eighths from corners; maximize" : { + + }, + "Top Left" : { + + }, + "Top Left 8th" : { + + }, + "Top Left Ninth" : { + + }, + "Top Left Sixteenth" : { + + }, + "Top Left Sixth" : { + + }, + "Top Left Twelfth" : { + + }, + "Top Right" : { + + }, + "Top Right 8th" : { + + }, + "Top Right Ninth" : { + + }, + "Top Right Sixteenth" : { + + }, + "Top Right Sixth" : { + + }, + "Top Right Twelfth" : { + + }, + "Top sixths from corners; maximize" : { + + }, + "Top Third" : { + + }, + "Top Two Thirds" : { + + }, + "Top/bottoms" : { + }, "Treat multiple displays as one" : { }, "Update Available…" : { + }, + "Upper Middle Center Left Sixteenth" : { + + }, + "Upper Middle Center Right Sixteenth" : { + + }, + "Upper Middle Left Sixteenth" : { + + }, + "Upper Middle Right Sixteenth" : { + + }, + "Use as Todo Window" : { + }, "Use cursor screen detection" : { + }, + "Use frontmost.app as Todo App" : { + }, "Vertical (T/B, %)" : { @@ -258,6 +612,9 @@ }, "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." : { + }, + "Width Step (px)" : { + } }, "version" : "1.3" diff --git a/Rectangle/SettingsWindow/AppSettingsViewModel.swift b/Rectangle/SettingsWindow/AppSettingsViewModel.swift index 1ca4e45a5..dbd350b82 100644 --- a/Rectangle/SettingsWindow/AppSettingsViewModel.swift +++ b/Rectangle/SettingsWindow/AppSettingsViewModel.swift @@ -76,9 +76,9 @@ final class AppSettingsViewModel: ObservableObject { func restoreDefaults() { let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" - let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") - let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") - let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") + let defaultShortcutsTitle = String(localized: "Default Shortcuts") + let currentlyUsingText = String(localized: "Currently using: ") + let cancelText = String(localized: "Cancel") let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) if response == .alertThirdButtonReturn { return } diff --git a/Rectangle/SettingsWindow/BehaviorSettingsViewModel.swift b/Rectangle/SettingsWindow/BehaviorSettingsViewModel.swift index 1597b41e9..d69e035ea 100644 --- a/Rectangle/SettingsWindow/BehaviorSettingsViewModel.swift +++ b/Rectangle/SettingsWindow/BehaviorSettingsViewModel.swift @@ -273,10 +273,10 @@ final class BehaviorSettingsViewModel: ObservableObject { private func handleDoubleClickTitleBarToggle(_ enabled: Bool) { if enabled && !TitleBarManager.systemSettingDisabled { - let openSettings = NSLocalizedString("Open System Settings", tableName: "Main", value: "", comment: "") - let conflictTitleText = NSLocalizedString("Conflict with system setting", tableName: "Main", value: "", comment: "") - let conflictDescriptionText = NSLocalizedString("To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.", tableName: "Main", value: "", comment: "") - let closeText = NSLocalizedString("DVo-aG-piG.title", tableName: "Main", value: "Close", comment: "") + let openSettings = String(localized: "Open System Settings") + let conflictTitleText = String(localized: "Conflict with system setting") + let conflictDescriptionText = String(localized: "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.") + let closeText = String(localized: "Close") let response = AlertUtil.twoButtonAlert(question: conflictTitleText, text: conflictDescriptionText, confirmText: openSettings, cancelText: closeText) if response == .alertFirstButtonReturn { diff --git a/Rectangle/SettingsWindow/ExtraSettings.swift b/Rectangle/SettingsWindow/ExtraSettings.swift index afa8ea639..bc8a35862 100644 --- a/Rectangle/SettingsWindow/ExtraSettings.swift +++ b/Rectangle/SettingsWindow/ExtraSettings.swift @@ -14,16 +14,16 @@ private var integerFormatter: NumberFormatter = { final class TileSettingsView: NSView, NSTextFieldDelegate { private let titleLabel: NSTextField = { - let label = NSTextField(labelWithString: NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "")) + let label = NSTextField(labelWithString: String(localized:"Tile Windows in Rows/Columns")) label.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) return label }() - private let columnsLabel = NSTextField(labelWithString: NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "")) + private let columnsLabel = NSTextField(labelWithString: String(localized: "Maximum windows per column")) private let columnsTextField = NSTextField() private let columnsStepper = NSStepper() - private let rowsLabel = NSTextField(labelWithString: NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "")) + private let rowsLabel = NSTextField(labelWithString: String(localized: "Maximum windows per row")) private let rowsTextField = NSTextField() private let rowsStepper = NSStepper() @@ -133,7 +133,7 @@ final class TileSettingsView: NSView, NSTextFieldDelegate { final class WidthSettingsView: NSView, NSTextFieldDelegate { - private let widthStepLabel = NSTextField(labelWithString: NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) + private let widthStepLabel = NSTextField(labelWithString: String(localized: "Width Step (px)")) private let widthStepTextField = NSTextField() override init(frame frameRect: NSRect) { diff --git a/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift b/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift index 8ec8c64c6..bc5dbb8fe 100644 --- a/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift +++ b/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift @@ -23,27 +23,27 @@ enum CompoundSnapArea: Int, Codable { var displayName: String { switch self { case .leftTopBottomHalf: - return NSLocalizedString("Left side, top/bottom near corners", tableName: "Main", value: "", comment: "") + return String(localized: "Left side, top/bottom near corners") case .rightTopBottomHalf: - return NSLocalizedString("Right side, top/bottom near corners", tableName: "Main", value: "", comment: "") + return String(localized: "Right side, top/bottom near corners") case .thirds: - return NSLocalizedString("Thirds, drag toward center for two thirds", tableName: "Main", value: "", comment: "") + return String(localized: "Thirds, drag toward center for two thirds") case .portraitThirdsSide: - return NSLocalizedString("Thirds, top/bottom near corners", tableName: "Main", value: "", comment: "") + return String(localized: "Thirds, top/bottom near corners") case .halves: - return NSLocalizedString("Left or right side", tableName: "Main", value: "", comment: "") + return String(localized: "Left or right side") case .topSixths: - return NSLocalizedString("Top sixths from corners; maximize", tableName: "Main", value: "", comment: "") + return String(localized: "Top sixths from corners; maximize") case .bottomSixths: - return NSLocalizedString("Bottom sixths from corners; thirds", tableName: "Main", value: "", comment: "") + return String(localized: "Bottom sixths from corners; thirds") case .fourths: - return NSLocalizedString("Fourths columns", tableName: "Main", value: "", comment: "") + return String(localized: "Fourths columns") case .portraitTopBottomHalves: - return NSLocalizedString("Top/bottoms", tableName: "Main", value: "", comment: "") + return String(localized: "Top/bottoms") case .topEighths: - return NSLocalizedString("Top eighths from corners; maximize", tableName: "Main", value: "", comment: "") + return String(localized: "Top eighths from corners; maximize") case .bottomEighths: - return NSLocalizedString("Bottom eighths from corners; thirds", tableName: "Main", value: "", comment: "") + return String(localized: "Bottom eighths from corners; thirds") } } diff --git a/Rectangle/TodoMode/TodoManager.swift b/Rectangle/TodoMode/TodoManager.swift index afddddaa0..7233c7cb3 100644 --- a/Rectangle/TodoMode/TodoManager.swift +++ b/Rectangle/TodoMode/TodoManager.swift @@ -331,11 +331,11 @@ struct AppShortcutConflict { private static func displayName(forDefaultsKey defaultsKey: String) -> String { switch defaultsKey { case TodoManager.toggleDefaultsKey: - return NSLocalizedString("Toggle Todo", tableName: "Main", value: "Toggle Todo", comment: "") + return String(localized: "Toggle Todo") case TodoManager.reflowDefaultsKey: - return NSLocalizedString("Reflow Todo", tableName: "Main", value: "Reflow Todo", comment: "") + return String(localized: "Reflow Todo") case StackBadgeManager.toggleDefaultsKey: - return NSLocalizedString("Toggle stacked window badge", tableName: "Main", value: "Toggle stacked window badge", comment: "") + return String(localized: "Toggle stacked window badge") default: return defaultsKey } @@ -378,8 +378,8 @@ enum TodoSidebarSide: Int, CaseIterable { var title: String { switch self { - case .left: return "Left" - case .right: return "Right" + case .left: return String(localized: "Left") + case .right: return String(localized: "Right") } } } @@ -390,8 +390,8 @@ enum TodoSidebarWidthUnit: Int, CaseIterable, CustomStringConvertible { var description: String { switch self { - case .pixels: return "px" - case .pct: return "%" + case .pixels: return String(localized: "px") + case .pct: return String(localized: "%") } } } diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index 097d90fd3..41b690976 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -369,302 +369,208 @@ enum WindowAction: Int, Codable { } var displayName: String? { - var key: String? - var value: String - switch self { case .leftHalf: - key = "Xc8-Sm-pig.title" - value = "Left" + String(localized: "Left") case .rightHalf: - key = "F8S-GI-LiB.title" - value = "Right" + String(localized: "Right") case .maximize: - key = "8oe-J2-oUU.title" - value = "Maximize" + String(localized: "Maximize") case .maximizeHeight: - key = "6DV-cd-fda.title" - value = "Maximize Height" + String(localized: "Maximize Height") case .previousDisplay: - key = "QwF-QN-YH7.title" - value = "Previous Display" + String(localized: "Previous Display") case .nextDisplay: - key = "Jnd-Lc-nlh.title" - value = "Next Display" + String(localized: "Next Display") case .larger: - key = "Eah-KL-kbn.title" - value = "Larger" + String(localized: "Larger") case .smaller: - key = "MzN-CJ-ASD.title" - value = "Smaller" + String(localized: "Smaller") case .bottomHalf: - key = "ec4-FB-fMa.title" - value = "Bottom" + String(localized: "Bottom") case .topHalf: - key = "d7y-s8-7GE.title" - value = "Top" + String(localized: "Top") case .center: - key = "8Bg-SZ-hDO.title" - value = "Move to Center" + String(localized: "Move to Center") case .bottomLeft: - key = "6ma-hP-5xX.title" - value = "Bottom Left" + String(localized: "Bottom Left") case .bottomRight: - key = "J6t-sg-Wwz.title" - value = "Bottom Right" + String(localized: "Bottom Right") case .topLeft: - key = "adp-cN-qkh.title" - value = "Top Left" + String(localized: "Top Left") case .topRight: - key = "0Ak-33-SM7.title" - value = "Top Right" + String(localized: "Top Right") case .restore: - key = "C9v-g0-DH8.title" - value = "Restore" + String(localized: "Restore") case .firstThird: - key = "F12-EV-Lfz.title" - value = "First Third" + String(localized: "First Third") case .firstTwoThirds: - key = "3zd-xE-oWl.title" - value = "First Two Thirds" + String(localized: "First Two Thirds") case .centerThird: - key = "7YK-9Z-lzw.title" - value = "Center Third" + String(localized: "Center Third") case .centerTwoThirds: - key = "oSu-n4-8Yu.title" - value = "Center Two Thirds" + String(localized: "Center Two Thirds") case .lastTwoThirds: - key = "08q-Ce-1QL.title" - value = "Last Two Thirds" + String(localized: "Last Two Thirds") case .lastThird: - key = "cRm-wn-Yv6.title" - value = "Last Third" + String(localized: "Last Third") case .moveLeft: - key = "v2f-bX-xiM.title" - value = "Move Left" + String(localized: "Move Left") case .moveRight: - key = "rzr-Qq-702.title" - value = "Move Right" + String(localized: "Move Right") case .moveUp: - key = "HOm-BV-2jc.title" - value = "Move Up" + String(localized: "Move Up") case .moveDown: - key = "1Rc-Od-eP5.title" - value = "Move Down" + String(localized: "Move Down") case .almostMaximize: - key = "e57-QJ-6bL.title" - value = "Almost Maximize" + String(localized: "Almost Maximize") case .centerHalf: - key = "bRX-dV-iAR.title" - value = "Center" + String(localized: "Center") case .firstFourth: - key = "Q6Q-6J-okH.title" - value = "First Fourth" + String(localized: "First Fourth") case .secondFourth: - key = "Fko-xs-gN5.title" - value = "Second Fourth" + String(localized: "Second Fourth") case .thirdFourth: - key = "ZTK-rS-b17.title" - value = "Third Fourth" + String(localized: "Third Fourth") case .lastFourth: - key = "6HX-rn-VIp.title" - value = "Last Fourth" + String(localized: "Last Fourth") case .firstThreeFourths: - key = "T9Z-QF-gwc.title" - value = "First Three Fourths" + String(localized: "First Three Fourths") case .centerThreeFourths: - key = "Vph-Z0-euH.title" - value = "Center Three Fourths" + String(localized: "Center Three Fourths") case .lastThreeFourths: - key = "nwX-h6-fwm.title" - value = "Last Three Fourths" + String(localized: "Last Three Fourths") case .topLeftSixth: - key = "mFt-Kg-UYG.title" - value = "Top Left Sixth" + String(localized: "Top Left Sixth") case .topCenterSixth: - key = "TTx-7X-Wie.title" - value = "Top Center Sixth" + String(localized: "Top Center Sixth") case .topRightSixth: - key = "f3Q-q7-Pcy.title" - value = "Top Right Sixth" + String(localized: "Top Right Sixth") case .bottomLeftSixth: - key = "LqQ-pM-jRN.title" - value = "Bottom Left Sixth" + String(localized: "Bottom Left Sixth") case .bottomCenterSixth: - key = "iOQ-1e-esP.title" - value = "Bottom Center Sixth" + String(localized: "Bottom Center Sixth") case .bottomRightSixth: - key = "m2F-eA-g7w.title" - value = "Bottom Right Sixth" + String(localized: "Bottom Right Sixth") case .topLeftNinth: - key = "topLeftNinth.title" - value = "Top Left Ninth" + String(localized: "Top Left Ninth") case .topCenterNinth: - key = "topCenterNinth.title" - value = "Top Center Ninth" + String(localized: "Top Center Ninth") case .topRightNinth: - key = "topRightNinth.title" - value = "Top Right Ninth" + String(localized: "Top Right Ninth") case .middleLeftNinth: - key = "middleLeftNinth.title" - value = "Middle Left Ninth" + String(localized: "Middle Left Ninth") case .middleCenterNinth: - key = "middleCenterNinth.title" - value = "Middle Center Ninth" + String(localized: "Middle Center Ninth") case .middleRightNinth: - key = "middleRightNinth.title" - value = "Middle Right Ninth" + String(localized: "Middle Right Ninth") case .bottomLeftNinth: - key = "bottomLeftNinth.title" - value = "Bottom Left Ninth" + String(localized: "Bottom Left Ninth") case .bottomCenterNinth: - key = "bottomCenterNinth.title" - value = "Bottom Center Ninth" + String(localized: "Bottom Center Ninth") case .bottomRightNinth: - key = "bottomRightNinth.title" - value = "Bottom Right Ninth" - case .topLeftThird, .topRightThird, .bottomLeftThird, .bottomRightThird: - return nil + String(localized: "Bottom Right Ninth") case .topLeftEighth: - key = "topLeftEighth.title" - value = "Top Left 8th" + String(localized: "Top Left 8th") case .topCenterLeftEighth: - key = "topCenterLeftEighth.title" - value = "Top Center Left 8th" + String(localized: "Top Center Left 8th") case .topCenterRightEighth: - key = "topCenterRightEighth.title" - value = "Top Center Right 8th" + String(localized: "Top Center Right 8th") case .topRightEighth: - key = "topRightEighth.title" - value = "Top Right 8th" + String(localized: "Top Right 8th") case .bottomLeftEighth: - key = "bottomLeftEighth.title" - value = "Bottom Left 8th" + String(localized: "Bottom Left 8th") case .bottomCenterLeftEighth: - key = "bottomCenterLeftEighth.title" - value = "Bottom Center Left 8th" + String(localized: "Bottom Center Left 8th") case .bottomCenterRightEighth: - key = "bottomCenterRightEighth.title" - value = "Bottom Center Right 8th" + String(localized: "Bottom Center Right 8th") case .bottomRightEighth: - key = "bottomRightEighth.title" - value = "Bottom Right 8th" - case .doubleHeightUp, .doubleHeightDown, .doubleWidthLeft, .doubleWidthRight, .halveHeightUp, .halveHeightDown, .halveWidthLeft, .halveWidthRight: - return nil + String(localized: "Bottom Right 8th") case .tileRows: - key = "tileRows.title" - value = "Tile in Rows" + String(localized: "Tile in Rows") case .tileColumns: - key = "tileColumns.title" - value = "Tile in Columns" - case .specified, .reverseAll, .tileAll, .cascadeAll, .leftTodo, .rightTodo, .cascadeActiveApp, .tileActiveApp: - return nil + String(localized: "Tile in Columns") case .largerWidth: - value = "Larger Width" + String(localized: "Larger Width") case .smallerWidth: - value = "Smaller Width" - case .centerProminently, .largerHeight, .smallerHeight: - return nil + String(localized: "Smaller Width") case .topVerticalThird: - value = "Top Third" + String(localized: "Top Third") case .middleVerticalThird: - value = "Middle Third" + String(localized: "Middle Third") case .bottomVerticalThird: - value = "Bottom Third" + String(localized: "Bottom Third") case .topVerticalTwoThirds: - value = "Top Two Thirds" + String(localized: "Top Two Thirds") case .bottomVerticalTwoThirds: - value = "Bottom Two Thirds" + String(localized: "Bottom Two Thirds") case .topLeftTwelfth: - key = "topLeftTwelfth.title" - value = "Top Left Twelfth" + String(localized: "Top Left Twelfth") case .topCenterLeftTwelfth: - key = "topCenterLeftTwelfth.title" - value = "Top Center Left Twelfth" + String(localized: "Top Center Left Twelfth") case .topCenterRightTwelfth: - key = "topCenterRightTwelfth.title" - value = "Top Center Right Twelfth" + String(localized: "Top Center Right Twelfth") case .topRightTwelfth: - key = "topRightTwelfth.title" - value = "Top Right Twelfth" + String(localized: "Top Right Twelfth") case .middleLeftTwelfth: - key = "middleLeftTwelfth.title" - value = "Middle Left Twelfth" + String(localized: "Middle Left Twelfth") case .middleCenterLeftTwelfth: - key = "middleCenterLeftTwelfth.title" - value = "Middle Center Left Twelfth" + String(localized: "Middle Center Left Twelfth") case .middleCenterRightTwelfth: - key = "middleCenterRightTwelfth.title" - value = "Middle Center Right Twelfth" + String(localized: "Middle Center Right Twelfth") case .middleRightTwelfth: - key = "middleRightTwelfth.title" - value = "Middle Right Twelfth" + String(localized: "Middle Right Twelfth") case .bottomLeftTwelfth: - key = "bottomLeftTwelfth.title" - value = "Bottom Left Twelfth" + String(localized: "Bottom Left Twelfth") case .bottomCenterLeftTwelfth: - key = "bottomCenterLeftTwelfth.title" - value = "Bottom Center Left Twelfth" + String(localized: "Bottom Center Left Twelfth") case .bottomCenterRightTwelfth: - key = "bottomCenterRightTwelfth.title" - value = "Bottom Center Right Twelfth" + String(localized: "Bottom Center Right Twelfth") case .bottomRightTwelfth: - key = "bottomRightTwelfth.title" - value = "Bottom Right Twelfth" + String(localized: "Bottom Right Twelfth") case .topLeftSixteenth: - key = "topLeftSixteenth.title" - value = "Top Left Sixteenth" + String(localized: "Top Left Sixteenth") case .topCenterLeftSixteenth: - key = "topCenterLeftSixteenth.title" - value = "Top Center Left Sixteenth" + String(localized: "Top Center Left Sixteenth") case .topCenterRightSixteenth: - key = "topCenterRightSixteenth.title" - value = "Top Center Right Sixteenth" + String(localized: "Top Center Right Sixteenth") case .topRightSixteenth: - key = "topRightSixteenth.title" - value = "Top Right Sixteenth" + String(localized: "Top Right Sixteenth") case .upperMiddleLeftSixteenth: - key = "upperMiddleLeftSixteenth.title" - value = "Upper Middle Left Sixteenth" + String(localized: "Upper Middle Left Sixteenth") case .upperMiddleCenterLeftSixteenth: - key = "upperMiddleCenterLeftSixteenth.title" - value = "Upper Middle Center Left Sixteenth" + String(localized: "Upper Middle Center Left Sixteenth") case .upperMiddleCenterRightSixteenth: - key = "upperMiddleCenterRightSixteenth.title" - value = "Upper Middle Center Right Sixteenth" + String(localized: "Upper Middle Center Right Sixteenth") case .upperMiddleRightSixteenth: - key = "upperMiddleRightSixteenth.title" - value = "Upper Middle Right Sixteenth" + String(localized: "Upper Middle Right Sixteenth") case .lowerMiddleLeftSixteenth: - key = "lowerMiddleLeftSixteenth.title" - value = "Lower Middle Left Sixteenth" + String(localized: "Lower Middle Left Sixteenth") case .lowerMiddleCenterLeftSixteenth: - key = "lowerMiddleCenterLeftSixteenth.title" - value = "Lower Middle Center Left Sixteenth" + String(localized: "Lower Middle Center Left Sixteenth") case .lowerMiddleCenterRightSixteenth: - key = "lowerMiddleCenterRightSixteenth.title" - value = "Lower Middle Center Right Sixteenth" + String(localized: "Lower Middle Center Right Sixteenth") case .lowerMiddleRightSixteenth: - key = "lowerMiddleRightSixteenth.title" - value = "Lower Middle Right Sixteenth" + String(localized: "Lower Middle Right Sixteenth") case .bottomLeftSixteenth: - key = "bottomLeftSixteenth.title" - value = "Bottom Left Sixteenth" + String(localized: "Bottom Left Sixteenth") case .bottomCenterLeftSixteenth: - key = "bottomCenterLeftSixteenth.title" - value = "Bottom Center Left Sixteenth" + String(localized: "Bottom Center Left Sixteenth") case .bottomCenterRightSixteenth: - key = "bottomCenterRightSixteenth.title" - value = "Bottom Center Right Sixteenth" + String(localized: "Bottom Center Right Sixteenth") case .bottomRightSixteenth: - key = "bottomRightSixteenth.title" - value = "Bottom Right Sixteenth" - case .displayOne, .displayTwo, .displayThree, .displayFour, .displayFive, + String(localized: "Bottom Right Sixteenth") + + case .topLeftThird, .topRightThird, .bottomLeftThird, .bottomRightThird, + .doubleHeightUp, .doubleHeightDown, .doubleWidthLeft, .doubleWidthRight, + .halveHeightUp, .halveHeightDown, .halveWidthLeft, .halveWidthRight, + .specified, .reverseAll, .tileAll, .cascadeAll, .leftTodo, .rightTodo, + .cascadeActiveApp, .tileActiveApp, + .centerProminently, .largerHeight, .smallerHeight, + .displayOne, .displayTwo, .displayThree, .displayFour, .displayFive, .displaySix, .displaySeven, .displayEight, .displayNine: - return nil + nil } - - return NSLocalizedString(key ?? value, tableName: "Main", value: value, comment: "") } var settingsDisplayName: String? { diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 8cae221c0..85ae44a12 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -10544,6 +10544,7 @@ } }, "Bottom eighths from corners; thirds" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10592,6 +10593,7 @@ } }, "Bottom sixths from corners; thirds" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -16394,6 +16396,7 @@ } }, "Enable Todo Mode" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -18896,6 +18899,7 @@ } }, "Fourths columns" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -28033,6 +28037,7 @@ }, "Left or right side" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -28209,9 +28214,6 @@ } } } - }, - "Left side, top/bottom near corners" : { - }, "Left side, top/bottom side near corners" : { "extractionState" : "stale", @@ -37639,6 +37641,7 @@ } }, "Reflow Todo" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -38127,9 +38130,6 @@ } } } - }, - "Right side, top/bottom near corners" : { - }, "Right side, top/bottom side near corners" : { "extractionState" : "stale", @@ -41003,6 +41003,7 @@ } }, "Thirds, drag toward center for two thirds" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -41179,9 +41180,6 @@ } } } - }, - "Thirds, top/bottom near corners" : { - }, "Thirds, top/bottom side near corners" : { "extractionState" : "stale", @@ -41901,12 +41899,6 @@ } } } - }, - "Toggle stacked window badge" : { - - }, - "Toggle Todo" : { - }, "Toggle window list" : { @@ -41944,6 +41936,7 @@ } }, "Top eighths from corners; maximize" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -42009,6 +42002,7 @@ } }, "Top sixths from corners; maximize" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -42240,9 +42234,6 @@ } } } - }, - "Top/bottoms" : { - }, "Treat multiple displays as one" : { @@ -43658,6 +43649,7 @@ } }, "Use as Todo Window" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -43836,6 +43828,7 @@ } }, "Use frontmost.app as Todo App" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { From 7bd7612fb05cd20be56096d4b21165e406b69f8c Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 10:36:49 -0400 Subject: [PATCH 66/79] Ordering settings --- Rectangle/SettingsWindow/BehaviorSettingsView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rectangle/SettingsWindow/BehaviorSettingsView.swift b/Rectangle/SettingsWindow/BehaviorSettingsView.swift index 32093dfa3..772cc875c 100644 --- a/Rectangle/SettingsWindow/BehaviorSettingsView.swift +++ b/Rectangle/SettingsWindow/BehaviorSettingsView.swift @@ -118,9 +118,9 @@ struct BehaviorSettingsView: View { // MARK: - Cursor & Display Rules Section { - Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) Toggle("Move cursor along with window across displays", isOn: $viewModel.moveCursorAcrossDisplays) Toggle("Preserve side axis size for half actions, similar to Windows", isOn: $viewModel.halvesPreserveOtherAxisSize) + Toggle("Animate windows (experimental)", isOn: $viewModel.experimentalAnimations) Toggle("Show Extra shortcuts in menu", isOn: $viewModel.showAdditionalSizesInMenu) if viewModel.showCombinedDisplayMode { VStack(alignment: .leading, spacing: 2) { From 5bdae6456924ae69fc8fcb1c1f925594ef17c10b Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:38:38 -0400 Subject: [PATCH 67/79] Migrated main.xcstrings into localizable.xcstrings --- .../xcschemes/Rectangle Localize.xcscheme | 88 + Rectangle/CycleSize.swift | 14 +- Rectangle/Localizable.xcstrings | 33676 +++++++++++++++- .../SettingsWindow/AppSettingsView.swift | 4 +- .../SettingsWindow/SnapAreaSettingsView.swift | 4 +- .../CompoundSnapArea/CompoundSnapArea.swift | 6 +- Rectangle/SubsequentExecutionMode.swift | 12 +- 7 files changed, 33584 insertions(+), 220 deletions(-) create mode 100644 Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme diff --git a/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme b/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme new file mode 100644 index 000000000..600652489 --- /dev/null +++ b/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Rectangle/CycleSize.swift b/Rectangle/CycleSize.swift index 625c33c57..11f092432 100644 --- a/Rectangle/CycleSize.swift +++ b/Rectangle/CycleSize.swift @@ -54,8 +54,8 @@ enum CornerCycleExpansionAxis: Int, CaseIterable { var title: String { switch self { - case .horizontal: return "Horizontally" - case .vertical: return "Vertically" + case .horizontal: return String(localized: "Horizontally") + case .vertical: return String(localized: "Vertically") } } } @@ -70,15 +70,15 @@ extension CycleSize { var title: String { switch self { case .twoThirds: - "⅔" + String(localized: "⅔") case .oneHalf: - "½" + String(localized: "½") case .oneThird: - "⅓" + String(localized: "⅓") case .oneQuarter: - "¼" + String(localized: "¼") case .threeQuarters: - "¾" + String(localized: "¾") } } diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 1e6002997..7b02130ee 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -5,617 +5,33893 @@ }, "-" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + } + } }, "%" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%" + } + } + } }, "%lld px" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld px" + } + } + } + }, + "▶︎ ⋯" : { + "extractionState" : "manual", + "generatesSymbol" : false, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "▶︎ ⋯" + } + } + } + }, + "0 px" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 пкс" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 px" + } + } + } + }, + "1. Bring your chosen todo application frontmost" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. اجلب تطبيق المهام الذي اخترته في المقدمة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Porta l'aplicació Todo que has triat al davant" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Porta l'aplicació Todo que has triat al davant" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Přiveďte vaší vybranou todo aplikaci do popředí" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Bringe die gewünschte To-do-Anwendung in den Vordergrund." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Bring your chosen todo application frontmost" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Traer la aplicación 'Todo' elegida encima de todo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Traer la aplicación 'Todo' elegida encima de todo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Mettre votre application todo au premier plan" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Bawa aplikasi todo pilihan Anda paling depan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Seleziona la finestra dell'applicazione scelta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. ToDoアプリに指定したいアプリを最前面に表示します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Todo 응용 프로그램을 맨 앞에 둡니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Pirmame plane padėkite pasirinktą Todo programą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Legg det valgte Gjøreliste-programmet lengst fram" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Bring your chosen todo application frontmost" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Legg det valde Gjereliste-programmet lengst fram" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Bring your chosen todo application frontmost" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Trazer seu aplicativo todo escolhido para frente" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Bring your chosen todo application frontmost" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Aduceți aplicația aleasă cel mai în față" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Разместите выбранное в качестве Todo приложение на переднем плане" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Presuň zvolenú Todo aplikáciu do popredia" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Placera din valda Att göra-applikation längst fram" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Seçtiğiniz Todo uygulamasını en öne alın" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Перемістіть обране завдання у передній план" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1. Hiển thị ứng dụng todo được chọn lên trên cùng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒈前置您选择的待办应用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒈ 將您選擇的待辦應用程式移至最前" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒈將你選擇的待辦應用移到最前" + } + } + } + }, + "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. في قائمة المستطيل ، حدد n استخدام [Application] كتطبيق Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Al menú Rectangle, selecciona\n\"Utilitza [Application] com a app Todo\"" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Al menú Rectangle, selecciona\n\"Utilitza [Application] com a app Todo\"" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. V Rectangle menu, zvolte\n\"Vybrat [Application] jako Todo aplikaci\"" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Wähle \n\"Verwende [Application] als To-do-Anwendung\" im Rectangle-Menü." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. En el menú de Rectangle, selecciona\n\"Usar [Aplicación] como aplicación 'Todo'\"" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. En el menú de Rectangle, selecciona\n\"Usar [Aplicación] como aplicación 'Todo'\"" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Dans le menu de Rectangle, sélectionner\n« Utiliser [Application] comme App Todo »" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Di Menu Rectangle, pilih\n\"Gunakan [Application] sebagai Aplikasi Todo\"" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Nel menu di Rectangle, seleziona \n\"Usa [Applicazione] come applicazione in evidenza\"" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Rectangleのメニューにある\n\"[アプリケーション名]をToDoアプリとして使う\"を選択します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Rectangle 메뉴에서, \n\"[Application]을 Todo 앱으로 사용\" 메뉴를 클릭합니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "„Rectangle“ meniu pasirinkite „Naudoti [Programą] kaip Todo programą“" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. I Rectangle-menyen: velg\n\"Bruk [Program] som Gjøreliste-program\"" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. I Rectangle-menyen: vel\n\"Bruk [Program] som Gjereliste-program\"" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. No menu do Rectangle, selecione\n\"Use [Aplicativo] como Todo App\"" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. În meniul Rectangle, selectează\n\"Folosește [Application] ca și Todo App\"" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. В меню Rectangle выберите \"Использовать [Приложение] в качестве приложения Todo\"" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. V Rectangle menu, zvoľ\n\"Použiť [Aplikácia] ako Todo aplikáciu\"" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. I Rectangle-menyn, välj\n\"Använd [Applikation] som Att göra-app\"" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Rectangle menüsünde \n\"[Uygulama Adı]nı Todo App olarak kullan\" seçeneğini seçin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. У меню Rectangle виберіть\n\"Використовувати [Застосунок] як застосунок Завдань\"" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "2. Trên menu của Rectangle, chọn\n\"Sử dụng [Ứng dụng] làm ứng dụng Todo\"" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒉在 Rectangle 菜单中,选择\n“使用[应用程序]作为待办应用”" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒉ 在 Rectangle 選單中,選擇\n「使用[應用程式]作為待辦應用程式」" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒉在Rectangle選單中,選擇\n「使用[應用程式]作為待辦應用」" + } + } + } + }, + "3. In the Rectangle menu, enable Todo Mode." : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. في قائمة Rectangle ، قم بتمكين Todo Mode" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Al menú Rectangle, habilita el mode Todo." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Al menú Rectangle, habilita el mode Todo." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Zapněte Todo mód v Rectangle menu." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Aktiviere den To-do-Modus im Rectangle-Menü." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. In the Rectangle menu, enable Todo Mode." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. En el menú de Rectangle, activa el modo Todo." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. En el menú de Rectangle, activa el modo Todo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Dans le menu de Rectangle, activer le mode Todo." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Di Menu Rectangle, Aktifkan mode Todo." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Nel menu di Rectangle, attiva modalità In evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. RectangleのメニューからToDoモードを有効にします。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Rectangle 메뉴에서, Todo 모드를 켭니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. „Rectangle“ meniu įjunkite Todo režimą." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. I Rectangle-menyen: aktiver Gjøreliste-modus." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. In the Rectangle menu, enable Todo Mode." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. I Rectangle-menyen: aktiver Gjereliste-modus." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. In the Rectangle menu, enable Todo Mode." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. No menu do Rectangle, habilite o Todo Mode." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. In the Rectangle menu, enable Todo Mode." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Activează modul Todo în meniul Rectangle." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. В меню Rectangle включите Todo режим." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Zapni Todo režim v Rectangle menu." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. I Rectangle-menyn, aktivera Att göra-läge." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Rectangle menüsünde, Todo Modunu aktif edin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. В меню Rectangle увімкніть режим Завдань." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3. Trên menu của Rectangle, bật chế độ Todo." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒊在 Rectangle 菜单中,启用待办模式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒊ 在 Rectangle 選單中,啟用待辦模式。" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "⒊在Rectangle選單中,啟用待辦模式。" + } + } + } + }, + "190 px" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 пкс" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "190 px" + } + } + } + }, + "400" : { + "extractionState" : "manual", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "400" + } + } + } + }, + "½" : { }, - "About Todo Mode" : { + "⅓" : { }, - "Almost Maximize" : { + "¼" : { }, - "Animate footprint" : { + "⅔" : { }, - "Animate windows (experimental)" : { + "¾" : { + }, + "About" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عن" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quant a" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quant a" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "O aplikaci" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Über" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "About" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca de" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca de" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "À propos" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tentang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleについて" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "정보" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apie Rectangle" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Over" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Despre" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "О Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "O aplikácii" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hakkında" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Про програму" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giới thiệu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关于" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於" + } + } + } + }, + "About Rectangle" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حول المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quant a Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quant a Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "O aplikaci Rectangle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Über Rectangle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Rectangle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca de Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca de Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "À propos de Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tentang Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informazioni su Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleについて" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 정보" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apie Rectangle" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om Rectangle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Over Rectangle" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om Rectangle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre o Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre o Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Despre Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "О Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "O aplikácii Rectangle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om Rectangle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Hakkında" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Про Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giới thiệu Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关于 Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於 Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於Rectangle" + } + } + } + }, + "About Todo Mode" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حول تودو مود" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quant al mode Todo" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quant al mode Todo" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Todo módu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Über den To-do-Modus" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Todo Mode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca del modo 'Todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acerca del modo 'Todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "À propos du mode Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tentang Todo Mode" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informazioni sulla modalità In evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ToDoモードについて" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 모드 정보" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apie Todo režimą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om Gjøreliste-modus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Todo Mode" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om Gjereliste-modus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Todo Mode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobre o Todo Mode" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Todo Mode" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Despre Modul Todo" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "О Todo режиме" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Todo režime" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om Att göra-läge" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo Modu Hakkında" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Про режим Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giới thiệu chế độ Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关于待办模式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於待辦模式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "關於待辦模式" + } + } + } + }, + "After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position." : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position." + } + } + } + }, + "Almost Maximize" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تكبير تقريبا" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quasi maximitzar" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quasi maximitzar" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skoro maximalizovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nahezu maximieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Almost Maximize" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Almost Maximise" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Casi maximizar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Casi maximizar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quasi maximiser" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hampir Perbesar" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quasi massimizza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ほぼ最大化" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "거의 최대화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beveik maksimizuoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nesten maksimert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bijna maximaliseren" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nesten maksimert" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prawie zmaksymalizuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quase maximizar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quase Maximizar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizează parțial" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Почти максимизировать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skoro maximalizovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nästan maximerad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neredeyse tamamını kapla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Майже максимізувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phóng to tương đối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "接近最大化" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "近乎放到最大" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "幾乎放到最大" + } + } + } + }, + "Animate footprint" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحريك البصمة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fußabdruck animieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animar la huella de ventana" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animar la huella de ventana" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animer l'empreinte" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animazione ridimensionamento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "軌跡のアニメーション" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "부드러운 스냅 예시 애니메이션" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animuoti seką" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animer fotavtrykk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animer fotavtrykk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Анимировать след" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animovať stopu" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Анімувати відбиток" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiển thị vết bố trí" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "吸附动画" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "動畫" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate footprint" + } + } + } + }, + "Animate windows (experimental)" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animate windows (experimental)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウをアニメーション表示(実験的)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "窗口动画(实验性)" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "視窗動畫(實驗性)" + } + } + } + }, + "Animation style" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animation style" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アニメーションの種類" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "动画样式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "動畫樣式" + } + } + } }, "Authorize Rectangle" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تخويل المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoritza Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoritza Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizovat Rectangle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle autorisieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authorize Rectangle" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authorise Rectangle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izinkan Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizza Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleを許可" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 승인" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suteikti Rectangle prieigą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser Rectangle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle toestemming geven" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser Rectangle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoryzacja Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizare Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дать Rectangle доступ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povoliť Rectangle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Auktorisera Rectangle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle'ı Yetkilendir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Авторизувати Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cấp phép cho Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "授权Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "授權 Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "授權Rectangle" + } + } + } + }, + "Authorize…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تفويض ..." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoritza…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoritza…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizovat…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorisieren…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authorize…" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authorise..." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otorisasi…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizza…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "許可…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "승인…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizuoti…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toestemming geven…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoryzuj…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizar…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizare…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Авторизовать…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povoliť…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Auktorisera…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yetkilendir..." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Авторизувати…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cấp phép…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "授权…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "授權⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "授權⋯" + } + } + } }, "Blur appearance" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blur appearance" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ぼかしの外観" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊外观" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊外觀" + } + } + } }, "Blur footprint" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blur footprint" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プレビューの背景をぼかす" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊预览背景" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊預覽背景" + } + } + } + }, + "Blur preview" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blur preview" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ぼかしプレビュー" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊预览" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊預覽" + } + } + } }, "Bottom" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "النصف الأسفل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat inferior" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat inferior" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodní polovina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untere Hälfte" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad inferior" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad inferior" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié du bas" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setengah Bawah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà inferiore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "下半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래쪽 절반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apatinė pusė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nederste halvdel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onderste helft" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedste halvdel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dolna połowa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade inferior" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade inferior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jumătatea de Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижняя половина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodná polovica" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre halvan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alt Yarım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижня половина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nửa dưới" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "下半" + } + } + } }, "Bottom Center Left 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Left 8th" + } + } + } + }, + "Bottom Center Left Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Left Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 가운데 왼쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dưới cùng Trung tâm Bên trái Thứ tám" + } + } + } }, "Bottom Center Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Left Sixteenth" + } + } + } }, "Bottom Center Left Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Left Twelfth" + } + } + } }, "Bottom Center Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Ninth" + } + } + } }, "Bottom Center Right 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Right 8th" + } + } + } + }, + "Bottom Center Right Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Right Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 가운데 오른쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dưới cùng Trung tâm Bên phải Thứ tám" + } + } + } }, "Bottom Center Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Right Sixteenth" + } + } + } }, "Bottom Center Right Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Right Twelfth" + } + } + } }, "Bottom Center Sixth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مركز القاع السادس" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè inferior centre" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè inferior centre" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodní prostřední šestina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unteres mittleres Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Center Sixth" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Centre Sixth" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante abajo centrado" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante abajo centrado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixième bas centre" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam Tengah Bawah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesto inferiore centrale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央下" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 가운데 1/6" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apatinė šeštoji centre" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre midtre sjettedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middenonder zesde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre midtre sjettedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna szósta na środku u dołu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto inferior central" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto Central Inferior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șesimea din Centru Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижняя шестая по центру" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodná prostredná šestina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre mitten sjätte" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alt Orta Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижня центральна шоста частина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 ở giữa bên dưới" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中下1/6" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中下1/6" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中下1/6" + } + } + } }, "Bottom eighths from corners; thirds" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom eighths from corners; thirds" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래쪽 1/8, 모서리에서 3등분" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phần tám dưới cùng từ các góc; phần ba" + } + } + } }, "Bottom Left" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أسفل اليسار" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior esquerra" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior esquerra" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vlevo dole" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unten links" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abajo a la izquierda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abajo a la izquierda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En bas à gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiri Bawah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In basso a sinistra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "왼쪽 아래" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apačioje kairėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre venstre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linksonder" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre venstre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lewy dolny róg" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior esquerdo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior Esquerda" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stânga Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Внизу слева" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vľavo dole" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre vänstra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol Alt" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижній лівий кут" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Góc dưới bên trái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下" + } + } + } }, "Bottom Left 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left 8th" + } + } + } + }, + "Bottom Left Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 왼쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dưới cùng bên trái thứ tám" + } + } + } }, "Bottom Left Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left Ninth" + } + } + } }, "Bottom Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left Sixteenth" + } + } + } }, "Bottom Left Sixth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أسفل اليسار السادس" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè inferior esquerre" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè inferior esquerre" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodní levá šestina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unteres linkes Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left Sixth" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante abajo a la izquierda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante abajo a la izquierda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixième bas gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam Kiri Bawah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesto inferiore sinistro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 왼쪽 1/6" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apatinė šeštoji kairėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre venstre sjettedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linksonder zesde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre venstre sjettedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna szósta po lewej u dołu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto inferior à esquerda" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto Esquerdo Inferior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șesimea din Stânga Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижняя шестая слева" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodná ľavá šestina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre vänstra sjätte" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol Alt Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижня ліва шоста частина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 góc dưới bên trái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下1/6" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下1/6" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左下1/6" + } + } + } }, "Bottom Left Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Left Twelfth" + } + } + } }, "Bottom Right" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أسفل اليمين" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vpravo dole" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unten rechts" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abajo a la derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abajo a la derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En bas à droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kanan Bawah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In basso a destra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오른쪽 아래" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apačioje dešinėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre høgre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechtsonder" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre høgre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prawy dolny róg" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior direito" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inferior Direita" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dreapta Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Внизу справа" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vpravo dole" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre högra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ Alt" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижній правий кут" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Góc dưới bên phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下" + } + } + } }, "Bottom Right 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right 8th" + } + } + } + }, + "Bottom Right Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 오른쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dưới cùng bên phải thứ tám" + } + } + } }, "Bottom Right Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right Ninth" + } + } + } }, "Bottom Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right Sixteenth" + } + } + } }, "Bottom Right Sixth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "السادس الأيمن السفلي" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè inferior dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè inferior dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodní pravá šestina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unteres rechtes Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right Sixth" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante abajo a la derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante abajo a la derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixième bas droit" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam Kanan Bawah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesto inferiore destro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 오른쪽 1/6" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apatinė šeštoji dešinėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre høgre sjettedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechtsonder zesde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre høgre sjettedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna szósta po prawej u dołu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto inferior à direita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto Direito Inferior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șesimea din Dreapta Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижняя шестая справа" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodná pravá šestina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedre högra sjätte" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ Alt Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижня права шоста частина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 góc dưới bên phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下1/6" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下1/6" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右下1/6" + } + } + } }, "Bottom Right Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Right Twelfth" + } + } + } }, "Bottom sixths from corners; thirds" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixièmes bas à partir des coins ; tiers" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodní šestiny z rohů; třetiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untere Sechstel beim Ziehen aus den Ecken; Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos inferiores de las esquinas; tercios" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos inferiores de las esquinas; tercios" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixièmes bas à partir des coins ; tiers" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesti inferiori dagli angoli; terzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3分割(画面端にドラッグで下側6分割)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래쪽 1/6, 모서리에서 3등분" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apatinės šeštosios nuo kampų; trečdalys" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nederste sjettedel fra hjørne; tredjedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedste sjettedel frå hjørne; tredjedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижние шестые от углов; трети" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spodné šestiny z rohov; tretiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom sixths from corners; thirds" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üçte bir (köşelere yaklaşıldığında ise altıda bir)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нижні шості від кутів; третини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 phía dưới ngay góc; 1/3" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自角落则底部⅙;⅓" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自角落則底部⅙;⅓" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "自角落則底部⅙;⅓" + } + } + } }, "Bottom Third" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Third" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 1/3" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ ba dưới cùng" + } + } + } }, "Bottom Two Thirds" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bottom Two Thirds" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래 2/3" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai phần ba dưới cùng" + } + } + } }, "Bring your chosen todo application frontmost" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bring your chosen todo application frontmost" + } + } + } }, "Cancel" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel·la" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel·la" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annulla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセル" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "취소" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atšaukti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отмена" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zrušiť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скасувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Huỷ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + } + } }, "Center" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نصف المركز" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat central" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat central" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vycentrovat polovinu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mittlere Hälfte" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Center" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre Section" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad central" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad central" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié centrale" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Separuh Tengah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà centrale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "半分にして中央に表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가운데 절반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centrinė pusė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midtre halvdel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middelste helft" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midtre halvdel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Połowa na środku" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade central" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade Central" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jumătatea Centrală" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральная половина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vycentrovať polovicu" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitthalvan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orta Yarım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральна половина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/2 giữa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中间半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中半" + } + } + } }, "Center Third" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المركز الثالث" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercer central" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercer central" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prostřední třetina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mittleres Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Center Third" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre Third" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercio central" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercio central" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers central" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tengah Ketiga" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terzo centrale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3にして中央に表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가운데 1/3" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centrinė trečioji" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedel i midten" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middelste derde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedel i midten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna trzecia na środku" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terço central" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terço Central" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Treimea din Mijloc" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральная треть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prostredná tretina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitten tredje" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orta üçte bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральна третина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3 giữa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中间1/3" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央1/3" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央1/3" + } + } + } }, "Center Three Fourths" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وسط ثلاثة أرباع" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tres quarts centrals" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tres quarts centrals" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Střední tři čtvrtiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mittlere drei Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Center Three Fourths" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre Three Quarters" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tres cuartos centrales" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tres cuartos centrales" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trois quarts centraux" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiga Perempat Tengah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tre quarti centrali" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3/4にして中央揃え" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "중앙 3/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vidurinės trys ketvirtys" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midterste tre fjerdedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middelste drie kwart" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midtre tre fjerdedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Środkowe trzy czwarte" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Três quartos centrais" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Três Quartos Centrais" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trei Sferturi Centrale" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральные три четверти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stredné tri štvrtiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mittersta tre fjärdedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orta Üç Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральні три чверті" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3/4 ở giữa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中间3/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中間3/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中間3/4" + } + } + } }, "Center Two Thirds" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الثلثان في الوسط" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dos terços centrals" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prostřední dvě třetiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zentrierte zwei Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Center Two Thirds" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre Two Thirds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dos tercios centrales" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dos tercios al centro" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deux tiers centraux" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dua Pertiga Tengah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Due terzi al centro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央の3分の2" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가운데 2/3" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midtre to tredeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middelste twee derde" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Środkowe dwie trzecie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dois Terços Centrais" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Două treimi pe centru" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральные две трети" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stredné dve tretiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mellersta två tredjedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ortadaki Üçte İki" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центральні дві третини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai phần ba ở giữa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中间2/3" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中間2/3" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中間2/3" + } + } + } }, "Check for updates automatically" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحقق من وجود تحديثات تلقائيا" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comproveu si hi ha actualitzacions automàticament" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comproveu si hi ha actualitzacions automàticament" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automaticky kontrolovat aktualizace" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisch nach Updates suchen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check for updates automatically" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar actualizaciones automáticamente" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar actualizaciones automáticamente" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher automatiquement les mises à jour" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Periksa untuk Pembaruan Otomatis" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla automaticamente gli aggiornamenti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アップデートを自動的に確認" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "자동으로 업데이트 확인" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatiškai tikrinti atnaujinimus" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se etter oppdateringer automatisk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisch controleren op updates" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjå etter oppdateringar automatisk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdzaj aktualizacje automatycznie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Procurar atualizações automaticamente" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique se há atualizações automaticamente" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifică actualizările automat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверять обновления автоматически" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automaticky kontrolovať aktualizácie" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök efter uppdateringar automatiskt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güncellemeleri otomatik kontrol et" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевіряти оновлення автоматично" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tự động kiểm tra các bản cập nhật" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动检查更新" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自動檢查更新項目" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "自動檢查更新項目" + } + } + } }, "Check for Updates…" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحقق من وجود تحديثات…" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca actualitzacions…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca actualitzacions…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zkontrolovat aktualizace…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nach Updates suchen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check for Updates…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar actualizaciones…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar actualizaciones…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mettre à jour…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Periksa Pembaruan…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla aggiornamenti…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アップデートを確認…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "업데이트 확인…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tikrinti atnaujinimus…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se etter oppdateringer…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kijk of er updates zijn…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjå etter oppdateringar…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź aktualizacje…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Procurar por atualizações…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique se há atualizações…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifică Actualizări…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверить обновления…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skontrolovať aktualizácie…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök efter uppdateringar…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güncellemeleri kontrol et…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перевірити оновлення…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm tra các bản cập nhật…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "检查更新…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "檢查更新⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "檢查更新項目⋯" + } + } + } }, "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سيؤدي اختيار Spectacle أيضًا إلى تدوير عرض النافذة 1/2 و 2/3 و 1/3 على الاختصارات المتكررة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si escolliu Spectacle, també es farà un cicle de 1/2, 2/3 i 1/3 d'amplada de finestra a les dreceres repetides" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si escolliu Spectacle, també es farà un cicle de 1/2, 2/3 i 1/3 d'amplada de finestra a les dreceres repetides" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vybráním Spectacle se také bude měnit šířka oken na 1/2, 2/3, a 1/3 při opakovaných příkazech" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn Spectacle ausgewählt wird, werden bei wiederholten Tastaturkurzbefehlen zwischen 1/2, 2/3, und 1/3-Fensterbreiten durchgewechselt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elegir Spectacle también creará un bucle para las anchuras de 1/2, 2/3 y 1/3 del tamaño de la ventana en atajos accionados repetidas veces" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elegir Spectacle también creará un bucle para las anchuras de 1/2, 2/3 y 1/3 del tamaño de la ventana en atajos accionados repetidas veces" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisir Spectacle altérera aussi les largeurs de fenêtre 1/2, 2/3, et 1/3 pour les raccourcis répétés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memilih Spectacle juga akan menggilir 1/2, 2/3, dan 1/3 lebar jendela pada pintasan berulang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scegliere Spectacle alternerà 1/2, 2/3, e 1/3 in larghezza con abbreviazioni ripetute" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacleを選択すると、同じショートカットを繰り返した際にウインドウの幅を1/2、2/3、1/3に順次変更します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle을 선택하여도 단축키를 반복하면 1/2, 2/3, 1/3 창 넓이를 순환합니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pasirinkus Spectacle karštuosius klavišus, taip pat bus cikliškai keičiamas lango plotis 1/2, 2/3 ir 1/3 naudojant kartojančius karštuosius klavišus" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Å velge Spectacle fører også til at man veksler mellom 1/2-, 2/3-, og 1/3-vindusbredder når du bruker samme snarveg flere ganger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Å velja Spectacle fører òg til at ein vekslar mellom 1/2-, 2/3-, og 1/3-vindaugsbreidder når du bruker same snarveg fleire gonger" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybranie Spectacle będzie także zmieniało szerokość okna 1/2, 2/3 i 1/3 przy powtarzających się skrótach." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle também fará com que comandos repetidos alternem o tamanho da janela entre 1/2, 2/3 e 1/3 de largura" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolher Spectacle também vai alternar ente larguras de janelas de 1/2, 2/3 e 1/3 ao repetir atalhos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dacă alegeți Spectacle se vor parcurge 1/2, 2/3, și 1/3 din lățimile ferestrei la repetarea scurtăturilor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выбор горячих клавиш Spectacle также зациклит 1/2, 2/3 и 1/3 ширины окна при повторяющихся горячих клавиш" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zvolením Spectacle sa tiež bude meniť šírka okien na 1/2, 2/3 a 1/3 pri opakovaní skratiek" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Att välja Spectacle kommer också att växla mellan 1/2-, 2/3-, och 1/3-fönsterbredder med upprepade kortkommandon" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle seçilirse, yinelenen kısayollar ekranın 1/2, 2/3 ve 1/3 genişlikleri arasında geçiş sağlar." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вибір Spectacle також циклічно переключає 1/2, 2/3 і 1/3 ширини вікна при повторному використанні комбінації клавіш" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chọn Spectacle cũng sẽ thiết lập tuần hoàn 1/2, 2/3, và 1/3 kích thước cửa sổ khi các phím tắt được lặp lại" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "若选择 Spectacle,重复快捷键也会循环½、⅔、⅓窗口宽度" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果選擇 Spectacle,重複快速鍵也會循環½、⅔、⅓視窗寬度" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "若選擇Spectacle,重複快捷鍵也會循環½、⅔、⅓視窗寬度" + } + } + } }, "Close" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يغلق" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanca" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tanca" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zavřít" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Close" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutup" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiudi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "閉じる" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "닫기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uždaryti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluiten" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lat att" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknij" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Închide" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрыть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zavrieť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stäng" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đóng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "關閉" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "關閉" + } + } + } }, "Configure the divide between side and corner actions" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configure the divide between side and corner actions" + } + } + } + }, + "Conflict with macOS tiling" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konflikt mit macOS Fenstermanagement" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with macOS tiling" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS のタイル表示機能との競合" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS 타일 정리 기능과 충돌" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konflikt s umiestnením dlaždíc v macOS" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xung đột với ô xếp macOS" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "与 macOS 窗口平铺功能冲突" + } + } + } }, "Conflict with system setting" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflit avec le paramètre système" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konflikt mit Systemeinstellung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflicto con los ajustes del sistema" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflicto con los ajustes del sistema" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflit avec le paramètre système" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflitto con Impostazioni di Sistema" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム設定との競合" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템 설정과 충돌" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfliktas su sistemos nustatymu" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konflikt med systeminnstillingene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konflikt med systeminnstillingane" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflito com as configurações do sistema" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Конфликт с системными настройками" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konflikt so systémovým nastavením" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sistem ayarlarıyla çakışma" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xung đội với cài đặt hệ thống" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "与系统设置冲突" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "與系統設定衝突" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Conflict with system setting" + } + } + } + }, + "Copy" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ينسخ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copia" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copia" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopírovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copy" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copier" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salin" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コピー" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복사하기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopijuoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopier" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopiëren" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopier" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copiere" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Копировать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopírovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kopiera" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copy" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Копіювати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sao chép" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "拷贝" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "拷貝" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "複製" + } + } + } + }, + "Copyright © 2019-2026 Ryan Hanson. All rights reserved." : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2019-2026 Ryan Hanson. All rights reserved." + } + } + } + }, + "Corners" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coins" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Racons" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Racons" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rohy" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ecken" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corners" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esquinas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esquinas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coins" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sudur" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angoli" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "画面端" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모서리" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kampai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hjørne" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corners" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hjørne" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Narożniki" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Углы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rohy" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hörn" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Köşeler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Кути" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Các góc" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "角落" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "角落" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "角落" + } + } + } + }, + "Currently using:" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuration actuelle :" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'utilitza actualment:" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "S'utilitza actualment:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktuell verwendet:" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Currently using:" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usando actualmente:" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usando actualmente:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuration actuelle :" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Currently using:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attualmente in uso:" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在の設定:" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "현재 사용 중인 단축키:" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dabar naudojama:" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruker nå:" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Currently using:" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruker no:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Currently using:" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usando atualmente:" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Currently using:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сейчас используется:" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentálne používané:" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använder för närvarande:" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Використовується:" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiện đang sử dụng:" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前使用中:" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "目前正在使用:" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "目前正在使用:" + } + } + } }, "Currently using: " : { + }, + "Cut" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يقطع" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retalla" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retalla" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vyjmout" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ausschneiden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cut" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cortar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cortar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Couper" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potong" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taglia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カット" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오려두기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iškirpti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klipp ut" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Knippen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klypp ut" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wytnij" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recortar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cortar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tăiere" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вырезать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vystrihnúť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klipp ut" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cut" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вирізати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cắt" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "剪切" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "剪下" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "剪下" + } + } + } + }, + "cycle positions on quadrants, cycle sizes on side" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle positions on quadrants, cycle sizes on side" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/4 동작시 위치 순환, 절반 동작시 창 크기 순환" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "vị trí chu kỳ trên góc phần tư, kích thước chu kỳ trên một nửa" + } + } + } + }, + "cycle sizes on side actions" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "دورة ½ و ⅔ و على نصف الإجراءات" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "cicle ½, ⅔, i ⅓ a mitges accions" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "cicle ½, ⅔, i ⅓ a mitges accions" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "změnit šířku oken na ½, ⅔, a ⅓ u polovičních akcí" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wechsle zwischen verschiedenen Größen bei Aktionen für halbe Bildschirme" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle sizes on side actions" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "bucle de ½, ⅔, y ⅓ en acciones de mitad" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "bucle de ½, ⅔, y ⅓ en acciones de mitad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "alterner entre ½, ⅔ et ⅓ lors des actions de moitié d’écran" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "siklus ½, ⅔ dan ⅓ pada setengah tindakan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "scorri tra ½, ⅔, e ⅓ con le azioni di mezzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サイズを半分にするのを繰り返す" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "절반 동작시 창 크기 순환" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "perjungti tarp ½, ⅔ ir ⅓ pusėms" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "bytt mellom størrelser for halv-handlinger" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "byt mellom storleikar for halv-handlingar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "переключаться между ½, ⅔ и ⅓ для половин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "meniť veľkosť pri použití skratiek polovice na:" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "växla mellan storlek på halva åtgärder" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "yarım seçenekleri yinelenirse ½, ⅔, ve ⅓ oranlarında geçiş yap" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "перемикати ½, ⅔, and ⅓ при діях з половиною" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "thay đổi tuần hoàn ½, ⅔, và ⅓ kích thước" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "半屏操作循环½、⅔、⅓" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "一半動作循環½、⅔和⅓" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "一半動作循環½、⅔和⅓" + } + } + } + }, + "cycle through displays" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "دورة من خلال شاشات العرض" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "cicle per les pantalles" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "cicle per les pantalles" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "přesouvat po displejích" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durch Bildschirme wechseln" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle through displays" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "bucle a través de las pantallas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "bucle a través de las pantallas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "parcourir les moniteurs" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "siklus melalui tampilan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "scorri tra schermi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを表示するディスプレイを変更" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "디스플레이 순환" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "perjungineti tarp ekranų" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "gå gjennom skjermene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle through displays" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "gå gjennom skjermane" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle through displays" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle through displays" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "cycle through displays" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "navigare ciclică între ecrane" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "переключаться между дисплеями" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "prepínať medzi displejmi" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "bläddra mellan skärmarna" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ekranlar arasında dolaş" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "циклічно перебирати екрани" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Di chuyển tuần hoàn qua các màn hình" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "循环显示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "循環顯示器" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "循環顯示器" + } + } + } }, "Cyclic corner shortcuts expand:" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cyclic corner shortcuts expand:" + } + } + } }, "Dark" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dark" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ダーク" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "深色" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "深色" + } + } + } }, "Default Shortcuts" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raccourcis par défaut" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dreceres predeterminades" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dreceres predeterminades" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Standard-Tastaturkurzbefehle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Default Shortcuts" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atajos por defecto" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atajos por defecto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raccourcis par défaut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pintasan Bawaan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbreviazioni predefinite" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "デフォルトのショートカット" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 단축키 선택" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Numatytieji karštieji klavišai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Standardsnarvegar" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Default Shortcuts" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Standardsnarvegar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Default Shortcuts" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atalhos padrões" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Default Shortcuts" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Горячие клавиши по-умолчанию" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predvolené skratky" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Standardgenvägar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Типові комбінації клавіш" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Shortcut mặc định" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "默认快捷键" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "預設快速鍵" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "預設快捷鍵" + } + } + } + }, + "Delete" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يمسح" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suprimeix" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smazat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hapus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "削除" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "삭제" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ištrinti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijderen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除" + } + } + } + }, + "Direct resize" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Direct resize" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを直接リサイズ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "直接缩放窗口" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "直接縮放視窗" + } + } + } + }, + "Disable fast dragging to Mission Control" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعطيل السحب السريع إلى Mission Control" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schnelles Ziehen zu Mission Control deaktivieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desactivar el arrastre rápido hacia el Mission Control" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desactivar el arrastre rápido hacia el Mission Control" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactiver le glissement rapide vers Mission Control" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattiva il trascinamento rapido in Mission Control" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mission Controlへの高速ドラッグを無効にする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "미션 컨트롤에 빠른 드래그 비활성화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Išjungti greitą vilkimą „Mission Control“" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå av «raskt drag» til Mission Control" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå av «raskt drag» til Mission Control" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отключить быстрое перетаскивание в Mission Control" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnúť rýchle ťahanie do Mission Control" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable fast dragging to Mission Control" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hızlı sürükleme ile Mission Control'ün açılmasını devre dışı bırak" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вимкнути швидке перетягування до Mission Control" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tắt cơ chế kéo nhanh trong trình Điều khiển Tác vụ (Mission Control)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "禁用快速拖移到调度中心" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "停用快速拖移至「指揮中心」" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "停用快速拖移到「指揮中心」" + } + } + } + }, + "Disable in macOS" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In Systemeinstellungen deaktivieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable in macOS" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS 側を無効化" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS의 기능 끄기" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnúť v macOS" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vô hiệu hóa trong macOS" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在 macOS 里禁用" + } + } + } + }, + "Disable in Rectangle" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In Rectangle deaktivieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disable in Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 側を無効化" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle의 기능 끄기" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnúť v Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vô hiệu hóa trong Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在 Rectangle 里禁用" + } + } + } + }, + "Dismiss" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dismiss" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無視" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "무시" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zatvoriť" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Huỷ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略" + } + } + } + }, + "Display" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moniteur" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Displej" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildschirm" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moniteur" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tampilan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schermo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ディスプレイ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "디스플레이" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekranas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skjerm" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Display" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skjerm" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekran" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tela" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ecrã" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дисплей" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Displej" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekran" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дисплей" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiển thị" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示器" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示器" + } + } + } + }, + "do nothing" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا تفعل شيئا" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "no fer res" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "no fer res" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "nic nedělat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nichts tun" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "do nothing" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no hacer nada" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "no hacer nada" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ne rien faire" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak melakukan apapun" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "nessuna azione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "何もしない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아무것도 하지 않음" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "nieko nedaryti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "gjør ingenting" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "do nothing" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "gjer ingenting" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "do nothing" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "do nothing" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "do nothing" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "nu face nimic" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ничего не делать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "nič nerobiť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "gör ingenting" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "hiçbir şey yapma" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "не робити нічого" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không làm gì" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "不执行任何操作" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "不執行任何動作" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "不執行任何操作" + } + } + } }, "Double-click window title bar to maximize/restore" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انقر نقرًا مزدوجًا فوق شريط عنوان النافذة لتكبير / استعادة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doppelklick auf die Titelleiste des Fensters zum Maximieren/Wiederherstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximise/restore" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haz click dos veces en la barra de título de la ventana para maximizar/restaurar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haz click dos veces en la barra de título de la ventana para maximizar/restaurar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-cliquer sur la barre de titre d'une fenêtre pour maximiser/restaurer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fai doppio clic sul titolo della finestra per massimizzare/ripristinare" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウのタイトルバーをダブルクリックすることで、最大化/最大化解除を行う" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "윈도우 제목 막대를 두 번 클릭해 확대/축소" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spustelėkite du kartus lango antraštės juostą, kad padidintumėte/atstatytumėte" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dobbeltklikk vindustittel for å maksimere eller tilbakestille" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dobbeltklikk vindaugstittel for å maksimera eller tilbakestilla" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Duplo clique no title bar da janela para maximizar/restaurar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дважды щелкните по заголовку окна, чтобы увеличить/уменьшить его размер" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dvojitým kliknutím na lištu s názvom maximalizovať/obnoviť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Büyütmek/Yeniden yüklemek için üst pencere çubuğuna çift tıklayın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhấp đúp trên thanh tiêu đề để phóng to/khôi phục" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "连按窗口标题以缩放/恢复" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "連按兩下視窗標題列來最大化/復原" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Double-click window title bar to maximize/restore" + } + } + } + }, + "Drag to screen edge tiling is enabled in both Rectangle and macOS." : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Ziehen zum Bildschirmrand für das Anordnen von Fenstern ist sowohl in Rectangle als auch in den macOS Systemeinstellungen aktiviert." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drag to screen edge tiling is enabled in both Rectangle and macOS." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "\"画面の端にドラッグしてタイル表示\"が、Ractangle と macOS の両方で有効になっています。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "화면 가장자리로 드래그해 타일을 정렬하는 기능이 Rectangle과 macOS 설정에서 모두 켜져 있습니다." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potiahnutie na okraj obrazovky je zapnuté v Rectangle aj macOS." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tính năng kéo để ghép cạnh màn hình được bật trong cả Rectangle và macOS." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在 Rectangle 和 macOS 中都启用了拖移窗口至屏幕边缘实现平铺" + } + } + } + }, + "Edit" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يحرر" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edita" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edita" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upravit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bearbeiten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifier" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sunting" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifica" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "編集" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "편집" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redaguoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rediger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bewerken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rediger" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edycja" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Editare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Редактировать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upraviť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redigera" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Edit" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Редагувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chỉnh sửa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "编辑" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "編輯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "編輯" + } + } + } + }, + "Eighths" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eighths" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ tám" + } + } + } }, "Enable Rectangle.app" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحقق من Rectangle.app" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comprova Rectangle.app" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comprova Rectangle.app" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zkontrolovat Rectangle.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle.app prüfen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable Rectangle.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compruebe Rectangle.app" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compruebe Rectangle.app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier Rectangle.app" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Periksa Rectangle.app" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla Rectangle.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle.appを確認してください" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle.app 확인하기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Patikrinkite failą Rectangle.app." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk Rectangle.app" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleer Rectangle.app" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk Rectangle.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź Rectangle.app." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar Rectangle.app" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar Rectangle.app" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifică Rectangle.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверьте файл Rectangle.app." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skontrolovať Rectangle.app" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontrollera Rectangle.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle.app'ı işaretleyerek izin verin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увімкнути Rectangle.app" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bật Rectangle.app" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用 Rectangle.app" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用 Rectangle.app" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用Rectangle.app" + } + } + } }, "Enable Todo Mode" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer le mode Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Habilita mode Todo" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Habilita mode Todo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "To-do-Modus aktivieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable Todo Mode" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Habilitar el modo 'Todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Habilitar el modo 'Todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer le mode Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktifkan Mode Todo" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva modalità In evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ToDoモードを有効にする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 모드 활성화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Įjungti Todo programos režimą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiver Gjøreliste-modus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable Todo Mode" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiver Gjereliste-modus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable Todo Mode" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Habilitar Todo Mode" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable Todo Mode" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить режим Todo приложения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapnúť Todo režim" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivera Att göra-läge" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увімкнути режим Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bật chế độ Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用待办模式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用待辦模式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用待辦模式" + } + } + } + }, + "Enter Full Screen" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل ملء الشاشة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar a pantalla completa" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar a pantalla completa" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spustit režim celé obrazovky" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vollbildmodus" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter Full Screen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar en pantalla completa" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar en pantalla completa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Passer en plein écran" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masuk Layar Penuh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva modalità a schermo intero" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "フルスクリーンにする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "전체 화면 시작" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Įveskite visą ekraną" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åpne helskjerm" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ga naar volledig scherm" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opne heilskjerm" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pełny ekran" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar em tela cheia" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrar em ecrã completo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Intră în Ecran Complet" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейти в полноэкранный режим" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobraziť na celej obrazovky" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öppna helskärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tam Ekrana Geç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейти до повноекранного режиму" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toàn màn hình" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "进入全屏幕" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "進入全螢幕" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "進入全螢幕" + } + } + } + }, + "Export" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "يصدّر" + } + }, + "ca" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exporta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exporta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export Config" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exporter" + } + }, + "id" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Expor" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Esporta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "エクスポート" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "내보내기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Eksportuoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Eksporter" + } + }, + "nn" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Eksporter" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Экспорт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Exportera" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Dışa Aktar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Експортувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Xuất" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "导出" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "輸出" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "輸出" + } + } + } }, "Export Config" : { - + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export Config" + } + } + } + }, + "Extra Shortcuts" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extra Shortcuts" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "추가 단축키" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дополнительные горячие клавиши" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phím tắt bổ sung" + } + } + } + }, + "Extras" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extras" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "⋯" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "⋯" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "⋯" + } + } + } + }, + "File" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ملف" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fitxer" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fitxer" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soubor" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datei" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "File" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archivo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Archivo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fichier" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berkas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "File" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ファイル" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "파일" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Failas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arkiv" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bestand" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arkiv" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plik" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arquivo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ficheiro" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fișier" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Файл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Súbor" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arkiv" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosya" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Файл" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tệp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "文件" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "檔案" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "檔案" + } + } + } + }, + "Find" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يجد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temukan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trova" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検索" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "찾기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ieškoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zoeken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znajdź" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Căutare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Найти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nájsť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bul" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Знайти" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tìm kiếm" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查找" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找" + } + } + } + }, + "Find and Replace…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بحث واستبدال ..." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca i reemplaça…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca i reemplaça…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat a nahradit…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchen und Ersetzen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find and Replace…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar y reemplazar…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar y reemplazar…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher et remplacer…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temukan dan Ganti…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trova e sostituisci…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検索と置換…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "찾기 및 대치…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rasti ir pakeisti…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn og erstatt…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zoek en vervang…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn og byt ut…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znajdź i zastąp…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar e substituir…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar e Substituir…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Căutare și Înlocuire…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Найти и заменить…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nájsť a nahradiť…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök och ersätt…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find and Replace…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Знайти і замінити…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查找和替换…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找與取代⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找與取代⋯" + } + } + } + }, + "Find Next" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بحث عن التالي" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca següent" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca següent" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat další" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitersuchen (vorwärts)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find Next" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar siguiente" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar siguiente" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher le suivant" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temukan Berikutnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trova successivo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次を検索" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다음 찾기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ieškoti toliau" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn neste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volgende zoeken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn neste" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znajdź następny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar próximo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar Próximo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caută în Față" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Найти дальше" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nájsť ďalšie" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök nästa" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sonrakini Bul" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Знайти наступне" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tìm kiếm kế tiếp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查找下一个" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找下一個" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找下一個" + } + } + } + }, + "Find Previous" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "البحث عن السابق" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca anterior" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca anterior" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat předchozí" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitersuchen (rückwärts)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find Previous" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar anterior" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar anterior" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher le précédent" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temukan Sebelumnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trova precedente" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "前を検索" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이전 찾기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rasti ankstesnį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn forrige" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zoek vorige" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn førre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znajdź poprzedni" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar anterior" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar Anterior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caută în Spate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Найти предыдущий" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nájsť predchádzajúce" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök föregående" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öncekini Bul" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Знайти попередній" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tìm kiếm trước đó" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查找上一个" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找上一個" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找上一個" + } + } + } + }, + "Find…" : { + "extractionState" : "manual", + "generatesSymbol" : false, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يجد…" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerca…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suchen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechercher…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temukan…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trova…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "検索…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "찾기…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rasti…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zoek…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finn…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znajdź…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buscar…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encontrar…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Căutare…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Найти…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Násjť…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sök…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Find…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Знайти…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tìm kiếm …" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查找…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找⋯" + } + } + } }, "First Fourth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الرابع الأول" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer quart" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer quart" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "První čtvrtina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erstes Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "First Fourth" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "First Quarter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer cuarto" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer cuarto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Premier quart" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperempat Pertama" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primo quarto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左から1番目" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "첫번째 1/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pirma ketvirtis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Første fjerdedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eerste kwart" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fyrste fjerdedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierwsza ćwiartka" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiro quarto" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiro Quarto" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primul Sfert" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Первая четверть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prvá štvrtina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Första fjärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перша чверть" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/4 đầu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左首1/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左首1/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左首1/4" + } + } + } }, "First Third" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاول الثالث" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer terç" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer terç" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "První třetina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erstes Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "First Third" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer tercio" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primer tercio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers du haut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sepertiga Pertama" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primo terzo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3にして左寄せ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "처음 1/3" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pirmasis trečdalis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Første tredjedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eerste derde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fyrste tredjedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna trzecia z lewej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiro terço" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiro Terço" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prima Treime" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Первая треть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prvá tretina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Första tredje" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk üçte bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перша третина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3 đầu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左首1/3" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側1/3" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側1/3" + } + } + } }, "First Three Fourths" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أول ثلاثة أرباع" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primers tres quarts" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primers tres quarts" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "První tři čtvrtiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erste drei Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "First Three Fourths" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "First Three Quarters" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeros tres cuartos" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeros tres cuartos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trois quarts de gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiga Perempat Pertama" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primi tre quarti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3/4にして左寄せ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "처음 3/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pirmosios trys ketvirtys" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Første tre fjerdedeler" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fyrste tre fjerdedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pierwsze trzy czwarte" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiro três quartos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiros Três Quartos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primele Trei Sferturi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Первые три четверти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prvé tri štvrtiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Första tre fjärdedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk Üç Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перші три чверті" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3/4 đầu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左侧3/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側3/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側3/4" + } + } + } }, "First Two Thirds" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أول ثلثين" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primers dos terços" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primers dos terços" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "První dvě třetiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei Drittel links" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "First Two Thirds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeros dos tercios" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeros dos tercios" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deux tiers du haut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dua Pertiga Pertama" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primi due terzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2/3にして左寄せ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "처음 2/3" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kairės dvi trečiosios" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Første to tredjedelar" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eerste tweederde deel" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fyrste to tredjedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dwie trzecie z lewej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiros dois terços" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primeiros Dois Terços" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Primele Două Treimi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Первые две трети" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prvé dve tretiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Första två tredjedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk iki üçte bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перші дві третини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "2/3 đầu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左侧2/3" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側2/3" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側2/3" + } + } + } }, "Follow System" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow System" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システムに合わせる" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "跟随系统" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "跟隨系統" + } + } + } + }, + "Fourths" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quarts" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quartes" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quartes" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Čtvrtiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quarters" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuartos" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuartos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quarts" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperempat" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quarti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "4分割" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "4등분" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ketvirtys" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjerdedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kwarten" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjerdedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ćwiartki" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quartos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quartos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Четверти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Štvrtiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjärdedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Четверини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phần tư" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "四等分" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "四等分" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "四等分" + } + } + } }, "Fourths columns" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Colonnes de quarts" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Čtvrtiny - sloupce" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viertel Spalten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quarter columns" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Columnas cuartas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Columnas cuartas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Colonnes de quarts" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quarti in colonne" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "横向きに4分割" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/4 열" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ketvirtadaliai-stulpeliai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjerdedelskolonner" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjerdedelskolonner" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Четверти-колонны" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Štvrtiny stĺpce" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fourths columns" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Четвертини стовпців" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Các cột phần tư" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "四等分栏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "四等分直欄" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "四等分直欄" + } + } + } }, "Gaps between windows" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فجوات بين النوافذ" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espai entre finestres" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espai entre finestres" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mezery mezi okny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abstände zwischen Fenstern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gaps between windows" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espacio entre ventanas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espacio entre ventanas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Écart entre fenêtres" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jarak Antar Jendela" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spazio tra le finestre" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウの間隔" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "창 사이 간격" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarpai tarp langų" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mellomrom mellom vinduene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gaps between windows" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mellomrom mellom vindaugo" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przestrzeń między oknami" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espaço entre janelas" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Espaços entre janelas" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Goluri între ferestre" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Промежутки между окнами" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Medzery medzi oknami" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mellanrum mellan fönsterna" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pencereler arası boşluk" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відступи між вікнами" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khoảng cách giữa các cửa sổ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "窗口间空隙" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "視窗間空隙" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "視窗間空隙" + } + } + } + }, + "General" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réglages" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuració" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuració" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavení" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "General" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustes" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustes" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réglages" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengaturan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impostazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "일반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nustatymai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Settings" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillingar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurações" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Definições" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setări" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavenia" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Genel Ayarlar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштування" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tổng quan" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定" + } + } + } + }, + "Go to System Preferences → Security & Privacy → Privacy → Accessibility" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انتقل إلى تفضيلات النظام ← الأمان والخصوصية ← الخصوصية ← إمكانية الوصول" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anar a Preferències del sistema → Seguretat i privacitat → Privacitat → Accesibilitat" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anar a Preferències del sistema → Seguretat i privacitat → Privacitat → Accesibilitat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jděte do Předvolby systému -> Zabezpečení a soukromí -> Soukromí -> Zpřístupnění" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gehe zu Systemeinstellungen → Sicherheit & Datenschutz → Datenschutz → Bedienungshilfen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Preferences → Security & Privacy → Privacy → Accessibility" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaya a Preferencias del sistema → Seguridad y privacidad → Privacidad → Accesibilidad" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaya a Preferencias del sistema → Seguridad y privacidad → Privacidad → Accesibilidad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Allez dans Préférences Système → Sécurité et confidentialité → Confidentialité → Accessibilité" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buka Preferensi Sistem → Keamanan & Privasi → Privasi → Aksesibilitas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vai a Preferenze di Sistema → Sicurezza e privacy → Privacy → Accessibilità" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム環境設定→セキュリティとプライバシー→プライバシー→アクセシビリティに移動してください" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템 환경설정 → 보안 및 개인 정보 보호 → 개인 정보 보호 → 손쉬운 사용으로 이동하십시오" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eikite į Sistemos nustatymus → Apsauga ir saugumas → Privatumas → Universalusis prieinamumas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå til Systeminnstillinger → Personvern og sikkerhet → Personvern → Tilgjengelighet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ga naar Systeemvoorkeuren → Beveiliging en privacy → Privacy → Toegankelijkheid" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå til Systeminnstillingar → Personvern og tryggleik → Personvern → Tilgjengelegheit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przejdź do Preferencji systemowych → Ochrona i prywatność → Prywatność → Dostępność" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vá em Preferências do Sistema → Segurança e Privacidade → Privacidade → Acessibilidade" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceda a Preferências do Sistema → Segurança e Privacidade → Privacidade → Privacidade → Acessibilidade" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deschide System Preferences → Security & Privacy → Privacy → Accesibilitate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейдите в Системные настройки → Защита и безопасность → Конфиденциальность → Универсальный доступ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prejdi do Systémové nastavenia -> Súkromie a bezpečnosť -> Súkromie -> Prístupnosť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå till Systeminställningar → Säkerhet och sekretess → Sekretess → Tillgänglighet" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sistem Tercihleri -> Güvenlik & Gizlilik > Güvenlik > Erişilebilirlik menüsüne gidin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейдіть до Налаштування системи → Безпека та конфіденційність → Конфіденційність → Доступність" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đi đến Cài đặt hệ thống → Quyền riêng tư & Bảo mật → Trợ năng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系統偏好設定 → 安全性與隱私權 → 隱私權 → 輔助使用" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系統設定 → 保安與私隱 → 私隱 → 輔助使用" + } + } + } }, "Go to System Settings → Privacy & Security → Accessibility" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aller dans Réglages Système → Confidentialité et sécurité → Accessibilité" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gehe zu Systemeinstellungen → Datenschutz & Sicherheit → Bedienungshilfen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaya a ajustes de sistema → Privacidad y Seguridad → Accesibilidad" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaya a ajustes de sistema → Privacidad y Seguridad → Accesibilidad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aller dans Réglages Système → Confidentialité et sécurité → Accessibilité" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vai a Impostazioni di Sistema → Privacy e sicurezza → Accessibilità" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム設定→プライバシーとセキュリティ→アクセシビリティを選択します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eikite į Sistemos nuostatas → Privatumas ir saugumas → Privatumas → Universalus prieinamumas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå til Systeminnstillinger → Personvern og sikkerhet → Tilgjengelighet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå til Systeminnstillingar → Personvern og tryggleik → Tilgjengelegheit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vá em Preferências do Sistema → Segurança e Privacidade → Privacidade → Acessibilidade" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейдите в Системные настройки → Конфиденциальность и безопасность → Конфиденциальность → Универсальный доступ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prejdi do Systémové nastavenia → Súkromie a bezpečnosť → Prístupnosť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Accessibility" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sistem Ayarları → Gizlilik ve Güvenlik → Erişikebilirlik menüsüne gidin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейти до Налаштування системи → Конфіденційність та безпека → Доступність" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đi đến Cài đặt hệ thống → Quyền riêng tư & Bảo mật → Trợ năng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系统设置 → 安全性与隐私 → 辅助功能" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系統設定 → 隱私權與安全性 → 輔助使用" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系統設定 → 保安與私隱 → 輔助使用" + } + } + } }, "Go to System Settings → Privacy & Security → Device Control and Data Access" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Go to System Settings → Privacy & Security → Device Control and Data Access" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム設定→プライバシーとセキュリティ→デバイスの制御とデータへのアクセスを選択します" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系统设置 → 隐私与安全性 → 设备控制和数据访问" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "前往 系統設定 → 隱私權與安全性 → 裝置控制和資料取用" + } + } + } }, "Green stoplight button maximizes instead of Full Screen" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Green stoplight button maximizes instead of Full Screen" + } + } + } + }, + "Grid Positions" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grid Positions" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "그리드 위치" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vị trí lưới" + } + } + } + }, + "Half actions preserve the window's size on the other axis" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Half actions preserve the window's size on the other axis" + } + } + } + }, + "Haptic feedback" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Haptisches Feedback" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Provide haptic feedback" + } + }, + "ja" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "触覚フィードバック" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "햅틱 피드백" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Тактильный отклик" + } + }, + "sk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Haptická odozva" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Phản hồi xúc giác" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "触感反馈" + } + } + } + }, + "Help" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يساعد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nápověda" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hilfe" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Help" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayuda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayuda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aide" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bantuan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aiuto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ヘルプ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "도움말" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pagalba" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hjelp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hulp" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hjelp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomoc" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajutor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помощь" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomocník" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hjälp" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yardım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Довідка" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trợ giúp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "帮助" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輔助說明" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "輔助說明" + } + } + } }, "Hide menu bar icon" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إخفاء رمز شريط القائمة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amaga la icona de la barra de menús" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amaga la icona de la barra de menús" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skrýt ikonu z řádku nabídek" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Symbol in der Menüleiste ausblenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide menu bar icon" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar el icono de la barra de menús" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar el icono de la barra de menús" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masquer l'icône dans la barre des menus" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sembunyikan ikon bilah menu" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nascondi l'icona dalla barra dei menu" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メニューバーにアイコンを表示しない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메뉴 막대 아이콘 숨김" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slėpti piktogramą iš meniu juostos" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skjul menyradikonet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verberg het menubalk-pictogram" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gøym menyradikonet" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukryj ikonę paska menu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar ícone da barra de menu" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar ícone da barra de menu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ascunde iconița din bara de meniu" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скрыть значок из строки меню" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skryť ikonu v lište" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dölj menyradens ikon" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menü simgesini gizle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Приховати піктограму у рядку меню" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ẩn biểu tượng trên thanh menu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "隐藏菜单栏图标" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏選單列圖示" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏選單列圖像" + } + } + } + }, + "Hide Others" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إخفاء الآخرين" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amaga els altres" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amaga els altres" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skrýt ostatní" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Andere ausblenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide Others" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar otros" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar otros" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masquer les autres" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sembunyikan Lainnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nascondi altre" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ほかを隠す" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "나머지 가리기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slėpti kitą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skjul andre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verberg andere" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gøym andre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukryj Inne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esconder Outros" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esconder Outros" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ascunde restul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скрыть другое" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skryť ostatné" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dölj andra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide Others" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сховати інші" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ẩn những thứ khác" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "隐藏其他" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏其他" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏其他" + } + } + } + }, + "Hide Rectangle" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إخفاء المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amaga Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amaga Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skrýt Rectangle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle ausblenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide Rectangle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Masquer Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sembunyikan Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nascondi Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleを非表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 가리기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slėpti Rectangle" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skjul Rectangle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verberg Rectangle" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gøym Rectangle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukryj Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ocultar Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ascunde Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скрыть Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skryť Rectangle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dölj Rectangle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle'ı Gizle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сховати Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ẩn Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "隐藏 Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏 Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏Rectangle" + } + } + } }, "Hold any modifier key or use the window menu for default macOS behavior" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hold any modifier key or use the window menu for default macOS behavior" + } + } + } }, "Horizontal (L/R, %)" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horizontal (L/R, %)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수평 (좌/우, %)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ngang (trái/phải, %)" + } + } + } }, "horizontally" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "horizontally" + } + } + } + }, + "Horizontally" : { }, "Hover cursor near the top left corner of a window to show the list" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hover cursor near the top left corner of a window to show the list" + } + } + } + }, + "ⓘ" : { + "extractionState" : "manual", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "ⓘ" + } + } + } }, "If the area is too small, recent apps will be hidden" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إذا كانت المنطقة صغيرة جدًا ، فسيتم إخفاء التطبيقات الحديثة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si l'àrea és massa petita, les aplicacions recents s'amagaran" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si l'àrea és massa petita, les aplicacions recents s'amagaran" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokud je oblast příliš malá, nedávné aplikace budou skryté" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn der Bereich zu klein ist, werden die zuletzt verwendeten Programme ausgeblendet." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si el área es demasiado pequeña, las aplicaciones recientes serán ocultadas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si el área es demasiado pequeña, las aplicaciones recientes serán ocultadas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si la zone est trop petite, les applications récentes seront masquées" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se l'area è troppo piccola, le app recenti saranno nascoste" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "エリアが小さい場合、最近使ったアプリケーションは非表示になります" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "영역이 너무 작으면 최근 앱들이 숨겨집니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jei sritis per maža, paskutinės programos bus paslėptos" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om området er for lite vil siste brukte apper ikke være synlige" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om området er for lite vil siste brukte appar ikkje vera synlege" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se a área é muito pequeno, aplicativos recentes serão ocultados" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если область слишком мала, последние приложения будут скрыты" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak je oblasť príliš malá, nedávne aplikácie sa skryjú" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the area is too small, recent apps will be hidden" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eğer alan çok darsa, son uygulamalar gizlenecektir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Якщо область занадто мала, останні застосунки будуть приховані" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nếu vùng hiển thị quá nhỏ, các ứng dụng hiện tại sẽ bị ẩn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "若该区域过小,最近使用的应用程序将被隐藏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果該區域過小,將會隱藏最近使用過的應用程式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果該區域過小,最近使用過的應用程式將被隱藏" + } + } + } + }, + "If the checkbox is disabled, click the padlock and enter your password" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إذا تم تعطيل مربع الاختيار ، فانقر فوق القفل وأدخل كلمة المرور الخاصة بك" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si la casella de selecció està desactivada, feu clic al cadenat i introduïu la vostra contrasenya." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si la casella de selecció està desactivada, feu clic al cadenat i introduïu la vostra contrasenya." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokud je zaškrtávací políčko vypnuto, tak klikněte na zámek a zadejte vaše heslo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn das Kontrollkästchen deaktiviert ist, klicke auf das Vorhängeschloss und gib dein Passwort ein." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If the checkbox is disabled, click the padlock and enter your password" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si la casilla de verificación está desactivada, haga clic en el candado e introduzca su contraseña." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si la casilla de verificación está desactivada, haga clic en el candado e introduzca su contraseña." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si la case est décochée, cliquez sur le cadenas et entrez votre mot de passe." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jika kotak centang dinonaktifkan, klik gembok dan masukkan kata sandi Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se la casella di controllo è disattivata, fai clic sul lucchetto e inserisci la password" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "チェックボックスが無効になっている場合は、カギをクリックしてパスワードを入力してください" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인란이 비활성화되어 있으면, 자물쇠를 클릭하고 암호를 입력하세요" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jei žymėjimas yra išjungtas, spustelėkite užraktą ir įveskite savo slaptažodį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om avkryssingsboksen er inaktiv, klikker du på hengelåsen og skriver inn passordet ditt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als het selectievakje is uitgeschakeld, klik dan op het hangslot en voer uw wachtwoord in." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om avkryssingsboksen er inaktiv, klikkar du på hengelåsen og skriv inn passordet ditt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jeśli pole wyboru nie jest zaznaczone, kliknij kłódkę i wpisz hasło." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se a seleção estiver desativada, clique no cadeado e insira sua senha" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se a caixa de verificação estiver desactivada, clique no cadeado e introduza a sua palavra-passe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dacă checkbox-ul este dezactivat, apăsați pe lacăt și introduceți parola" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если флажок отключен, щелкните на замок и введите свой пароль" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak je zaškrtávacie políčko vypnuté, klikni na zámok a zadaj svoje heslo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om kryssrutan är inaktiverad klickar du på hänglåset och anger ditt lösenord." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eğer işaret kutusu devre dışı ise, kilit simgesine tıklayıp şifrenizi girin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Якщо галочка вимкнена, натисніть на замок і введіть пароль" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nếu hộp kiểm bị tắt, hãy nhấp vào ổ khóa và nhập mật khẩu của bạn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果复选框已禁用,点按锁型图标,然后输入您的密码" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果註記框已停用,按一下鎖頭圖示,然後輸入您的密碼" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果剔選框已停用,按一下掛鎖圖像,然後輸入你的密碼" + } + } + } + }, + "If you repeat move or side actions, the window will move to the next display instead of 1/2, 2/3, and 1/3 size." : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إذا كررت إجراء نقل أو نصف ، فستنتقل النافذة إلى الشاشة التالية بدلاً من حجم 1/2 و 2/3 و 1/3" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si repeteixes accions de meitat o desplaçar, la finestra es mourà a la següent pantalla en lloc d'ajustar-se a 1/2, 2/3 o 1/3 de la mida." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si repeteixes accions de meitat o desplaçar, la finestra es mourà a la següent pantalla en lloc d'ajustar-se a 1/2, 2/3 o 1/3 de la mida." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wechsle bei wiederholten Links- oder Rechts-Befehlen zum nächsten Monitor anstatt zwischen den Fenstergrößen 1/2, 2/3, und 1/3." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If you repeat move or side actions, the window will move to the next display instead of 1/2, 2/3, and 1/3 size." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si repites acciones de mitad o desplazar, la ventana se moverá a la siguiente pantalla en lugar de ajustarse a 1/2, 2/3 o 1/3 del tamaño." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si repites acciones de mitad o desplazar, la ventana se moverá a la siguiente pantalla en lugar de ajustarse a 1/2, 2/3 o 1/3 del tamaño." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En répétant une action de déplacement ou de moitié d'écran, la fenêtre sera déplacée sur le moniteur suivant au lieu d'alterner les tailles 1/2, 2/3, et 1/3." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jika Anda mengulangi gerakan atau tindakan setengah, jendela akan berpindah ke tampilan berikutnya, bukan ukuran 1/2, 2/3, dan 1/3." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se ripeti lo spostamento o i mezzi spostamenti, la finestra si sposterà sullo schermo successivo invece che ridimensionarsi a 1/2, 2/3 o 1/3." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを移動する動作や半分のサイズに変更する動作を繰り返すと、ウインドウをサイズ変更するのではなく、次のディスプレイに移動します。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이동하기 또는 절반 동작을 반복하면 창이 1/2, 2/3, 혹은 1/3 크기가 되는 대신, 다음 디스플레이로 이동합니다." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jei pakartosite judėjimo ar pusės veiksmus, langas bus perkeltas į kitą ekraną, o ne į 1/2, 2/3 ir 1/3 dydį." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om du gjentar flytt- eller halv-handlinger, vil vinduet flyttes til neste skjerm i stedet for 1/2-, 2/3- og 1/3-størrelser." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit geldt alleen voor verplaatsingen of halve acties. De helft van de acties zal geen 2/3 & 1/3 gedrag uitvoeren indien ingeschakeld." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om du gjentek flytt- eller halv-handlingar, vil vindauget bli flytta til neste skjerm i staden for 1/2-, 2/3- og 1/3-storleik." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jeżeli powtórzysz akcję przenoszącą okno, bądź zmieniającą jego rozmiar, okno przeniesie się do następnego pulpitu zamiast zmniejszać się do 1/2, 2/3 bądź 1/3 swego rozmiaru." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repetindo os comandos de movimento e divisão, a janela será movida para a próxima tela, em vez de diminuir para 1/2, 2/3 ou 1/3 do tamanho" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se repetir as ações de mover ou de metade, a janela passa para o ecrã seguinte, em vez de mudar de tamanho para 1/2, 2/3, and 1/3." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "При повторе перемещения или изменения размеров до трети или половины окна оно будет перемещено на следующий экран вместо изменения размеров." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pri opakovaní presunutia alebo skratiek pre polovice sa okno presunie na ďalší displej namiesto ½, ⅔ a ⅓ veľkosti." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Om du upprepar drag eller halva åtgärder, kommer fönstret att flyttas till nästa skärm i stället för 1/2-, 2/3- och 1/3-storlek." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nếu bạn lặp lại thao tác di chuyển hoặc một nửa, cửa sổ sẽ chuyển sang màn hình hiển thị tiếp theo thay vì kích thước 1/2, 2/3 và 1/3." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果你重复移动或进行一半的移动操作,窗口将移动到下一个显示器,而不是 1 / 2、2 / 3 或 1 / 3 大小。" + } + } + } }, "Ignore frontmost.app" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تجاهل frontmost.app" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignora frontmost.app" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignora frontmost.app" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorovat frontmost.app" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "frontmost.app ignorieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignore frontmost.app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorar frontmost.app" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorar frontmost.app" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorer frontmost.app" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abaikan frontmost.app" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignora frontmost.app" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "frontmost.appを無視" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "frontmost.app 무시" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignoruoti frontmost.app" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorer frontmost.app" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negeer frontmost.app" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorer frontmost.app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignoruj frontmost.app" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorar frontmost.app" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorar frontmost.app" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignoră frontmost.app" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Игнорировать frontmost.app" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorovať frontmost.app" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorera frontmost.app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "frontmost.app uygulamasını yoksay" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ігнорувати frontmost.app" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bỏ qua frontmost.app" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略 frontmost.app" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略 frontmost.app" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略frontmost.app" + } + } + } + }, + "Import" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "يستورد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importa" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importa" + } + }, + "cs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Import Config" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importer" + } + }, + "id" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Impor" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "インポート" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "가져오기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importuoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importer" + } + }, + "nn" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importer" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Импорт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Importera" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "İçe Aktar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Імпортувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nhập" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "导入" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "輸入" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "輸入" + } + } + } }, "Import Config" : { - + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Import Config" + } + } + } }, "In the Rectangle menu, enable Todo Mode." : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "In the Rectangle menu, enable Todo Mode." + } + } + } }, "In the Rectangle menu, select\n\"Use [Application] as Todo App\"" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + } + } + } + }, + "Jump to Selection" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انتقل إلى التحديد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salta a la selecció" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salta a la selecció" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazit výběr" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zur Auswahl springen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jump to Selection" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ir a la selección" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ir a la selección" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aller à la sélection" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lompat ke Terpilih" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vai alla selezione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "選択部分へジャンプ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택 부분으로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pereiti prie pasirinkto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå til markering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ga naar selectie" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gå til markering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przejdź do wyboru" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ir para a seleção" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ir para a seleção" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sari la Selecție" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейти к выбранному" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prejsť na výber" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoppa till markerad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jump to Selection" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перейти до вибору" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhảy đến lựa chọn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "跳到所选内容" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "跳至所選範圍" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "跳去所選範圍" + } + } + } }, "Keep a chosen application visible on the right of your primary screen at all times" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "احتفظ بالتطبيق المختار مرئيًا على يمين شاشتك الأساسية في جميع الأوقات" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manté l'aplicació escollida visible a la dreta de la pantalla principal en tot moment" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manté l'aplicació escollida visible a la dreta de la pantalla principal en tot moment" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazí vybranou aplikaci vždy na pravé straně vaší hlavní obrazovky" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Halte eine ausgewählte Anwendung auf der rechten Seite des Hauptbildschirms im Vordergrund." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right of your primary screen at all times" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantener la aplicación elegida visible a la derecha de la pantalla primaria en todo momento" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantener la aplicación elegida visible a la derecha de la pantalla primaria en todo momento" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Garder une application visible à tout moment sur la droite de votre écran principal" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Biarkan aplikasi yang dipilih terlihat di sebelah kanan layar utama Anda setiap saat" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tieni l'applicazione scelta sempre visibile sulla destra del tuo schermo principale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メインディスプレイの右部分に、指定されたアプリケーションを常に表示します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택한 응용 프로그램을 메인 화면 오른쪽에 항상 표시합니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laikyti pasirinktą programą nuolat matomą dešinėje pagrindinio ekrano pusėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjør et valgt program synlig hele tida til høgre på hovedskjermen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right of your primary screen at all times" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjer eit valt program synleg heile tida til høgre på hovudskjermen din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right of your primary screen at all times" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right of your primary screen at all times" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right of your primary screen at all times" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Păstrează tot timpul o aplicație la alegere vizibilă în dreapta ecranului principal" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Держать выбранное приложение постоянно видимым в правой части основного экрана" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ponechá zvolenú aplikáciu vždy zobrazenú na pravej strane hlavnej obrazovky" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behåll en vald applikation hela tiden synlig till höger på din primära skärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçtiğiniz bir uygulamayı ana ekranınızın sağında her zaman görüntümenizi sağlar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Залишати обраний додаток завжди видимим справа на головному екрані" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luôn giữ ứng dụng được chọn hiển thị bên phải của màn hình chính" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使所选应用程序在主屏幕右侧始终保持可见" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在主螢幕右側始終顯示所選擇的應用程式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "在主螢幕右側始終顯示所選擇的應用程式" + } + } + } }, "Keep a chosen application visible on the right side of your primary screen at all times" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "احتفظ بالتطبيق المختار مرئيًا على الجانب الأيمن من شاشتك الأساسية في جميع الأوقات" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manté l'aplicació escollida visible al costat dret de la pantalla principal en tot moment" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manté l'aplicació escollida visible al costat dret de la pantalla principal en tot moment" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazí vybranou aplikaci vždy na pravé straně vaší hlavní obrazovky" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Halte eine ausgewählte Anwendung auf der rechten Seite des Hauptbildschirms im Vordergrund." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right side of your primary screen at all times" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantener la aplicación elegida visible en la parte derecha de la pantalla primaria en todo momento" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantener la aplicación elegida visible en la parte derecha de la pantalla primaria en todo momento" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Garder une application visible à tout moment sur le côté droit de votre écran principal" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Biarkan aplikasi yang dipilih terlihat di sisi kanan layar utama Anda setiap saat" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tieni l'applicazione scelta sempre visibile sulla destra del tuo schermo principale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メインディスプレイの右側に、指定されたアプリケーションを常に表示します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택한 응용 프로그램을 메인 화면 오른쪽에 항상 표시합니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laikyti pasirinktą programą nuolat matomą dešinėje pagrindinio ekrano pusėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjør et valgt program synlig hele tida til høgre på hovedskjermen din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right side of your primary screen at all times" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjer eit valt program synleg heile tida til høgre på hovudskjermen din" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right side of your primary screen at all times" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right side of your primary screen at all times" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keep a chosen application visible on the right side of your primary screen at all times" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Păstrază tot timpul o aplicație la alegere în dreapta ecranului principal" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Держать выбранное приложение постоянно видимым в правой части основного экрана" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ponechá zvolenú aplikáciu vždy zobrazenú na pravej strane hlavnej obrazovky" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behåll en vald applikation hela tiden synlig på höger sida på din primära skärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seçtiğiniz bir uygulamayı ana ekranınızın sağında her zaman görüntüleyin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Залишати обраний застосунок завжди видимим на правому боці головного екрану" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luôn giữ ứng dụng được chọn hiển thị bên phải của màn hình chính" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使所选应用程序在主屏幕右侧始终保持可见" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在主螢幕右側始終顯示所選擇的應用程式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "在主螢幕右側始終顯示所選擇的應用程式" + } + } + } + }, + "Landscape Snap Areas" : { }, "Larger" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Larger" + } + } + } }, "Larger Width" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Larger Width" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "너비 크게" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увеличить ширину" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiều rộng lớn hơn" + } + } + } }, "Last Fourth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الرابع الأخير" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Darrer quart" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Darrer quart" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslední čtvrtina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viertes Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last Fourth" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last Quarter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuarto cuarto" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuarto cuarto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dernier quart" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperempat Terakhir" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimo quarto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左から4番目" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "네번째 1/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paskutinė ketvirtis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste fjerdedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laatste kwart" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste fjerdedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostatnia ćwiartka" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último quarto" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último Quarto" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimul Sfert" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Последняя четверть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posledná štvrtina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sista fjärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Останній чверть" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/4 cuối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右首1/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右首1/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右首1/4" + } + } + } }, "Last Third" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الثلث الأخير" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últim terç" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últim terç" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslední třetina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Letztes Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last Third" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último tercio" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último tercio" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers du bas" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sepertiga Terakhir" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimo terzo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3にして右寄せ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마지막 1/3" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paskutinis trečdalis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste tredjedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laatste derde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste tredjedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna trzecia z prawej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último terço" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último Terço" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultima Treime" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Последняя треть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posledná tretina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sista tredje" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son üçte bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Остання третина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3 cuối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右首1/3" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右首1/3" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右1/3" + } + } + } }, "Last Three Fourths" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأرباع الثلاثة الأخيرة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Darrers tres quarts" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Darrers tres quarts" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslední tři čtvrtiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Letzte drei Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last Three Fourths" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last Three Quarters" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimos tres cuartos" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últimos tres cuartos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trois quarts de droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiga Perempat Terakhir" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimi tre quarti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3/4にして右寄せ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마지막 3/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paskutinės trys ketvirtys" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste tre fjerdedeler" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste tre fjerdedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostatnie trzy czwarte" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último três quartos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últimos Três Quartos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimele Trei Sferturi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Последние три четверти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posledné tri štvrtiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sista tre fjärdedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son Üç Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Останні три чверті" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3/4 cuối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右侧3/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右側3/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右側3/4" + } + } + } }, "Last Two Thirds" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الثلثين الأخيرين" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últims dos terços" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últims dos terços" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poslední dvě třetiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zwei Drittel rechts" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Last Two Thirds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últimos dos tercios" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últimos dos tercios" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deux tiers du bas" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dua Pertiga Terakhir" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimi due terzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "2/3にして右寄せ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "마지막 2/3" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dešinės dvi trečiosios" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste to tredjedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laatste tweederde deel" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siste to tredjedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dwie trzecie z prawej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últimos dois terços" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Últimos dois terços" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimele Două Treimi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Последние две трети" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posledné dve tretiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sista två tredjedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son iki üçte bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Останні дві третини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "2/3 cuối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右侧2/3" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右側2/3" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右側2/3" + } + } + } }, "Launch on login" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ابدأ عند تسجيل الدخول" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Executa en l'inici de sessió" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Executa en l'inici de sessió" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spustit při přihlášení" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beim Anmelden starten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Launch on login" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar al iniciar sesión" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar al iniciar sesión" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Démarrer avec la session" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jalankan saat login" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avvia al login" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ログイン時に起動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그인 시 실행" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paleisti prisijungus prie sistemos" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start ved pålogging" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starten bij het inloggen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start ved pålogging" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uruchamiaj po zalogowaniu się" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar no login" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciar no login" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pornește la login" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запуск при входе в систему" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spustiť pri prihlásení" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starta vid inloggning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Başlangıçta çalıştır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запускати при вході в систему" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khởi động khi đăng nhập" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "登录时打开" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在登入時打開" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "在登入時開啟" + } + } + } }, "Left" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "غادر" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Links" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izquierda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izquierda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sinistra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "왼쪽" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kairė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venstre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venstre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esquerda" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Слева" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vľavo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ліворуч" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左侧" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左側" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left" + } + } + } + }, + "Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back." : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back." + } + } + } }, "Left or right side" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié gauche ou droite" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Levá nebo pravá polovina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linke oder Rechte Hälfte" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad izquierda o derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad izquierda o derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié gauche ou droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà destra o sinistra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左半分または右半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "왼쪽 또는 오른쪽 반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kairė arba dešinė pusė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venstre eller høgre halvdel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venstre eller høgre halvdel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade esquerda ou direita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Левая или правая половина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ľavá alebo pravá polovica" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left or right side" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol veya sağ yarım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ліва або права половина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nửa trái hoặc phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左半屏或右半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左半或右半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左半或右半" + } + } + } }, "Left side, top/bottom near corners" : { - + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left side, top/bottom near corners" + } + } + } + }, + "Left side, top/bottom side near corners" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Moitié gauche, moitié du haut/bas près des coins" + } + }, + "ca" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "cs" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Levá polovina, horní/spodní polovina blízko rohů" + } + }, + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Linke Hälfte, Obere/Untere Hälfte in der Nähe der Ecken" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Left side, top/bottom near corners" + } + }, + "es" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Mitad izquierda, mitad superior/inferior cerca de las esquinas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Mitad izquierda, mitad superior/inferior cerca de las esquinas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Moitié gauche, moitié du haut/bas près des coins" + } + }, + "id" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Metà sinistra, metà superiore/inferiore vicino gli angoli" + } + }, + "ja" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "左半分、画面端付近の上半分・下半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "왼쪽 반, 위/아래 반에 근접한 모서리" + } + }, + "lt" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Kairė pusė, viršutinė/apačioje pusė šalia kampų" + } + }, + "nb" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Venstre halvdel, øverste/nederste halvdel nære hjørne" + } + }, + "nl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "nn" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Venstre halvdel, øvste/nedste halvdel nære hjørne" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Metade esquerda, metade de cima/baixo próximo das bordas" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "ro" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "ru" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Левая половина, верхняя/нижняя половина возле углов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ľavá polovica, horná/spodná polovica blízko rohov" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Left side, top/bottom side near corners" + } + }, + "tr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Sol yarım (köşelere yaklaşıldığında ise üst/alt yarım)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ліва половина, верхня/нижня половина близько кутів" + } + }, + "vi" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Nửa trái, nửa trên/dưới nếu ngay góc" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "左半屏,靠近角落则上/下半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "左半,靠近角落則上半/下半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "左半,靠近角落則上半/下半" + } + } + } }, "Light" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Light" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ライト" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "浅色" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "淺色" + } + } + } }, "Lower Middle Center Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lower Middle Center Left Sixteenth" + } + } + } }, "Lower Middle Center Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lower Middle Center Right Sixteenth" + } + } + } }, "Lower Middle Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lower Middle Left Sixteenth" + } + } + } }, "Lower Middle Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lower Middle Right Sixteenth" + } + } + } + }, + "Main Menu" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "القائمة الرئيسية" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menú principal" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menú principal" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hlavní menu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hauptmenü" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Main Menu" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menú principal" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menú principal" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu principal" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu Utama" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu principale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メインメニュー" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메인 메뉴" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pagrindinis meniu" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hovedmeny" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoofdmenu" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hovudmeny" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu główne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu Principal" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu principal" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meniu Principal" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Главное меню" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hlavné menu" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Huvudmeny" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ana Menü" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Головне меню" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menu chính" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "主菜单" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "主選單" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "主選單" + } + } + } + }, + "Make Larger" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اجعله أكبر" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fer més gran" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fer més gran" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zvětšit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vergrößern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Make Larger" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hacer más grande" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hacer más grande" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agrandir la taille" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buat Lebih Luas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingrandisci" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "拡大" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "크게" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Padidinti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjør større" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Groter maken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjer større" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiększ" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aumentar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aumentar o tamanho" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mărește" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увеличить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zväčšiť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gör större" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Büyüt" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Збільшити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tăng kích thước" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "放大" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "放大" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "放大" + } + } + } + }, + "Make Smaller" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اجعله اصغر" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fer més petit" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fer més petit" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmenšit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verkleinern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Make Smaller" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hacer más pequeño" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hacer más pequeño" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réduire la taille" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buat Lebih Kecil" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rimpicciolisci" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "縮小" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "작게" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sumažinti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjør mindre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maak kleiner" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjer mindre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmniejsz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diminuir" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tornar mais pequeno" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Micșorează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уменьшить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmenšiť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gör mindre" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Küçült" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зменшити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giảm kích thước" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "缩小" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "縮小" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "縮小" + } + } + } }, "Maximize" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximiser" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximitzar" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximitzar" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximalizovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximize" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximise" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximiser" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimalkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Massimizza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大化" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "최대화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimizuoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximize" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalizuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимизировать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximalizovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximera" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamamını kapla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимізувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tối đa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大化" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "放到最大" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "放到最大" + } + } + } }, "Maximize Height" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعظيم الارتفاع" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximitzar alçada" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximitzar alçada" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximalizovat výšku" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Höhe maximieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximize Height" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximise Height" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar altura" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar altura" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximiser la hauteur" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimalkan Tinggi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Massimizza altezza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "高さを最大化" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "높이 최대화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimalus aukštis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimer høgda" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximaliseer hoogte" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimer høgda" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalna wysokość" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar altura" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizar Altura" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximizează Înalțimea" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимизировать высоту" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximalizovať výšku" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximera höjden" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Azami Yükseklik" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимізувати висоту" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phóng to tối đa chiều cao" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大化高度" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "將高度放到最大" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "將高度放到最大" + } + } + } }, "Maximize Settings" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximize Settings" + } + } + } }, "Maximum windows per column" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximum windows per column" + } + } + } }, "Maximum windows per row" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximum windows per row" + } + } + } }, "Middle Center Left Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Center Left Twelfth" + } + } + } }, "Middle Center Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Center Ninth" + } + } + } }, "Middle Center Right Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Center Right Twelfth" + } + } + } }, "Middle Left Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Left Ninth" + } + } + } }, "Middle Left Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Left Twelfth" + } + } + } }, "Middle Right Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Right Ninth" + } + } + } }, "Middle Right Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Right Twelfth" + } + } + } }, "Middle Third" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Middle Third" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "중간 1/3" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ ba ở giữa" + } + } + } + }, + "Minimize" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصغير" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimitzar" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimitzar" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimalizovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Im Dock ablegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimize" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimise" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimizar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimizar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Placer dans le Dock" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kecilkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contrai" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "しまう" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "최소화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sumažinti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimaliseren" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zminimalizuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimizar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimizar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimizează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Минимизировать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimalizovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimera" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Küçült" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Згорнути" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thu nhỏ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最小化" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "縮到最小" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "縮到最細" + } + } + } + }, + "Minimum window size reached" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimum window size reached" + } + } + } }, "Mission Control dragging" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mission Control dragging" + } + } + } }, "Move cursor along with window across displays" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حرك المؤشر مع النافذة عبر شاشات العرض" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mou el cursor juntament amb la finestra per les pantalles" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mou el cursor juntament amb la finestra per les pantalles" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pohybujte oknem pomocí kurzoru po displejích" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mauszeiger zusammen mit dem Fenster über Bildschirme bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move cursor along with window across displays" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover cursor junto con la ventana a través de las pantallas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover cursor junto con la ventana a través de las pantallas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer le curseur entre les moniteurs avec la fenêtre" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pindahkan kursor bersama dengan jendela di seluruh tampilan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposta il cursore insieme alle finestre tra schermi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "別ディスプレイへのウインドウ移動時にカーソルも一緒に移動させる" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "창이 디스플레이 사이에 이동 시 커서도 함께 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perkelti žymeklį kartu su langais tarp ekranų" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt musepila sammen med vinduet over skjermer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move cursor along with window across displays" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt musepila i lag med vindauget over skjermar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przenoś kursor razem z oknem pomiędzy ekranami" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move cursor along with window across displays" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deslocar cursor com janela entre ecrãs" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mută cursorul deodată cu fereastra între ecrane" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемещать курсор вместе с окном между экранами" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presúvať kurzor spolu s oknom medzi displejmi" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytta markören tillsammans med fönstret över skärmar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fare imlecini pencere ile beraber hareket ettir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Переміщати курсор разом з вікном між екранами" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Di chuyển con trỏ cùng với cửa sổ qua nhiều màn hình" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "光标和窗口一起跨显示器移动" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "游標與視窗一起跨顯示器移動" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "游標連同視窗一起跨顯示器移動" + } + } + } }, "Move Down" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحرك لأسفل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moure fins a baix" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moure fins a baix" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přesunout dolů" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nach unten bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move Down" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover hasta abajo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover hasta abajo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer en bas" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Turunkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposta giù" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "下に移動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아래로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žemyn" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt ned" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naar beneden" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt ned" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przesuń w dół" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para baixo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para baixo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mută Jos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вниз" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presunúť dole" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytta ner" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aşağı kenar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемістити вниз" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đi xuống" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "向下移动" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下移" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "下移" + } + } + } }, "Move Left" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحرك يسارا" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moure a l'esquerra" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moure a l'esquerra" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přesunout vlevo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nach links bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move Left" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover a la izquierda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover a la izquierda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer à gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geser ke Kiri" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposta a sinistra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左に移動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "왼쪽으로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Į kairę" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt til venstre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naar links" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt til venstre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przesuń w lewo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para a esquerda" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para a esquerda" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mută în Stânga" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налево" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presunúť vľavo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytta vänster" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol Kenar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемістити ліворуч" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Qua trái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "向左移动" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左移" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左移" + } + } + } }, "Move Right" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحرك يمينا" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moure a la dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moure a la dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přesunout vpravo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nach rechts bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move Right" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover a la derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover a la derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer à droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geser ke Kanan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposta a destra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右に移動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오른쪽으로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Į dešinę" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt til høgre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naar rechts" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt til høgre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przesuń w prawo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para a direita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para a direita" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mută în Dreapta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Направо" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presunúť vpravo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytta höger" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ Kenar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемістити праворуч" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Qua phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "向右移动" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右移" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右移" + } + } + } + }, + "move to adjacent display on left or right" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انتقل إلى الشاشة المجاورة على اليسار أو اليمين" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "mou a la pantalla adjacent a l'esquerra o a la dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "mou a la pantalla adjacent a l'esquerra o a la dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "přesunout na sousedící displej vlevo nebo vpravo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zum benachbarten Bildschirm auf der linken oder rechten Seite bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent display on left or right" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mover a la pantalla adyacente a la izquierda o a la derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "mover a la pantalla adyacente a la izquierda o a la derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "déplacer vers le moniteur à gauche ou à droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "pindah ke tampilan yang berdekatan di kiri atau kanan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "sposta nello schermo adiacente a sinistra o a destra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを左右のディスプレイに順次移動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인접한 왼쪽 또는 오른쪽 디스플레이로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "pereiti prie gretimo ekrano kairėje arba dešinėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "flytt til nærmeste skjerm til venstre eller høgre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent display on left or right" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "flytt til nærmaste skjerm til venstre eller høgre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent display on left or right" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent display on left or right" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent display on left or right" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mută în ecranul adiacent din stânga sau din dreapta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "перейти к соседнему дисплею слева или справа" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "presunúť na susediaci displej vľavo alebo vpravo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "flytta till intilliggande skärm till vänster eller höger" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "pencereyi sağdaki veya soldaki bitişik ekrana taşı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "перемістити на сусідній екран зліва або справа" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Di chuyển đến cạnh trái hoặc phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "移动到左侧或右侧的相邻显示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "移至左側或右側的相鄰顯示器" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "移到左側或右側的相鄰顯示器" + } + } + } + }, + "move to adjacent on left/right, or cycle size on side" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الانتقال إلى الحجم المجاور على اليسار / اليمين ، أو حجم الدورة على النصف" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "mou al costat adjacent a l'esquerra/dreta, o la mida del cicle a la meitat" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "mou al costat adjacent a l'esquerra/dreta, o la mida del cicle a la meitat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "přesune na následující levou/pravou pozici" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zum benachbarten Bildschirm auf der linken/rechten Seite bewegen oder Größe auf die Hälfte einstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent on left/right, or cycle size on side" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mover a adyacente en izquierda/derecha, o crear bucle de tamaño en mitades" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "mover a adyacente en izquierda/derecha, o crear bucle de tamaño en mitades" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "déplacer vers adjacent gauche/droite, ou scinder en deux" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "pindah ke yang berdekatan di kiri/kanan, atau ukuran siklus di setengah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "sposta nell'adiacente a sinistra/destra, o scorri dimensioni con azioni di mezzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを左右いずれかのディスプレイに移動させるか、サイズを半分にするのを繰り返す" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "인접한 왼쪽 또는 오른쪽 디스플레이로 이동, 절반 동작시 창 크기 순환" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "pereiti prie gretimo ekrano kairėje/dešinėje arba keisti pusės dydį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "flytt til nærmeste til venstre/høgre, eller gå gjennom størrelsene på halvdeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent on left/right, or cycle size on side" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "flytt til nærmaste til venstre/høgre, eller gå gjennom storleikane på halvdelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent on left/right, or cycle size on side" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent on left/right, or cycle size on side" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "move to adjacent on left/right, or cycle size on side" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mută pe partea stângă/dreaptă adiacentă, sau permută între jumătăți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "перейти к соседнему дисплею слева/справа или переключать размер половин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "presunúť na vedľajšiu ľavú/pravú pozíciu alebo striedať polovice" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "flytta till intilliggande till vänster/höger, eller växla storlek på hälften" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "sağa/sola taşı veya yarım boyutlarda geçiş yap" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "перемістити на сусідній лівий/правий, або циклічно змінювати розмір на половину" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Di chuyển đến cạnh trái/phải, hoặc thay đổi tuần hoàn một nửa kích thước" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左/右移动到相邻,或半屏循环大小" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左/右移至相鄰,或一半循環大小" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左/右移到相鄰,或一半循環大小" + } + } + } }, "Move to Center" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مركز" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vycentrovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zentrieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move to Center" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centre" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centrar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centrar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centrer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tengah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央に表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "가운데" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Į centrą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midten" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centreer" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Środek" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centro" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centro" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Centru" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В центр" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vycentrovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitten" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orta" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Центр" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Căn giữa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中间" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央" + } + } + } + }, + "Move to Edge" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer vers le bord" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mou a la vora" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mou a la vora" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přesunout ke kraji" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "An den Rand bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move to Edge" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desplazar al borde" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desplazar al borde" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer vers le bord" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geser ke Tepi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muovi verso i bordi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "画面端に移動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모서리로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perkelti į kraštą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt til kanten" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verplaats naar de rand" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt til kanten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przesuń do krawędzi" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para a borda" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para Lado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Переместить к краю" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presunúť na okraj" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytta till kanten" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kenarlar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемістити до краю" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đi đến cạnh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "移动到边缘" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "移至邊緣" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "移到邊緣" + } + } + } }, "Move Up" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحرك" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mou amunt" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mou amunt" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přesunout nahoru" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nach oben bewegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Move Up" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover hasta arriba" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover hasta arriba" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacer vers le haut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naikkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sposta su" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "上に移動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위로 이동" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aukštyn" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt opp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naar boven" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt opp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przesuń w górę" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para cima" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mover para cima" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mută Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вверх" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presunúť hore" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytta upp" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yukarı kenar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемістити вгору" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đi lên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "向上移动" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "上移" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "上移" + } + } + } + }, + "New" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جديد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nou" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nou" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nový" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neu" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuevo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuevo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nouveau" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baru" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuovo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新規作成" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "신규" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sukurti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nytt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieuw" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nytt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nowy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Novo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Novo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nou" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Создать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nový" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ny" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "New" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Новий" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mới" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "新建" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增" + } + } + } }, "Next Display" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "العرض التالي" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Següent pantalla" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Següent pantalla" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Následující displej" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nächster Bildschirm" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Next Display" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siguiente Pantalla" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siguiente Pantalla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moniteur suivant" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tampilan Berikutnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schermo successivo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次のディスプレイ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다음 디스플레이" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kitas ekranas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neste skjerm" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volgende scherm" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neste skjerm" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Następny ekran" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Próxima tela" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ecrã seguinte" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ecranul Următor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Следующий экран" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nasledujúci displej" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nästa skärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sonraki Ekran" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Наступний екран" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Màn hình kế tiếp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一个显示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一個顯示器" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "下一個顯示器" + } + } + } + }, + "Ninths" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ninths" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/9" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ chín" + } + } + } + }, + "Ninths (3×3)" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ninths (3×3)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/9 (3×3)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ chín (3×3)" + } + } + } + }, + "Not Authorized to Control Your Computer" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "غير مصرح له بالتحكم في جهاز الكمبيوتر الخاص بك" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "No està autoritzat per controlar el vostre ordinador" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "No està autoritzat per controlar el vostre ordinador" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ovládání počítače neautorizováno" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicht berechtigt, Deinen Computer zu steuern" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not Authorized to Control Your Computer" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not Authorised to Control Your Computer" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No está autorizado para controlar su computadora" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "No está autorizado para controlar su computadora" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non autorisé à contrôler votre ordinateur" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidak Berwenang untuk Mengontrol Komputer Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non autorizzato a controllare il tuo computer" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コンピューターを制御する権限がありません" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "컴퓨터를 제어할 권한이 없습니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neautorizuotas kompiuterio valdymui" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikke løyve til å styre datamaskina di" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niet bevoegd om uw computer te besturen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikkje løyve til å styra datamaskina di" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak autoryzacji do kontroli komputera" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não autorizado para controlar seu computador" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não autorizado a controlar o seu computador" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neautorizat pentru a Controla Dispozitivul Tău" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не авторизован для управления компьютером" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nemá oprávnenie ovládať tvoj počítač" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inte behörig att styra din dator" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilgisayarınızı kontrol etme yetkisi yok" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не авторизовано для керування вашим комп’ютером" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không đủ quyền để diều khiển máy tính của bạn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未获授权控制您的电脑" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "未被授權來控制您的電腦" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "未被授權來控制你的電腦" + } + } + } }, "Offset window position on overlap" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Offset window position on overlap" + } + } + } + }, + "Open System Preferences" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "افتح تفضيلات النظام" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir preferències del sistema" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrir preferències del sistema" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otevřít systémové předvolby" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Systemeinstellungen öffnen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Preferences" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir preferencias del sistema" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir preferencias del sistema" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir les Préférences Système" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buka Preferensi Sistem" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri Preferenze di Sistema" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム環境設定を開く" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템 환경설정 열기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atidaryti sistemos nustatymus" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åpne systeminnstllingene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open Systeemvoorkeuren" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opna systeminnstllingane" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwórz ustawienia systemowe" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir Ajustes do Sistema" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir Preferências de Sistema" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deschide Preferințele de Sistem" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть Cистемные настройки" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otvoriť systémové nastavenia" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öppna systeminställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sistem Tercihlerini Aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відкрити Налаштування системи" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mở cài đặt hệ thống" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开系统偏好设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "打開系統偏好設定" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "開啟系統偏好設定" + } + } + } }, "Open System Settings" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir les Réglages Système" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Systemeinstellungen öffnen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abra los ajustes del sistema" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abra los ajustes del sistema" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir les Réglages Système" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri Impostazioni di Sistema" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システム設定を開く" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시스템 설정 열기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atidaryti sistemos nuostatas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åpne Systeminnstillingene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opne Systeminnstillingane" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir Ajustes do Sistema" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть Системные настройки" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otvoriť Systémové nastavenia" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open System Settings" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відкрити Налаштування системи" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mở Cài đặt hệ thống" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开系统设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "開啟系統設定" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "開啟系統設定" + } + } + } + }, + "Open…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يفتح…" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obre…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obre…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otevřít…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öffnen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ouvrir…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buka…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apri…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開く…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "열기…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atidaryti…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åpne…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opne…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwórz…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abrir…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deschide…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Открыть…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otvoriť…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öppna…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aç…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відкрити…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mở…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "打開⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "開啟⋯" + } + } + } }, "Other" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Other" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Altres" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Altres" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostatní" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mehr" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Other" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otros" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otros" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Other" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lainnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Altro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "そのほか" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기타" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kita" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Other" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anna" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Outro" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Outro" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Другое" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostatné" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annat" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diğer" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Інше" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khác" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "其他" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "其他" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "其他" + } + } + } + }, + "Paste" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "معجون" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enganxa" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enganxa" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vložit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einfügen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paste" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pegar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pegar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coller" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tempel" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incolla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ペースト" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "붙여넣기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Įterpimas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lim inn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plakken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lim inn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wklej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Colar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Colar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lipește" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вставка" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vložiť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klistra in" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yapıştır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вставити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dán" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "粘贴" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "貼上" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "貼上" + } + } + } + }, + "Paste and Match Style" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لصق ومطابقة النمط" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enganxa i coincideix amb l'estil" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enganxa i coincideix amb l'estil" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vložit a sladit styl" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einfügen und Stil anpassen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paste and Match Style" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pegar y emparejar estilo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pegar y emparejar estilo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coller et adapter le style" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tempel dan Cocokkan Gaya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Incolla e mantieni stile" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ペーストしてスタイルを合わせる" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "붙여넣고 스타일 일치시킴" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Įterpti ir suderinti stilius" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lim inn og tilpass stil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plak en neem stijl over" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lim inn og tilpass stil" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wklej i dopasuj styl" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Colar e manter estilo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Colar e Combinar Estilo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lipește și Aplică Stilizarea" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вставить и соотнести стили" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vložiť a prispôsobiť štýl" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klistra in och matcha stil" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paste and Match Style" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вставити зі збереженням стилю" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dán và khớp kiểu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "粘贴并匹配样式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "貼上並符合樣式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "貼上並符合樣式" + } + } + } }, "Please select your default shortcuts and behavior" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الرجاء تحديد الاختصارات والسلوك الافتراضي الخاص بك" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccioneu les dreceres i el vostre comportament per defecte" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccioneu les dreceres i el vostre comportament per defecte" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prosím vyberte vaše výchozí zkratky a chování" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bitte wähle die Standardeinstellungen für Kurzbefehe und deren Verhaltensweisen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please select your default shortcuts and behavior" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please select your default shortcuts and behaviour" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por favor seleccione el comportamiento y atajos predeterminados" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por favor seleccione el comportamiento y atajos predeterminados" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veuillez choisir vos raccourcis et comportements par défaut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Silakan pilih pintasan dan perilaku default Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleziona le tue abbreviazioni predefinite e il comportamento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "デフォルトのショートカットと動作を選択してください" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본값의 단축키와 작업을 선택하십시오" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prašome pasirinkti karštuosius klavišus ir numatytąjį elgesį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velg standardsnarveger og oppførsel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Please select your default shortcuts and behavior" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vel standardsnarvegar og oppførsel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz domyślne skróty oraz zachowanie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecione seus atalhos e comportamento padrão" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por favor, selecione so seus atalhos e comportamento padrão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selectează scurtăturile și modurile de funcționare predefinite" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пожалуйста, выберите горячие клавиши и поведение по умолчанию" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prosím, vyber svoje predvolené skratky a správanie" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välj dina standardgenvägar och beteende" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lütfen varsayılan kısayol ve tercihlerinizi seçiniz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Будь ласка, виберіть ваші типові комбінації клавіш та поведінку" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hãy chọn phím tắt và hành vi mặc định bạn mong muốn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请选择您的默认快捷键与行为" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請選擇您的預設快速鍵與行為" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "請選擇你的預設快捷鍵與行為" + } + } + } }, "Portrait Snap Areas" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Portrait Snap Areas" + } + } + } + }, + "Preferences…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التفضيلات ..." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Předvolby…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferences…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préférences…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferensi…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferenze…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "環境設定…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "환경설정…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nustatymai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillinger…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorkeuren…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillingar…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencje…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferințe…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predvoľby…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inställningar…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercihler…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштування…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cài đặt…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好设置…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好設定⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好設定⋯" + } + } + } }, "Preserve maximize state when moving across displays" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preserve maximize state when moving across displays" + } + } + } }, "Preserve side axis size for half actions, similar to Windows" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preserve side axis size for half actions, similar to Windows" + } + } + } + }, + "Press the shortcut repeatedly to cycle through all positions in the grid." : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Press the shortcut repeatedly to cycle through all positions in the grid." + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "그리드의 모든 위치를 순환하려면 단축키를 여러 번 누르십시오." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhấn phím tắt nhiều lần để duyệt qua tất cả các vị trí trong lưới." + } + } + } }, "Previous Display" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "العرض السابق" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla anterior" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla anterior" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Předchozí displej" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorheriger Bildschirm" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previous Display" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla anterior" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla anterior" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moniteur précédent" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tampilan Sebelumnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schermo precedente" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "前のディスプレイ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이전 디스플레이" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ankstesnis ekranas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forrige skjerm" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorige scherm" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Førre skjerm" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poprzedni ekran" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tela anterior" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ecrã anterior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ecran Anterior" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предыдущий экран" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predchádzajúci displej" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Föregående skärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önceki Ekran" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Попередній екран" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Màn hìn trước đó" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上一个显示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "上一個顯示器" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "上一個顯示器" + } + } + } }, "Provide haptic feedback" : { - + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Provide haptic feedback" + } + } + } }, "px" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "px" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "px" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "px" + } + } + } + }, + "Quit Rectangle" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قم بإنهاء المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sortir de Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sortir de Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukončit Rectangle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle beenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quit Rectangle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salir de Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salir de Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quitter Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keluar Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esci da Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleを終了" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 종료" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Išeiti iš Rectangle" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avslutt Rectangle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle stoppen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avslutt Rectangle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyjdź z Rectangle." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fechar Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sair do Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Închide Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выход из Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukončiť Rectangle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avsluta Rectangle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle'dan Çık" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вийти з Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thoát Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "退出 Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "結束 Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "結束Rectangle" + } + } + } }, "Recent apps area" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recent apps area" + } + } + } }, "Recommended" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مُستَحسَن" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomanat" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomanat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doporučené" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendado" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandé" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Direkomendasikan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Consigliate" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨設定" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "권장 설정" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekomenduojama" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilrådd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekomendowane" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendado" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomandat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемые" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odporúčané" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommenderas" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендовано" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gợi ý" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "建議" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "建議" + } + } + } + }, + "Rectangle" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + } + } + }, + "Rectangle Help" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعليمات المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda de Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda de Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle nápověda" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-Hilfe" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Help" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayuda de Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayuda de Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aide Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bantuan Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aiuto su Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleヘルプ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 도움말" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Pagalba" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-hjelp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle hulp" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-hjelp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomoc Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda do Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuda do Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajutor Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Справка" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomocník pre Rectangle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-hjälp" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Yardım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Довідка по Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trợ giúp của Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 帮助" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 輔助說明" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle輔助說明" + } + } + } }, "Rectangle needs your permission to control your window positions." : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يحتاج المستطيل إلى إذنك للتحكم في مواضع النافذة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle necessita el vostre permís per controlar les posicions de les finestres." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle necessita el vostre permís per controlar les posicions de les finestres." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle potřebuje vaše povolení, aby mohl ovládat pozice oken." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle benötigt deine Erlaubnis, um Fensterpositionen zu steuern." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle needs your permission to control your window positions." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle necesita su permiso para controlar la posición de las ventanas." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle necesita su permiso para controlar la posición de las ventanas." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle requiert votre permission pour contrôler la position de vos fenêtres." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle memerlukan izin anda untuk mengatur posisi jendela." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle ha bisogno del tuo permesso per controllare le posizioni delle tue finestre." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleがウインドウの位置を制御するには許可が必要です。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle은 창 위치를 제어하기 위해 권한이 필요합니다." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle reikia jūsų leidimo valdyti langų padėtį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle trenger lov av deg for å kontrollere vindusposisjonene." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle heeft uw toestemming nodig om uw vensterposities te kunnen aanpassen." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle treng lov av deg for å kontrollera vindaugsposisjonane." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle potrzebuje twojego pozwolenia, aby móc sterować pozycjami okna." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Rectangle precisa de sua permissão para controlar a posição das janelas." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "O Rectangle precisa da sua permissão para controlar as posições das janelas." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle are nevoie de permisiunea ta pentru a controla poziția ferestrelor tale." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle необходимо ваше разрешение для управления положением окон" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle potrebuje povolenie na ovládanie umiestnenia tvojich okien." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle behöver ditt tillstånd för att kontrollera dina fönsterpositioner." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle'ın pencere konumlarını değiştirebilmek için izninize ihtiyacı var." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle потребує вашого дозволу для керування позиціями ваших вікон." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle cần sự cho phép của bạn để điều khỉển vị trí cửa sổ." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 需要您的允许以控制窗口位置。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 需要您的許可來控制視窗位置。" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle需要你的允許以控制視窗位置。" + } + } + } + }, + "Rectangle Settings" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تفضيلات المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències de Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències de Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle předvolby" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-Einstellungen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Settings" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias de Rectangle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias de Rectangle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préférences Rectangle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferensi Rectangle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferenze Rectangle" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle環境設定" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 설정" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle nustatymai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-innstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorkeuren Rectangle" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-innstillingar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencje Rectangle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências do Rectangle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências do Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferințe Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle predvoľby" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle-inställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Tercihleri" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштування Rectangle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cài đặt của Rectangle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 偏好设置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 偏好設定" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle偏好設定" + } + } + } + }, + "Redo" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إعادة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refés" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refés" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znovu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiederholen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redo" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rehacer" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rehacer" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refaire" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ulangi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ripeti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "やり直し" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "실행 복귀" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kartoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjør på nytt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opnieuw" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjer på nytt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powtórz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refazer" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Refazer" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reaplicare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znovu" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gör om" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yinele" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lặp lại hoàn tác" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重做" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重做" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "重做" + } + } + } }, "Reflow Todo" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repositionner Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redistribueix Todo" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redistribueix Todo" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "To-do neu ausrichten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflujo en 'Todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflujo en 'Todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repositionner Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alur Ulang Todo" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reimposta In evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ToDoモードを再設定" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 재배치" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atnaujinti Todo lango padėtį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt om på Gjøreliste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Flytt om på Gjereliste" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reflow Todo" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновить положение Todo окна" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preusporiadať Todo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ordna om Att göra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo'yu Yeniden Ayarla" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Переформатувати вікна Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Làm mới Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新排列待办" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新排列待辦" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新排列待辦" + } + } + } + }, + "Remove gap on top screen edge" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove gap on top screen edge" + } + } + } }, "Remove keyboard shortcut restrictions" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "السماح لأي اختصار لوحة المفاتيح" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permet qualsevol drecera de teclat" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permet qualsevol drecera de teclat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstranit omezení klávesových zkratek" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jeden Tastaturkurzbefehl erlauben" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove keyboard shortcut restrictions" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permitir cualquier atajo de teclado" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permitir cualquier atajo de teclado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoriser tout raccourci clavier" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Izinkan semua pintasan papan ketik" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Consenti qualsiasi abbreviazione da tastiera" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべてのキーボードショートカットを許可" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모든 키보드 단축키 허용" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Leisti bet kokį klavišų derinį" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tillat alle tastatursnarveger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elke sneltoets toestaan" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tillat alle tastatursnarvegar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pozwól na użycie dowolnego skrótu klawiaturowego" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permitir qualquer atalho de teclado" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permitir qualquer atalho de teclado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge restricțiile scurtăturilor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Разрешить любое сочетание клавиш" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť obmedzenia klávesových skratiek" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tillåt alla tangentbordsgenvägar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tüm klavye kısayollarına izin ver" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити обмеження комбінацій клавіш" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa bỏ hạn chế của phím tắt" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除键盘快捷键限制" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除鍵盤快速鍵限制" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "移除鍵盤快捷鍵限制" + } + } + } }, "Remove top gap when snapping to top edge" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remove top gap when snapping to top edge" + } + } + } }, "Repeated commands" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أوامر متكررة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ordres repetides" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ordres repetides" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opakované příkazy" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiederholte Befehle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repeated commands" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comandos repetidos" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comandos repetidos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Commandes répétées" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perintah berulang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comandi ripetuti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コマンドを繰り返した際の挙動" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "커맨드 반복 입력시" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kartojamos komandos" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjentatte kommandoer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repeated commands" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjentekne kommandoar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repeated commands" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comandos repetidos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repeated commands" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comenzi repetitive" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторяющиеся команды" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opakované príkazy" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upprepade kommandon" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yinelenen komutlar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторювані команди" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khi lệnh lặp lại" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重复命令" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重複的指令" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "重複的指令" + } + } + } }, "Repeated maximize restores the previous size and position" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repeated maximize restores the previous size and position" + } + } + } }, "Resize adjacent windows when cycling side or corner shortcuts" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resize adjacent windows when cycling side or corner shortcuts" + } + } + } }, "Restore" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يعيد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaura" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaura" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnovit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiederherstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restore" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulihkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ripristina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "元に戻す" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복원" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atkurti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbakestill" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Herstel" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbakestill" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przywróć" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restabilire" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Восстановить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnoviť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Återställ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önceki Boyuta Getir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відновити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khôi phục" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "恢复" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "復原" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "回復" + } + } + } }, "Restore Default Shortcuts & Snap Areas" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعادة الاختصارات الافتراضية ومناطق الانطباق" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaura les dreceres predeterminades" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaura les dreceres predeterminades" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnovit výchozí zkratky" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Standard-Tastaturkurzbefehle wiederherstellen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restore Default Shortcuts & Snap Areas" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar accesos directos predeterminados y ajustes de areas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar accesos directos predeterminados" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurer les raccourcis par défaut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulihkan Pintasan Bawaah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ripristina abbreviazioni predefinite" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ショートカットを初期化" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "기본 단축키 복원" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atkurti numatytuosius karštuosius klavišus" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbakestill snarveger og festeområder" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Standaard sneltoetsen herstellen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbakestill snarvegar og festeområde" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przywróć domyślne skróty" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar atalhos padrão" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar Atalhos Padrão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restabilește Scurtăturile Predefinite" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Восстановить горячие клавиши по умолчанию" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnoviť predvolené skratky a zóny prichytenia" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Återställ genvägar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varsayılan kısayolları geri yükle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відновити типові комбінації клавіш" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khôi phục phím tắt mặc định" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "恢复默认快捷键和吸附区域" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "復原預設快速鍵" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "回復預設快捷鍵" + } + } + } }, "Restore window size when unsnapped" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعادة حجم النافذة عند الإغلاق" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaura la mida de la finestra quan no s'ajusti" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaura la mida de la finestra quan no s'ajusti" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnovit velikost okna při uvolnění" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenster beim Bewegen auf Originalgröße zurücksetzen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restore window size when unsnapped" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resetear el tamaño de la ventana al despegarla" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resetear el tamaño de la ventana al despegarla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurer la taille de fenêtre en annulant le glissement" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kembalikan ukuran jendela saat tidak dijepret" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ripristina le dimensioni della finestra se spostata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "スナップが解除されたらウインドウサイズを元に戻す" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "스냅 해제 시 창 크기 복원" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atkurti lango dydį po to, kai pašalinamas pririšimas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjenskap størrelsen på vinduet når det blir revet løs" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restore window size when unsnapped" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjenskap storleiken på vindauget når det blir rive laus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przywróć rozmiar okna po odczepieniu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar tamanho da janela quando desencaixado" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restaurar tamanho de janela quando desencaixada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Restabilește dimensiunea ferestrei când este închisă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Восстановить размер окна после снятия привязки" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnoviť veľkosť okna po uvoľnení" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Återställ fönsterstorleken när den lossas" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutturulduğu yerden ayrılan pencereleri eski boyutuna çevir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відновлювати розмір вікна при відміні зміни розміру" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khôi phục cửa sổ khi không bố trí" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "结束吸附时恢复窗口大小" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "結束貼齊時復原視窗大小" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "結束貼齊時回復視窗大小" + } + } + } }, "Right" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "النصف الأيمن" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pravá polovina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechte Hälfte" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setengah Kanan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà destra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오른쪽 절반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dešinė pusė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Høgre halvdel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechterhelft" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Høgre halvdel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prawa połowa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade direita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade direita" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jumătatea din Dreapta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Правая половина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pravá polovica" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Högra halvan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ yarım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Права половина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/2 cuối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半" + } + } + } }, "Right side, top/bottom near corners" : { - + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom near corners" + } + } + } + }, + "Right side, top/bottom side near corners" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié droite, moitié du haut/bas près des coins" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pravá polovina, horní/spodní polovina blízko rohů" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechte Hälfte, Obere/Untere Hälfte in der Nähe der Ecken" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad derecha, mitad superior/inferior cerca de las esquinas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad derecha, mitad superior/inferior cerca de las esquinas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié droite, moitié du haut/bas près des coins" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà destra, metà superiore/inferiore vicino gli angoli" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半分、画面端付近の上半分・下半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "반, 위/아래 반에 근접한 모서리" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dešinė pusė, viršutinė/apačioje pusė šalia kampų" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Høgre halvdel, øverste/nederste halvdel nære hjørne" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Høgre halvdel, øvste/nedste halvdel nære hjørne" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade direita, metade cima/baixo próximo das bordas" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Правая половина, верхняя/нижняя половина возле углов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pravá polovica, horná/spodná polovica blízko rohov" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Right side, top/bottom side near corners" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ yarım (köşelere yaklaşıldığında ise üst/alt yarım)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Права половина, верхня/нижня половина близько кутів" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nửa phải, nửa trên/dưới nếu ngay góc" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半屏,靠近角落则上/下半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半,靠近角落則上半/下半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右半,靠近角落則上半/下半" + } + } + } + }, + "Save…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يحفظ…" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desa…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desa…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uložit…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sichern…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sauvegarder…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Simpan…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "저장…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Išsaugoti…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opslaan…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvar…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvează…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сохранить…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uložiť…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaydet…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зберегти…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lưu…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "存储…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "儲存⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "儲存⋯" + } + } + } }, "Second Fourth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الرابع الثاني" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segon quart" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segon quart" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Druhá čtvrtina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zweites Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Second Fourth" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Second Quarter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segundo cuarto" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segundo cuarto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deuxième quart" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperempat Kedua" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secondo quarto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左から2番目" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "두번째 1/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Antra ketvirtis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Andre fjerdedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tweede kwart" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Andre fjerdedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Druga ćwiartka" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segundo quarto" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Segundo Quarto" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al Doilea Sfert" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вторая четверть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Druhá štvrtina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Andra fjärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İkinci Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Друга чверть" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/4 thứ hai" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左二1/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左二1/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左二1/4" + } + } + } + }, + "Select All" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختر الكل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecciona-ho tot" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecciona-ho tot" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vybrat vše" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alles auswählen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Select All" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccionar todo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleccionar todo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tout sélectionner" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilih Semua" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seleziona tutto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて選択" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모두 선택" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pasirinkite viską" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Marker alt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecteer alles" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Marker alt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz wszystko" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecionar tudo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selecionar Todos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selectează Tot" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выберите всё" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vybrať všetko" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Markera allt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Select All" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Виділити все" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chọn tất cả" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "全选" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "全選" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "全選" + } + } + } + }, + "Services" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خدمات" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serveis" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serveis" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Služby" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dienste" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Services" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicios" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicios" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Services" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Layanan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servizi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サービス" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "서비스" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paslaugos" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjenester" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diensten" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tenester" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usługi" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serviços" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serviços" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicii" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Службы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Služby" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjänster" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servisler" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сервіси" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dịch vụ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "服务" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "服務" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "服務" + } + } + } + }, + "Settings…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التفضيلات ..." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferències…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Předvolby…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Settings…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencias…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préférences…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferensi…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferenze…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "설정…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nustatymai…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillinger…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorkeuren…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillingar…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferencje…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferências…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preferințe…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavenia…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inställningar…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercihler…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Налаштування…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cài đặt…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好设置…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好設定⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "偏好設定⋯" + } + } + } + }, + "Shortcuts" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raccourcis clavier" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dreceres de teclat" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dreceres de teclat" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klávesové zkratky" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tastaturkurzbefehle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Shortcuts" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atajos de teclado" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atajos de teclado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raccourcis clavier" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pintasan Papan Ketik" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbreviazioni da tastiera" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キーボードショートカット" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "단축키" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karštieji klavišai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tastatursnarveger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keyboard Shortcuts" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tastatursnarvegar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skróty klawiaturowe" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atalhos de teclado" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atalhos de Teclado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scurtături" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Горячие клавиши" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klávesové skratky" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tangentbordsgenvägar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klavye Kısayolları" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Комбінації клавіш" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phím tắt" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "键盘快捷键" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "鍵盤快速鍵" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "鍵盤快捷鍵" + } + } + } + }, + "Show additional sizes in menu" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show additional sizes in menu" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메뉴에 추가 크기 표시" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiển thị kích thước bổ sung trong menu" + } + } + } + }, + "Show All" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عرض الكل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra-ho tot" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra-ho tot" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazit vše" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle einblenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show All" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar todo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar todo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tout afficher" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tampilan Semua" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra tutti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "모두 보기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rodyti viską" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis alle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toon alle" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis alle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokaż wszystko" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar todos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar todos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arată Toate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показать всё" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobraziť všetko" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visa allt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tümünü Göster" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показати все" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiển thị tất cả" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示所有" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示所有" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示所有" + } + } + } }, "Show Extra shortcuts in menu" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Extra shortcuts in menu" + } + } + } }, "Show stacked window list on hover" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show stacked window list on hover" + } + } + } }, "Show Todo Mode in menu" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إظهار وضع Todo في القائمة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra el mode Todo en el menú" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra el mode Todo en el menú" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazit Todo mód v menu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "To-do-Modus in Menü anzeigen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Todo Mode in menu" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar el modo 'Todo' en el menú" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar el modo 'Todo' en el menú" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afficher le mode Todo dans le menu" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tampilkan Mode Todo di menu" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra modalità In evidenza nel menu" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ToDoモードをメニューに表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메뉴에서 Todo 모드 보기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rodyti Todo režimą meniu" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis Gjøreliste-modus i menyen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Todo Mode in menu" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis Gjereliste-modus i menyen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Todo Mode in menu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar Todo Mode no menu" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Show Todo Mode in menu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arată Modul Todo în meniu" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показывать Todo режим в меню" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobraziť Todo režim v menu" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visa Att göra-läge i menyn" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menüde Todo Modunu göster" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показувати режим Завдань в меню" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiển thị chế độ Todo trên menu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在菜单中显示待办模式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在選單中顯示待辦模式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "在選單中顯示待辦模式" + } + } + } }, "Side Split Ratio" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Side Split Ratio" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "절반 분할 비율" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tỷ lệ chia một nửa" + } + } + } + }, + "Sides" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitiés" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitats" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitats" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poloviny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hälften" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sides" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitades" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitades" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitiés" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bagian" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "절반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pusės" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Halvdeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sides" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Halvdelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Połowy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metades" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metades" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Половинки" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Polovice" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hälfter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yarımlar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Половини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Một nửa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "一半螢幕" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "一半螢幕" + } + } + } + }, + "Sixteenths" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixteenths" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/16" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ mười sáu" + } + } + } + }, + "Sixteenths (4×4)" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixteenths (4×4)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/16 (4×4)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ mười sáu (4×4)" + } + } + } + }, + "Sixths" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixièmes" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisenes" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisenes" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šestiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixths" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixièmes" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "6分割" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "6등분" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šeštosios" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjettedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zesden" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjettedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedne szóste" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Шестые" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šestiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjättedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Шості" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phần sáu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "六等分" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "六等分" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "六等分" + } + } + } + }, + "Size" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taille" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mida" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mida" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velikost" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Größe" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Size" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamaño" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamaño" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taille" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukuran" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dimensione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サイズ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "크기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dydis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Størrelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Size" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Storleik" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozmiar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamanho" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamanho" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Размер" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veľkosť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Storlek" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boyut" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Розмір" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kích cỡ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大小" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "大小" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "大小" + } + } + } }, "Smaller" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smaller" + } + } + } }, "Smaller Width" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smaller Width" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "너비 작게" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уменьшить ширину" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiều rộng nhỏ hơn" + } + } + } + }, + "Snap Areas" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schnappbereiche" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snap Areas" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Áreas Snap" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Áreas Snap" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redimensionner areas" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Area jepret" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aree a scatto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "スナップ領域" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "스냅 영역" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snap Areas" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redimensionar areas" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encaixar areas" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zóny prichytenia" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutturma Bölgeleri" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зони прив’язки" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khu vực bố trí" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "吸附区域" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "貼齊區域" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "貼齊區域" + } + } + } }, "Snap windows by dragging" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التقط النوافذ عن طريق السحب" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajusta les finestres arrossegant" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajusta les finestres arrossegant" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Přichytávat okna tažením" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenster zum Anordnen an Bildschirmrand ziehen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snap windows by dragging" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustar ventanas arrastrando" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustar ventanas arrastrando" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redimensionner les fenêtres en les faisant glisser" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jepret jendela dengan menyeret" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ridimensiona le finestre trascinandole" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ドラッグでウインドウをスナップ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "드래그하여 창 배치" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Langų užrakinimas perkeliant" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fest vinduet ved å dra" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snap windows door te slepen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fest vindaguet ved å dra" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Złap okna poprzez przeciąganie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Redimensionar janelas arrastando" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encaixar janelas arrastando" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deschide fereastra prin glisare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Защелкивание окон путем перетаскивания" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prichytávať okná ťahaním" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fäst fönster genom att dra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pencereleri sürükleyerek tuttur" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прив'язувати вікна перетягуванням" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kéo để bố trí cửa sổ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "拖移以吸附窗口" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "拖移來貼齊視窗" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "拖移以貼齊視窗" + } + } + } }, "Spectacle" : { - + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectable" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectable" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "放大镜" + } + } + } }, "Spectacle shortcuts are more likely to conflict with other shortcuts" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "من المرجح أن تتعارض اختصارات النظارات مع الاختصارات الأخرى" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "És probable que les dreceres de Spectable entren en conflicte amb altres dreceres" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "És probable que les dreceres de Spectable entren en conflicte amb altres dreceres" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "U Spectacle zkratek je větší pravděpodobnost konfliktu s jinými zkratkami" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle-Tastaturkurzbefehle stehen eher mit anderen Tastaturkurzbefehlen in Konflikt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle shortcuts are more likely to conflict with other shortcuts" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los atajos de Spectacle tienen más probabilidades de entrar en conflicto con otros atajos" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los atajos de Spectacle tienen más probabilidades de entrar en conflicto con otros atajos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les raccourcis de Spectacle ont plus de chance d'être en conflit avec d'autres raccourcis" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pintasan Spectacle lebih cenderung bertentangan dengan pintasan lainnya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le abbreviazioni Spectacle hanno maggiori probabilità di conflitto con altre abbreviazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacleを使用すると、ショートカットがほかのショートカットと競合する可能性が高まります" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle 단축키는 다른 키 조합과 충돌할 가능성이 있습니다" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle karštieji klavišai tikriausiai sukels konfliktų su kitais karštaisiais klavišais" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle-snarveger kommer mer sannsynleg i konflikt med andre snarveger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle shortcuts are more likely to conflict with other shortcuts" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle-snarvegar kjem meir sannsynleg i konflikt med andre snarvegar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skróty Spectacle są bardziej podatne na konflikt z innymi skrótami" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atalhos Spectacle tem mais chance de causar conflitos com outros atalhos" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Os atalhos de Spectacle têm maior probabilidade de entrar em conflito com outros atalhos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scurtăturile Spectacle sunt mai predispuse să se suprapună cu alte scurtături" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Горячие клавиши Spectacle с большой вероятностью будут конфликтовать с другими горячими клавишами" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle skratky majú vyššiu pravdepodobnosť konfliktu s inými skratkami" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle-genvägar är mer benägna att komma i konflikt med andra genvägar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle kısayollarının diğer kısayollarla çakışması daha muhtemeldir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Комбінації клавіш Spectacle більш ймовірно конфліктують з іншими комбінаціями клавіш" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phím tắt của Spectacle có nhiều khả năng xung đột với những phím tắt khác" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle 快捷键更有可能与其他快捷键冲突" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle 快速鍵更可能與其他快速鍵相衝突" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spectacle快捷鍵更可能與其他快捷鍵衝突" + } + } + } }, "Stacked Windows" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stacked Windows" + } + } + } }, "Stage Manager" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager" + } + } + } + }, + "Stage Manager recent apps area" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "منطقة تطبيقات مدير المرحلة الأخيرة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Àrea d'aplicacions recents de Stage Manager" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Àrea d'aplicacions recents de Stage Manager" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager oblast posledních aplikací" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager Bereich für zuletzt verwendete Programme" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "área para aplicaciones recientes en el State Manager" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "área para aplicaciones recientes en el State Manager" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zone des applications récentes de Stage Manager" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Area app recenti in Stage Manager" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ステージマネージャの最近使ったアプリケーションエリア" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "스테이지 매니저 최근 앱 영역" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scenos valdytojas paskutinių programų sritys" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Område for siste brukte i Stage Manager" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Område for siste brukte i Stage Manager" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager область последних приложений" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager oblasť posledných aplikácií" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager recent apps area" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stage Manager son uygulamalar alanı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Область недавніх застосунків Stage Manager" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vùng hiển thị ứng dụng hiện tại của Stage Manager" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "“台前调度”最近使用的应用程序区域" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "「幕前調度」最近使用過的應用程式區域" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "「幕前管理」最近使用過的應用程式區域" + } + } + } }, "Third Fourth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ثالث رابع" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercer quart" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercer quart" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Třetí čtvrtina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drittes Viertel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Third Fourth" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Third Quarter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercer cuarto" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercer cuarto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Troisième quart" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiga Perempat" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terzo quarto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左から3番目" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "세번째 1/4" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trečia ketvirtis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredje fjerdedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Derde kwart" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredje fjerdedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trzecia ćwiartka" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terceiro quarto" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terceiro Quarto" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al Treilea Sfert" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Третья четверть" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tretia štvrtina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredje fjärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üçüncü Çeyrek" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Третя чверть" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/4 thứ ba" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右二1/4" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右二1/4" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右二1/4" + } + } + } + }, + "Thirds" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terços" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terços" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Třetiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercios" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercios" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sepertiga" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3分割" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "3등분" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trečdaliai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedne trzecie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terços" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terços" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Трети" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tretiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üçte bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Третини" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "三等分" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "三等分" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "三等分" + } + } + } }, "Thirds, drag toward center for two thirds" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers, glisser vers le centre pour deux tiers" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Třetiny, táhnout směrem ke středu pro dvě třetiny" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drittel, zur Mitte ziehen für zwei Drittel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercios, arrastrar hacia el centro para dos tercios" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercios, arrastrar hacia el centro para dos tercios" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers, glisser vers le centre pour deux tiers" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terzi, trascina verso il centro per i due terzi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3分割、中心にドラッグで2/3" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3, 가운데로 드래그하면 2/3" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trečdalys, perkelkite į centrą du trečdalius" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedeler, dra mot midten for to tredjedeler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedelar, dra mot midten for to tredjedelar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Трети, перетащите к центру на две трети" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tretiny, ťahaj smerom do stredu pre dve tretiny" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, drag toward center for two thirds" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üçte bir (üçte iki için ortaya doğru sürükleyin)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Третини, перетягніть у центр для двох третин" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3, kéo đến giữa thành 2/3" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "⅓,向中间拖移则⅔" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "⅓,向中央拖移則⅔" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "⅓,向中央拖移則⅔" + } + } + } }, "Thirds, top/bottom near corners" : { - + "extractionState" : "stale", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom near corners" + } + } + } + }, + "Thirds, top/bottom side near corners" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers, moitié du haut/bas près des coins" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Třetiny, horní/spodní polovina blízko rohů" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drittel, Obere/Untere Hälfte in der Nähe der Ecken" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercios, mitad superior/inferior cerca de las esquinas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tercios, mitad superior/inferior cerca de las esquinas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiers, moitié du haut/bas près des coins" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terzi, metà superiore/inferiore vicino gli angoli" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3分割、画面端付近の上半分・下半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3, 위/아래 반에 근접한 모서리" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trečdalys, viršutinė/apačioje pusė šalia kampų" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedeler, øverste/nederste halvdel nære hjørne" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tredjedelar, øvste/nedste halvdel nære hjørne" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Трети, верхняя/нижняя половина возле углов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tretiny, horná/spodná polovica blízko rohov" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thirds, top/bottom side near corners" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üçte bir (köşelere yaklaşıldığında ise üst/alt)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Третини, верхня/нижня половина близько кутів" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/3, nửa trên/dưới nếu ngay góc" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "⅓,靠近角落则上/下半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "⅓,靠近角落則上半/下半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "⅓;靠近角落則上半/下半" + } + } + } }, "This leaves a little space showing the window below and is best with gaps between windows" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "This leaves a little space showing the window below and is best with gaps between windows" + } + } + } }, "Tile in Columns" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenster in Spalten" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tile in Columns" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ventanas en columnas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ventanas en columnas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenêtres en colonnes" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを列に並べる" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "按列平铺窗口" + } + } + } }, "Tile in Rows" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenster in Zeilen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tile in Rows" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ventanas en filas" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ventanas en filas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenêtres en lignes" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウを行に並べる" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "按行平铺窗口" + } + } + } }, "Tile Windows in Rows/Columns" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tile Windows in Rows/Columns" + } + } + } + }, + "Tiling" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiling" + } + } + } + }, + "Tiling in macOS has been disabled" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das Ziehen von Fenstern an den Bildschirmrand zum Anordnen wurde in den macOS Systemeinstellungen deaktiviert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiling in macOS has been disabled" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS のタイル表示機能が無効になりました" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS의 타일 정리 기능이 비활성화됨" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Umiestnenie dlaždíc v macOS bolo vypnuté" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tính năng xếp gạch trong macOS đã bị vô hiệu hóa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS 中的窗口平铺功能已被禁用" + } + } + } + }, + "Tiling in Rectangle has been disabled" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiling in Rectangle has been disabled" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle의 타일 정리 기능이 비활성화됨" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Việc xếp gạch trong hình chữ nhật đã bị vô hiệu hóa" + } + } + } + }, + "To adjust macOS tiling, go to System Settings → Desktop & Dock → Windows" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To adjust macOS tiling, go to System Settings → Desktop & Dock → Windows" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS 타일 정리 기능을 조정하려면, 시스템 설정 → 데스크탑 및 Dock → 윈도우로 이동하세요" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để điều chỉnh ô xếp macOS, hãy vào Cài đặt hệ thống → Màn hình nền & Dock → Windows" + } + } + } }, "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour permettre à Rectangle de gérer la fonctionnalité de double-clic sur la barre de titre d'une fenêtre, vous devez désactiver le paramètre macOS correspondant." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Damit Rectangle die Doppelklickfunktion der Titelleiste verwalten kann, muss die entsprechende macOS Systemeinstellung deaktiviert werden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para permitir que Rectangle administre la funcionalidad de doble click en la barra de título, debes deshabilitar los ajustes correspondientes de macOS." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Para permitir que Rectangle administre la funcionalidad de doble click en la barra de título, debes deshabilitar los ajustes correspondientes de macOS." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pour permettre à Rectangle de gérer la fonctionnalité de double-clic sur la barre de titre d'une fenêtre, vous devez désactiver le paramètre macOS correspondant." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per permettere a Rectangle di gestire la funzione di doppio clic sulla barra del titolo, devi disabilitare l'impostazione di macOS corrispondente." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleがタイトルバーのダブルクリック機能を管理するには、該当するmacOSの設定を無効にする必要があります。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle이 제목 막대 두 번 클릭 기능을 제어하려면, 해당하는 macOS 설정을 꺼야 합니다." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Norėdami leisti „Rectangle“ valdyti antraštės juostos dvigubą spustelėjimą, turite išjungti atitinkamą „macOS“ nustatymą." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å la Rectangle styre dobbeltklikking i vindustittelen må du slå av den tilsvarende innstillinga i macOS." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "For å la Rectangle styra dobbeltklikking i vindaugstittelen må du slå av den tilsvarande innstillinga i macOS." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Чтобы позволить Rectangle управлять функцией двойного щелчка в заголовке, необходимо отключить соответствующую настройку macOS." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aby Rectangle mohol spravovať funkciu dvojitého kliknutia v lište s názvom, musíš vypnúť príslušné nastavenie v macOS." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để cho phép Rectangle quản lý chức năng nhấp đúp vào thanh tiêu đề, bạn cần phải tắt cài đặt macOS tương ứng." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你需要禁用 macOS 中对应的设置以使用 Rectangle 管理连按窗口标题功能。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "若要讓 Rectangle 管理標題列連點功能,您需要停用對應的 macOS 設定。" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + } + } + } + }, + "To re-enable it, go to System Settings → Desktop & Dock → Windows" : { + "extractionState" : "manual", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um dies wieder zu aktivieren, gehe zu Systemeinstellungen → Schreibtisch & Dock → Fenster" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "To re-enable it, go to System Settings → Desktop & Dock → Windows" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再度有効化するには、システム設定 → デスクトップと Dock → ウインドウに移動します" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "다시 켜려면, 시스템 설정 → 데스크탑 및 Dock → 윈도우로 이동합니다" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre opätovné povolenie, prejdi do Systémové nastavenia → Plocha a Dock → Okná" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Để bật lại, hãy vào Cài đặt hệ thống → Màn hình nền & Dock → Windows" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "要重新启用它,请转到系统设置→ 桌面与程序坞 → 窗口" + } + } + } }, "Todo app width" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عرض تطبيق Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplada de l'aplicació Todo" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplada de l'aplicació Todo" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šířka Todo aplikace" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fensterbreite der To-do-Anwendung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo app width" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ancho de la aplicación 'Todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ancho de la aplicación 'Todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Largeur de l’application Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lebar aplikasi Todo" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Larghezza applicazione in evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ToDoアプリケーションのウインドウ幅" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 앱 폭" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo programos lango plotis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjerøliste-bredde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo application width" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjereliste-breidde" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo application width" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo application width" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo application width" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lățimea aplicației Todo" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ширина окна Todo приложения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šírka Todo aplikácie" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Att göra-applikationsbredd" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo uygulamasının genişliği" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ширина вікна Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiều rộng của ứng dụng Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "待办应用程序宽度" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "待辦應用程式寬度" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "待辦應用程式寬度" + } + } + } }, "Todo side" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جانب تودو" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "To-do-Seite" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lado del 'todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lado del 'todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Côté de Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lato In evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todoアプリケーションの位置" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 위치" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo pusė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjøreliste-side" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjereliste-side" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Расположение Todo приложения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo strana" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Бічна панель Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phía của Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "待办位置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "待辦方向" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo side" + } + } + } }, "Toggle stacked window badge" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle stacked window badge" + } + } + } }, "Toggle Todo" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تبديل Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "To-do-Modus aktivieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alternar modo 'Todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alternar modo 'Todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer/Désactiver Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva/disattiva In evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todoモードの切り替え" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 켜기/끄기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perjungti Todo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå av/på Gjøreliste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå av/på Gjereliste" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить режим Todo приложения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prepnúť Todo" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo'yu etkinleştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перемкнути Завдання" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bật/tắt Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用/禁用待办模式" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "切換待辦模式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle Todo" + } + } + } }, "Toggle window list" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toggle window list" + } + } + } }, "Top" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "النصف العلوي" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat superior" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meitat superior" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horní polovina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obere Hälfte" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad superior" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitad superior" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moitié du haut" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setengah Atas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metà superiore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "上半分" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위쪽 절반" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viršutinė pusė" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øverste halvdel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bovenste helft" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvste halvdel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Górna połowa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade superior" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metade superior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jumătatea de Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхняя половина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horná polovica" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Övre halvan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üst Yarım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхня половина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nửa trên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上半屏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "上半" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "上半" + } + } + } }, "Top Center Left 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Left 8th" + } + } + } + }, + "Top Center Left Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Left Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 가운데 왼쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trên cùng Bên trái Thứ tám" + } + } + } }, "Top Center Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Left Sixteenth" + } + } + } }, "Top Center Left Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Left Twelfth" + } + } + } }, "Top Center Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Ninth" + } + } + } }, "Top Center Right 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Right 8th" + } + } + } + }, + "Top Center Right Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Right Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 가운데 오른쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trên cùng Bên phải Thứ tám" + } + } + } }, "Top Center Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Right Sixteenth" + } + } + } }, "Top Center Right Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Right Twelfth" + } + } + } }, "Top Center Sixth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المركز السادس الأعلى" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè superior centre" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè superior centre" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horní prostřední šestina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oberes mittleres Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Center Sixth" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Centre Sixth" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante arriba centrado" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante arriba centrado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixième haut centre" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam Tengah Atas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesto superiore centrale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "中央上" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 가운데 1/6" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viršutinė šeštoji centre" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre midtre sjettedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midden boven zesde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre midtre sjettedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna szósta na środku u góry" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto superior central" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto Central Superior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șesimea din Centru Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхняя шестая по центру" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horná prostredná šestina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Övre mitten sjätte" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Üst Orta Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхня центральна шоста частина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 ở giữa bên trên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中上1/6" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中上1/6" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "中上1/6" + } + } + } }, "Top eighths from corners; maximize" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top eighths from corners; maximize" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위쪽 1/8, 모서리에서 최대화" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ tám hàng đầu từ các quả phạt góc; tối đa" + } + } + } }, "Top Left" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أعلى اليسار" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Superior esquerra" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Superior esquerra" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vlevo nahoře" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oben links" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arriba a la izquierda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arriba a la izquierda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En haut à gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiri Atas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In alto a sinistra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "왼쪽 위" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kairėje viršuje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre venstre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linksboven" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre venstre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lewy górny róg" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Topo esquerdo" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Topo Esquerdo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stânga Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Слева вверху" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vľavo hore" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Övre vänstra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol Üst" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхній лівий кут" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Góc trên bên trái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上" + } + } + } }, "Top Left 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left 8th" + } + } + } + }, + "Top Left Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 왼쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trên cùng bên trái thứ tám" + } + } + } }, "Top Left Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left Ninth" + } + } + } }, "Top Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left Sixteenth" + } + } + } }, "Top Left Sixth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أعلى اليسار السادس" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè superior esquerre" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè superior esquerre" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horní levá šestina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oberes linkes Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left Sixth" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante arriba a la izquierda" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante arriba a la izquierda" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixième haut gauche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam Kiri Atas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesto superiore sinistro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 왼쪽 1/6" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viršutinė šeštoji kairėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre venstre sjettedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Linksboven zesde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre venstre sjettedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna szósta po lewej u góry" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto superior à esquerda" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto Esquerdo Superior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șesimea din Stânga Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхняя шестая слева" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horná ľavá šestina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Övre vänstra sjätte" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sol Üst Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхня ліва шоста частина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 góc trên bên trái" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上1/6" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上1/6" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "左上1/6" + } + } + } }, "Top Left Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Left Twelfth" + } + } + } }, "Top Right" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اعلى اليمين" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "A dalt a la dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Superior dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vpravo nahoře" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oben rechts" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arriba a la derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Arriba a la derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En haut à droite" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kanan Atas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In alto a destra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오른쪽 위" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dešinėje viršuje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre høgre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechtsboven" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre høgre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prawy górny róg" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Em cima, à direita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Em cima, à direita" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dreapta Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Справа вверху" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vpravo hore" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Övre högra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ üst" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхній правий кут" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Góc trên bên phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上" + } + } + } }, "Top Right 8th" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right 8th" + } + } + } + }, + "Top Right Eighth" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right Eighth" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "오른쪽 1/8" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trên cùng bên phải thứ tám" + } + } + } }, "Top Right Ninth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right Ninth" + } + } + } }, "Top Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right Sixteenth" + } + } + } }, "Top Right Sixth" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أعلى اليمين السادس" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè superior dreta" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sisè superior dreta" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horní pravá šestina" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oberes rechtes Sechstel" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right Sixth" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante arriba a la derecha" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextante arriba a la derecha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixième haut droit" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seperenam Kanan Atas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesto superiore destro" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 오른쪽 1/6" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viršutinė šeštoji dešinėje" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre høgre sjettedel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rechtsboven zesde" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvre høgre sjettedel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedna szósta po prawej u góry" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto superior à direita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sexto Direito Superior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șesimea din Dreapta Sus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхняя шестая справа" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horná pravá šestina" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Övre högra sjätte" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağ Üst Altıda bir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхнія права шоста частина" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 góc trên bên phải" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上1/6" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上1/6" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "右上1/6" + } + } + } }, "Top Right Twelfth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Right Twelfth" + } + } + } + }, + "Top screen edge tiling in macOS is now disabled" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top screen edge tiling in macOS is now disabled" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "macOS의 화면 상단 가장자리 타일 정렬이 꺼졌습니다" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tính năng ghép cạnh màn hình trên cùng trong macOS hiện đã bị vô hiệu hóa" + } + } + } }, "Top sixths from corners; maximize" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixièmes haut à partir les coins ; maximiser" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horní šestiny z rohů; maximalizovat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obere Sechstel beim Ziehen aus den Ecken; maximieren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos superiores de las esquinas; maximizar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sextos superiores de las esquinas; maximizar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sixièmes haut à partir les coins ; maximiser" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sesti superiori dagli angoli; massimizza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大化(画面端にドラッグで上側6分割)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위쪽 1/6, 모서리에서 최대화" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viršutinės šeštosios nuo kampų; maksimizuoti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øverste sjettedel fra hjørne; maksimer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øvste sjettedel frå hjørne; maksimer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхние шестые от углов; максимизировать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horné šestiny z rohov; maximalizovať" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top sixths from corners; maximize" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamamını kapla (köşelere yaklaşıldığında ise altıda birini kapla)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Верхні шості від кутів; максимізувати" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/6 phía trên ngay góc; phóng to tối đa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自角落则顶部⅙;最大化" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "自角落則頂部⅙;放到最大" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "自角落則頂部⅙;放到最大" + } + } + } }, "Top Third" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Third" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 1/3" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trên cùng thứ ba" + } + } + } }, "Top Two Thirds" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top Two Thirds" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위 2/3" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai phần ba hàng đầu" + } + } + } + }, + "Top/bottom sides" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top/bottom sides" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위/아래 반" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Górna/Dolna połowa" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nửa trên/dưới" + } + } + } }, "Top/bottoms" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Top/bottoms" + } + } + } }, "Treat multiple displays as one" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Treat multiple displays as one" + } + } + } + }, + "Treat multiple monitors as one" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Treat multiple monitors as one" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여러 모니터를 하나로 인식" + } + } + } + }, + "Twelfths" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twelfths" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/12" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ mười hai" + } + } + } + }, + "Twelfths (4×3)" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twelfths (4×3)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/12 (4×3)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ mười hai (4×3)" + } + } + } + }, + "Unable to resize window smaller.\nWindows may overlap." : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to resize window smaller.\nWindows may overlap." + } + } + } + }, + "Undo" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الغاء التحميل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desfés" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desfés" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zpět" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widerrufen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Undo" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deshacer" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deshacer" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Balik" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annulla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "元に戻す" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "실행 취소" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atšaukti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongedaan maken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angra" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cofnij" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desfazer" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desfazer" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anulează Ultima Modificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отменить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Späť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ångra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geri Al" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Відмінити" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoàn tác" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "撤销" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "還原" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "還原" + } + } + } }, "Update Available…" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Update Available…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "업데이트 가능…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cập nhật có sẵn…" + } + } + } }, "Upper Middle Center Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upper Middle Center Left Sixteenth" + } + } + } }, "Upper Middle Center Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upper Middle Center Right Sixteenth" + } + } + } }, "Upper Middle Left Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upper Middle Left Sixteenth" + } + } + } }, "Upper Middle Right Sixteenth" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upper Middle Right Sixteenth" + } + } + } }, "Use as Todo Window" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser comme fenêtre Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als To-do-Fenster verwenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar como ventana 'Todo'" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar como ventana 'Todo'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser comme fenêtre Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa come finestra in evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todoウインドウとして使用" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 윈도우로 사용" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naudoti kaip Todo langą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk som Gjøreliste-vindu" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk som Gjereliste-vindauge" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Použiť ako Todo okno" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Використовувати як вікно Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sử dụng như cửa sổ Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "作为待办窗口" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "做為待辦視窗" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use as Todo Window" + } + } + } + }, + "Use cursor position for screen detection" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use cursor position for screen detection" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "화면 감지에 커서 위치 사용" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sử dụng vị trí con trỏ để nhận diện màn hình" + } + } + } }, "Use cursor screen detection" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use cursor screen detection" + } + } + } }, "Use frontmost.app as Todo App" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser frontmost.app comme application Todo" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilitza frontmost.app com a app Todo" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilitza frontmost.app com a app Todo" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwende frontmost.app als To-do-Anwendung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser frontmost.app comme application Todo" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gunakan frontmost.app sebagai Aplikasi Todo" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa frontmost.app come applicazione in evidenza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "frontmost.appをToDoアプリとして使う" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "frontmost.app을 Todo 앱으로 사용" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naudoti pirmame plane esantį langą kaip Todo programą" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk frontmost.app som Gjøreliste-program" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk frontmost.app som Gjereliste-program" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use frontmost.app as Todo App" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Использовать окно на переднем плане в качестве Todo приложения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Použiť frontmost.app ako Todo aplikáciu" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använd frontmost.app som Att göra-app" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Використовувати frontmost.app як застосунок Завдань" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dùng frontmost.app làm ứng dụng Todo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 frontmost.app 作为待办应用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用 frontmost.app 作為待辦應用程式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用frontmost.app作為待辦應用" + } + } + } + }, + "Use Selection for Find" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استخدم التحديد للبحث" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilitzeu la selecció per a la cerca" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilitzeu la selecció per a la cerca" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat výběr" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Auswahl für Suche übernehmen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use Selection for Find" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar la selección para buscar" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar la selección para buscar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser la sélection pour la recherche" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gunakan Pilihan untuk Temukan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa selezione per trovare" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "選択部分を検索に使用" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택 부분으로 찾기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naudoti pasirinktą paieškai" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk markert tekst for å finne" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gebruik selectie voor zoeken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk markert tekst for å finna" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Użyj wyboru, aby znaleźć" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar seleção para buscar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar seleção para procurar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folosește Selecția pentru Căutare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Использовать выбранное для поиска" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Použiť výber pri hľadaní" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använd markerad för att söka" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use Selection for Find" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Використовувати виділення для пошуку" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dùng lựa chọn để tìm kiếm" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查找所选内容" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用所選範圍尋找" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用所選範圍尋找" + } + } + } + }, + "Version" : { + "extractionState" : "manual", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verze" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versión" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versión" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "バージョン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "버전" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versão" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versiune" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verzia" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sürüm" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Версія" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phiên bản" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本" + } + } + } }, "Vertical (T/B, %)" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vertical (T/B, %)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "수직 (상/하, %)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dọc (T/B, %)" + } + } + } }, "vertically" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "vertically" + } + } + } + }, + "Vertically" : { + }, + "View" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "منظر" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visualitza" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visualitza" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazit" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Darstellung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "View" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afficher" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tampilan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vista" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보기" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peržiūra" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekijk" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widok" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visualizar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vizualizează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Просмотр" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobraziť" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visa" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Görünüm" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вигляд" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xem" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示方式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示方式" + } + } + } + }, + "View Logging…" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عرض التسجيل ..." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veure registre de missatges…" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veure registre de missatges…" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazit logování…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Protokolle anzeigen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "View Logging…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver registro de mensajes…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver registro de mensajes…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voir le journal…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lihat Pencatatan…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vedi resoconto…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ログを表示…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "로그 보기…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peržiūrėti žurnalą…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis loggen…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "View Logging…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vis loggen…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokaż logowanie…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visualizar logs…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ver Registos…" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vizualizează Log-uri…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Просмотр журнала…" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobraziť záznamy…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visa loggen…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "View Logging…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Переглянути журнал подій…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xem nhật ký…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查看日志…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "檢視記錄⋯" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "檢視記錄⋯" + } + } + } }, "Welcome to Rectangle!" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مرحبًا بك في المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benvingut a Rectangle!" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benvingut a Rectangle!" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vítejte do Rectangle!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Willkommen bei Rectangle!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Welcome to Rectangle!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Bienvenido a Rectangle!" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Bienvenido a Rectangle!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bienvenue dans Rectangle !" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selamat Datang di Rectangle!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle ti dà il benvenuto!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangleへようこそ!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle에 오신 것을 환영합니다!" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sveiki atvykę į Rectangle!" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velkommen til Rectangle!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Welcome to Rectangle!" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velkomen til Rectangle!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Witaj w Rectangle!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bem vindo ao Rectangle!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bem-vindo ao Rectangle!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bine ai venit în Rectangle!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добро пожаловать в Rectangle!" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Víta Ťa Rectangle!" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välkommen till Rectangle!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle'a Hoşgeldiniz!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ласкаво просимо до Rectangle!" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chào mừng đến với Rectangle!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "欢迎使用 Rectangle!" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "歡迎使用 Rectangle!" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "歡迎使用Rectangle!" + } + } + } + }, + "Welcome!" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مرحباً" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benvingut!" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benvingut!" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vítejte!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Willkommen!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Welcome!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Bienvenido!" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Bienvenido!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bienvenue !" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selamat Datang!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ti diamo il benvenuto!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ようこそ!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "환영합니다!" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sveiki!" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velkommen!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Welcome!" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velkomen!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Witaj!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bem vindo!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bem-vindo!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bine ai venit!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добро пожаловать!" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vitaj!" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välkommen!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoşgeldiniz!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ласкаво просимо!" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xin chào!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "欢迎!" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "歡迎!" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "歡迎!" + } + } + } }, "When the menu bar icon is hidden, relaunch Rectangle from Finder to open" : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عندما تكون أيقونة شريط القائمة مخفية ، أعد تشغيل المستطيل من Finder لفتح القائمة" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quan la icona de la barra de menús estigui amagada, torneu a iniciar Rectangle des del Finder per obrir el menú." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quan la icona de la barra de menús estigui amagada, torneu a iniciar Rectangle des del Finder per obrir el menú." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokud je ikona skrytá v řádku nabídek, tak znovu spusťte Rectangle přes Finder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn das Menüleistensymbol ausgeblendet ist, starte Rectangle im Finder neu, um die Rectangle-Einstellungen zu öffnen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "When the menu bar icon is hidden, relaunch Rectangle from Finder to open" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuando el icono de la barra de menús esté oculto, vuelva a iniciar Rectangle desde el Finder para abrir el menú." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuando el icono de la barra de menús esté oculto, vuelva a iniciar Rectangle desde el Finder para abrir el menú." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsque l'icône de la barre des menus est masquée, relancez Rectangle depuis le Finder pour ouvrir le menu." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saat ikon bilah menu disembunyikan, luncurkan kembali Rectangle dari Finder untuk membuka menu." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando l'icona dalla barra dei menu è nascosta, rilancia Rectangle dal Finder per aprire il menu." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メニューバーのアイコンが非表示の場合にメニューを開くには、FinderからRectangleを再起動してください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메뉴 막대 아이콘이 숨겨져 있을 경우, Finder에서 Rectangle를 다시 시작하여 메뉴를 여십시오." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jei meniu juostos piktograma yra paslėpta, paleiskite Rectangle programą iš Finder, kad atidarytumėte meniu." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når menyradikonet er skjult kan du starte Rectangle fra Finder for å åpne menyen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als het menubalk-pictogram verborgen is, start u Rectangle opnieuw vanuit Finder om het menu te openen." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når menyradikonet er gøymd kan du starta Rectangle frå Finder for å opna menyen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gdy ikona paska menu jest ukryta, ponownie uruchom Rectangle z Findera, aby otworzyć menu." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando o ícone da barra de menus estiver oculto, reinicie o Rectangle pelo Finder para abrir o menu." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando o ícone da barra de menus estiver oculto, reinicie o Rectangle do Finder para abrir o menu." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dacă iconița din bara de meniu este ascunsă, repornește Rectangle din Finder" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если значок строки меню скрыт, перезапустите программу Rectangle из Finder, чтобы открыть меню." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ak je ikona v lište skrytá, znovu spusti Rectangle z Findera" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "När menyradens ikon är dold, starta då Rectangle från Finder för att öppna menyn." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menü simgesi gizlendiğinde, menüyü açmak için Rectangle'ı Finder ile yeniden açın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Коли піктограма у рядку меню прихована, перезапустіть Rectangle з Finder для відкриття" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khi biểu tượng trên thanh menu bị ẩn, khởi chạy Rectangle từ Finder để mở lại" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当菜单栏图标被隐藏时,从访达重新开启Rectangle以打开。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "選單列圖示被隱藏時,從 Finder 重新啟動 Rectangle 來打開。" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "選單列圖像被隱藏時,從Finder重新啟動Rectangle以開啟。" + } + } + } }, "When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF." : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF." + } + } + } }, "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." : { - + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أثناء وجودك في Todo Mode ، يمكنك تحديث تخطيط Todo Mode عن طريق تحديد 'Reflow Todo ' في قائمة Rectangle أو تنفيذ اختصار لوحة المفاتيح المرتبط" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mentre esteu al mode Todo, podeu actualitzar el disseny del mode TodoO seleccionant \"Redistribuir Todo\" al menú Rectangle o executant la drecera de teclat associada." + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mentre esteu al mode Todo, podeu actualitzar el disseny del mode TodoO seleccionant \"Redistribuir Todo\" al menú Rectangle o executant la drecera de teclat associada." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozložení Todo módu můžete obnovit vybráním \"Zobrazit Todo\" v Rectangle menu nebo exekucí nastavené zkratky." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du kannst im To-do-Modus die To-do-Anwendung neu ausrichten indem du \"To-do neu ausrichten\" im Rectangle-Menü auswählst oder die zugewiesene Tastenkombination ausführst." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mientras esté en modo 'Todo', puede refrescar la disposición del modo 'Todo' seleccionando \"Reflujo en 'Todo'\" en el menú de Rectangle o usando el atajo de teclado asociado." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mientras esté en modo 'Todo', puede refrescar la disposición del modo 'Todo' seleccionando \"Reflujo en 'Todo'\" en el menú de Rectangle o usando el atajo de teclado asociado." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsque vous êtes en mode Todo, vous pouvez rafraîchir la vue en sélectionnant « Rafraîchir Todo » dans le menu de Rectangle ou en utilisant le raccourci clavier associé." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saat dalam Mode Todo, Anda dapat menyegarkan tata letak Mode Todo dengan memilih \"Alur Ulang Todo » di menu Rectangle menu atau menjalankan pintasan keyboard terkait." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durante la modalità In evidenza, puoi reimpostarla selezionando \"Reimposta In Evidenza\" nel menu di Rectangle o con l'abbreviazione da tastiera impostata." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ToDoモードのウインドウ配置を復元するには、ToDoモードのときに、Rectangleのメニューにある\"ToDoモードを再設定\"を選択するか、指定されたキーボードショートカットを押します。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo 모드를 사용하는 동안, Rectangle 메뉴에서 \"Todo 재배치\"를 클릭하거나 키보드 단축키를 사용해 Todo 모드 레이아웃을 새로고칠 수 있습니다." + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kai įjungtas Todo režimas, galite atnaujinti Todo režimo išdėstymą pasirinkdami „Atnaujinti Todo“ Rectangle meniu arba įvykdę susietą klaviatūros trumpinį." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når du er i Gjøreliste-modus kan du oppdatere Gjøreliste-oppsettet ved å velge \"Flytt om på Gjøreliste\" i Rectangle-menyen eller ved å benytte definerte tastatursnarveger." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når du er i Gjereliste-modus kan du oppdatera Gjereliste-oppsettet ved å velja \"Flytt om på Gjereliste\" i Rectangle-menyen eller ved å nytta definerte tastatursnarvegar." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din Modul Todo, poți reactualiza aspectul Modului Todo selectând \"Reflow Todo\" în meniul Rectangle sau folosind scurtătura asociată acestuia." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "При включенном Todo режиме вы можете обновить положение окна Todo приложения выбрав \"Обновить положение Todo окна\" в меню Rectangle или при помощи соответствующей горячей клавиши." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "V Todo režime môžeš obnoviť rozloženie Todo režimu vyberom \"Preusporiadať Todo\" v Rectangle menu alebo pomocou príslušnej skratky." + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "När du är i Att göra-läget kan du uppdatera Att göra-layouten genom att välja \"Ordna om Att göra\" i Rectangle-menyn eller genom att använda tilldelat tangentbordsgenväg." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Todo Modu aktifken Rectangle menüsündeki \"Todo'yu Yeniden Ayarla\" seçeneği ile veya tanımladığınız klavye kısayolu ile ekran düzenini tazeleyebilirsiniz." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Під час роботи в режимі Завдань ви можете оновити макет режиму Завдань, вибравши «Переформатувати вікна Завдань» у меню Rectangle або виконавши пов’язану комбінацію клавіш." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khi ở chế độ Todo, bạn có thể làm mới bố cục của chế độ Todo bằng cách chọn \"Làm mới Todo\" trong menu của Rectangle hoặc ấn phím tắt tương ứng." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在“待办模式”下,若要刷新待办模式布局,您可以从 Rectangle 菜单中选择“重新排列待办”,或使用对应的键盘快捷键。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在待辦模式下,若要重新整理待辦模式佈局,您可以從 Rectangle 選單中選擇「重新排列待辦」,或使用相應的鍵盤快速鍵" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "在待辦模式下,若要重新整理待辦模式佈局,你可以從Rectangle選單中選擇「重新排列待辦」,或使用相應的鍵盤快捷鍵" + } + } + } }, "Width Step (px)" : { - + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Width Step (px)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "너비 단위 (px)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Шаг ширины (px)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bước chiều rộng (px)" + } + } + } + }, + "Window" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نافذة او شباك" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finestra" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finestra" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okno" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenster" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Window" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ventana" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ventana" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fenêtre" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jendela" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finestra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウインドウ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "창" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Langas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vindu" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venster" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vindauge" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okno" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Janela" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Janela" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fereastră" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Окно" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okno" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fönster" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pencere" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вікно" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cửa sổ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "窗口" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "視窗" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "視窗" + } + } + } } }, "version" : "1.3" -} \ No newline at end of file +} diff --git a/Rectangle/SettingsWindow/AppSettingsView.swift b/Rectangle/SettingsWindow/AppSettingsView.swift index 39054170e..df91cec0f 100644 --- a/Rectangle/SettingsWindow/AppSettingsView.swift +++ b/Rectangle/SettingsWindow/AppSettingsView.swift @@ -65,13 +65,13 @@ struct AppSettingsView: View { Button { viewModel.importConfig() } label: { - Label("Import Config", systemImage: "square.and.arrow.down") + Label("Import", systemImage: "square.and.arrow.down") } Button { viewModel.exportConfig() } label: { - Label("Export Config", systemImage: "square.and.arrow.up") + Label("Export", systemImage: "square.and.arrow.up") } } diff --git a/Rectangle/SettingsWindow/SnapAreaSettingsView.swift b/Rectangle/SettingsWindow/SnapAreaSettingsView.swift index 1e80943c9..7b27b5e32 100644 --- a/Rectangle/SettingsWindow/SnapAreaSettingsView.swift +++ b/Rectangle/SettingsWindow/SnapAreaSettingsView.swift @@ -147,7 +147,7 @@ struct SnapAreaSettingsView: View { @StateObject private var viewModel = SnapAreaViewModel() private var landscapeHeaderTitle: String { - viewModel.isPortraitConnected ? "Landscape Snap Areas" : "Snap Areas" + viewModel.isPortraitConnected ? String(localized: "Landscape Snap Areas") : String(localized: "Snap Areas") } var body: some View { @@ -160,7 +160,7 @@ struct SnapAreaSettingsView: View { // Customization Options Section { - Toggle("Provide haptic feedback", isOn: $viewModel.hapticFeedback) + Toggle("Haptic feedback", isOn: $viewModel.hapticFeedback) Toggle("Animate footprint", isOn: $viewModel.animateFootprint) Toggle("Blur footprint", isOn: $viewModel.footprintBlur) diff --git a/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift b/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift index bc5dbb8fe..78b2c6efd 100644 --- a/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift +++ b/Rectangle/Snapping/CompoundSnapArea/CompoundSnapArea.swift @@ -23,13 +23,13 @@ enum CompoundSnapArea: Int, Codable { var displayName: String { switch self { case .leftTopBottomHalf: - return String(localized: "Left side, top/bottom near corners") + return String(localized: "Left side, top/bottom side near corners") case .rightTopBottomHalf: - return String(localized: "Right side, top/bottom near corners") + return String(localized: "Right side, top/bottom side near corners") case .thirds: return String(localized: "Thirds, drag toward center for two thirds") case .portraitThirdsSide: - return String(localized: "Thirds, top/bottom near corners") + return String(localized: "Thirds, top/bottom side near corners") case .halves: return String(localized: "Left or right side") case .topSixths: diff --git a/Rectangle/SubsequentExecutionMode.swift b/Rectangle/SubsequentExecutionMode.swift index 7ee4c0322..c4eccdba5 100644 --- a/Rectangle/SubsequentExecutionMode.swift +++ b/Rectangle/SubsequentExecutionMode.swift @@ -12,12 +12,12 @@ enum SubsequentExecutionMode: Int { var title: String { switch self { - case .resize: return "Cycle sizes on side actions" - case .acrossMonitor: return "Move to adjacent display on left or right" - case .none: return "Do Nothing" - case .acrossAndResize: return "Move to adjacent on left/right, or cycle size on side" - case .cycleMonitor: return "Cycle through displays" - case .resizeAndCycleQuadrants: return "Cycle positions on quadrants, cycle sizes on side" + case .resize: return String(localized: "cycle sizes on side actions") + case .acrossMonitor: return String(localized: "move to adjacent display on left or right") + case .none: return String(localized: "do nothing") + case .acrossAndResize: return String(localized: "move to adjacent on left/right, or cycle size on side") + case .cycleMonitor: return String(localized: "cycle through displays") + case .resizeAndCycleQuadrants: return String(localized: "cycle positions on quadrants, cycle sizes on side") } } From d606731776efc1f9536c41062d141764dfaaa5ac Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:40:26 -0400 Subject: [PATCH 68/79] More localization --- Rectangle/Localizable.xcstrings | 8 +++++++- Rectangle/SettingsWindow/SettingsWindowController.swift | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 7b02130ee..91e47a7e8 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -2484,6 +2484,9 @@ } } } + }, + "App Settings" : { + }, "Authorize Rectangle" : { "localizations" : { @@ -2865,6 +2868,9 @@ } } } + }, + "Behavior" : { + }, "Blur appearance" : { "localizations" : { @@ -33894,4 +33900,4 @@ } }, "version" : "1.3" -} +} \ No newline at end of file diff --git a/Rectangle/SettingsWindow/SettingsWindowController.swift b/Rectangle/SettingsWindow/SettingsWindowController.swift index b9645c1a7..6f4d40dea 100644 --- a/Rectangle/SettingsWindow/SettingsWindowController.swift +++ b/Rectangle/SettingsWindow/SettingsWindowController.swift @@ -32,10 +32,10 @@ class SettingsTabViewController: NSTabViewController { var label: String { switch self { - case .shortcuts: return "Shortcuts" - case .snapAreas: return "Snap Areas" - case .behavior: return "Behavior" - case .appSettings: return "App Settings" + case .shortcuts: return String(localized:"Shortcuts") + case .snapAreas: return String(localized:"Snap Areas") + case .behavior: return String(localized:"Behavior") + case .appSettings: return String(localized:"App Settings") } } From 5702eded8acf1f2e8c8d60f240003549542f3e46 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:48:49 -0400 Subject: [PATCH 69/79] Removed old storyboard items and corresponding appkit files --- Rectangle.xcodeproj/project.pbxproj | 34 +- Rectangle/Base.lproj/Main.storyboard | 4301 ----------------- .../PrefsWindow/ExtraSettingsPopover.swift | 432 -- .../PrefsWindow/PrefsViewController.swift | 157 - .../PrefsWindow/SettingsViewController.swift | 754 --- .../PrefsWindow/SnapAreaViewController.swift | 302 -- .../Config.swift | 0 .../ShortcutRecordingObserver.swift | 0 .../ShortcutsViewController.swift | 16 + Rectangle/mul.lproj/Main.xcstrings | 349 +- 10 files changed, 176 insertions(+), 6169 deletions(-) delete mode 100644 Rectangle/PrefsWindow/ExtraSettingsPopover.swift delete mode 100644 Rectangle/PrefsWindow/PrefsViewController.swift delete mode 100644 Rectangle/PrefsWindow/SettingsViewController.swift delete mode 100644 Rectangle/PrefsWindow/SnapAreaViewController.swift rename Rectangle/{PrefsWindow => SettingsWindow}/Config.swift (100%) rename Rectangle/{PrefsWindow => SettingsWindow}/ShortcutRecordingObserver.swift (100%) diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index 44fef853e..db0d51b55 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -43,7 +43,6 @@ 895C73559E1ACEFBBE8DC32D /* UpperMiddleCenterRightSixteenthCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEBF3EA35F0C110A170EAD33 /* UpperMiddleCenterRightSixteenthCalculation.swift */; }; 8B1D14E3A55936EBCCC1E807 /* MiddleRightTwelfthCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA84AB4DB9E7EEFCE50AA6D8 /* MiddleRightTwelfthCalculation.swift */; }; 924919761FC491952752A147 /* TopCenterLeftTwelfthCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9698D1D9EE0180D7C4468304 /* TopCenterLeftTwelfthCalculation.swift */; }; - 944F25CD2CE5A144004B2FD2 /* PrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */; }; 944F25CF2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */; }; 944F25D12CE5A144004B2FD2 /* ShortcutRecordingObserverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944F25D02CE5A144004B2FD2 /* ShortcutRecordingObserverTests.swift */; }; 94E9B08E2C3B8D97004C7F41 /* MacTilingDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E9B08D2C3B8D97004C7F41 /* MacTilingDefaults.swift */; }; @@ -89,7 +88,6 @@ 9824704F22B189250037B409 /* BestEffortWindowMover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824704A22B189250037B409 /* BestEffortWindowMover.swift */; }; 9824705122B28D7A0037B409 /* LeftRightHalfCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824705022B28D7A0037B409 /* LeftRightHalfCalculation.swift */; }; 983BBD6F253B609D000D223E /* FootprintWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983BBD6E253B609D000D223E /* FootprintWindow.swift */; }; - 983DD04028A844BE00BF1EEE /* SnapAreaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983DD03F28A844BE00BF1EEE /* SnapAreaViewController.swift */; }; 983DD04428B0639E00BF1EEE /* SnapAreaModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983DD04328B0639E00BF1EEE /* SnapAreaModel.swift */; }; 984EDB0F29A42ED200D119D2 /* LaunchOnLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 984EDB0E29A42ED200D119D2 /* LaunchOnLogin.swift */; }; 9851A5C3251BEBA300ECF78C /* OrientationAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9851A5C2251BEBA300ECF78C /* OrientationAware.swift */; }; @@ -106,7 +104,6 @@ 988D067D22EB4E17004EABD7 /* AlmostMaximizeCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D067C22EB4E17004EABD7 /* AlmostMaximizeCalculation.swift */; }; 988D067F22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D067E22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift */; }; 988D068322EB4EF3004EABD7 /* MoveUpDownCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D068222EB4EF3004EABD7 /* MoveUpDownCalculation.swift */; }; - 98910B3E231130AF0066EC23 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98910B3D231130AF0066EC23 /* SettingsViewController.swift */; }; 98985839305C1B6400459AFF /* SettingsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98985838305C1B6400459AFF /* SettingsWindowController.swift */; }; 9898583B305C1B6400459AFF /* ShortcutsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */; }; 98987AA42391890400BE72C4 /* LogViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 98987AA22391890300BE72C4 /* LogViewer.storyboard */; }; @@ -133,12 +130,10 @@ 98C27561231FFA5F009B9292 /* SnappingManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C27560231FFA5F009B9292 /* SnappingManager.swift */; }; 98C275672322E2DA009B9292 /* WindowHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C275662322E2DA009B9292 /* WindowHistory.swift */; }; 98C6DEF023CE191700CC0C1E /* GapCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C6DEEF23CE191700CC0C1E /* GapCalculation.swift */; }; - 98C97FFD25893B040061F01F /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C97FFC25893B040061F01F /* Config.swift */; }; 98D1441324560B1E0090C603 /* AlertUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D1441224560B1E0090C603 /* AlertUtil.swift */; }; 98D16A442592AD55005228CB /* MASShortcutMigration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D16A432592AD55005228CB /* MASShortcutMigration.swift */; }; 98D16A492592B460005228CB /* NotificationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D16A482592B460005228CB /* NotificationExtension.swift */; }; 98D4B6C525B6256C009C7BF6 /* TodoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */; }; - 98ED7038305D9AEE0077BD10 /* ExtraSettingsPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */; }; 98ED703A305DB1180077BD10 /* BehaviorSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */; }; 98ED703C305DB20A0077BD10 /* BehaviorSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */; }; 98ED703E305DC12D0077BD10 /* MASShortcutViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */; }; @@ -149,6 +144,7 @@ 98ED73AA3062FCD20077BD10 /* PopoverButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73A93062FCD20077BD10 /* PopoverButton.swift */; }; 98ED73AE3064567B0077BD10 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */; }; 98ED73B0306558490077BD10 /* AccessibilityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73AF306558490077BD10 /* AccessibilityView.swift */; }; + 98ED73DC30657D7D0077BD10 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98ED73DB30657D7D0077BD10 /* Config.swift */; }; 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */; }; 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */; }; 98FD7C612687BCB6009E9DAF /* LastThreeFourthsCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */; }; @@ -276,7 +272,6 @@ 8AE08B666CCCD1805CAB08BD /* LowerMiddleCenterRightSixteenthCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LowerMiddleCenterRightSixteenthCalculation.swift; sourceTree = ""; }; 8B8CA6901E6FE134E930135B /* UpperMiddleCenterLeftSixteenthCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpperMiddleCenterLeftSixteenthCalculation.swift; sourceTree = ""; }; 918F847FF15D524B6DB2E6DA /* TopCenterRightSixteenthCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopCenterRightSixteenthCalculation.swift; sourceTree = ""; }; - 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsViewController.swift; sourceTree = ""; }; 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutRecordingObserver.swift; sourceTree = ""; }; 944F25D02CE5A144004B2FD2 /* ShortcutRecordingObserverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutRecordingObserverTests.swift; sourceTree = ""; }; 94E9B08D2C3B8D97004C7F41 /* MacTilingDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacTilingDefaults.swift; sourceTree = ""; }; @@ -331,7 +326,6 @@ 9824704A22B189250037B409 /* BestEffortWindowMover.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BestEffortWindowMover.swift; sourceTree = ""; }; 9824705022B28D7A0037B409 /* LeftRightHalfCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeftRightHalfCalculation.swift; sourceTree = ""; }; 983BBD6E253B609D000D223E /* FootprintWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FootprintWindow.swift; sourceTree = ""; }; - 983DD03F28A844BE00BF1EEE /* SnapAreaViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapAreaViewController.swift; sourceTree = ""; }; 983DD04328B0639E00BF1EEE /* SnapAreaModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapAreaModel.swift; sourceTree = ""; }; 984EDB0E29A42ED200D119D2 /* LaunchOnLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchOnLogin.swift; sourceTree = ""; }; 9851A5C2251BEBA300ECF78C /* OrientationAware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrientationAware.swift; sourceTree = ""; }; @@ -346,7 +340,6 @@ 988D067C22EB4E17004EABD7 /* AlmostMaximizeCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlmostMaximizeCalculation.swift; sourceTree = ""; }; 988D067E22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveLeftRightCalculation.swift; sourceTree = ""; }; 988D068222EB4EF3004EABD7 /* MoveUpDownCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveUpDownCalculation.swift; sourceTree = ""; }; - 98910B3D231130AF0066EC23 /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; 98985838305C1B6400459AFF /* SettingsWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsWindowController.swift; sourceTree = ""; }; 9898583A305C1B6400459AFF /* ShortcutsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsViewController.swift; sourceTree = ""; }; 98987AA22391890300BE72C4 /* LogViewer.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LogViewer.storyboard; sourceTree = ""; }; @@ -373,12 +366,10 @@ 98C27560231FFA5F009B9292 /* SnappingManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnappingManager.swift; sourceTree = ""; }; 98C275662322E2DA009B9292 /* WindowHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowHistory.swift; sourceTree = ""; }; 98C6DEEF23CE191700CC0C1E /* GapCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GapCalculation.swift; sourceTree = ""; }; - 98C97FFC25893B040061F01F /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 98D1441224560B1E0090C603 /* AlertUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertUtil.swift; sourceTree = ""; }; 98D16A432592AD55005228CB /* MASShortcutMigration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutMigration.swift; sourceTree = ""; }; 98D16A482592B460005228CB /* NotificationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExtension.swift; sourceTree = ""; }; 98D4B6C425B6256C009C7BF6 /* TodoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoManager.swift; sourceTree = ""; }; - 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraSettingsPopover.swift; sourceTree = ""; }; 98ED7039305DB1180077BD10 /* BehaviorSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BehaviorSettingsView.swift; sourceTree = ""; }; 98ED703B305DB20A0077BD10 /* BehaviorSettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BehaviorSettingsViewModel.swift; sourceTree = ""; }; 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MASShortcutViewRepresentable.swift; sourceTree = ""; }; @@ -389,6 +380,7 @@ 98ED73A93062FCD20077BD10 /* PopoverButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverButton.swift; sourceTree = ""; }; 98ED73AD3064567B0077BD10 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; 98ED73AF306558490077BD10 /* AccessibilityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityView.swift; sourceTree = ""; }; + 98ED73DB30657D7D0077BD10 /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 98FA9496235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepeatedExecutionsCalculation.swift; sourceTree = ""; }; 98FD7C5E2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstThreeFourthsCalculation.swift; sourceTree = ""; }; 98FD7C602687BCB6009E9DAF /* LastThreeFourthsCalculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastThreeFourthsCalculation.swift; sourceTree = ""; }; @@ -731,7 +723,6 @@ AA49DD2029B8C1B100690E13 /* GreenButtonManager.swift */, 98987AA62391890C00BE72C4 /* Logging */, 98ED704D306179160077BD10 /* SettingsWindow */, - 98910B3C2311304D0066EC23 /* PrefsWindow */, 989DA30C243FC0C3008C7AA4 /* WelcomeWindow */, 98C2755F231FF6AE009B9292 /* Snapping */, F1AC0DE000000000000000A5 /* StackBadge */, @@ -767,19 +758,6 @@ path = Popover; sourceTree = ""; }; - 98910B3C2311304D0066EC23 /* PrefsWindow */ = { - isa = PBXGroup; - children = ( - 944F25CC2CE5A144004B2FD2 /* PrefsViewController.swift */, - 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, - 98910B3D231130AF0066EC23 /* SettingsViewController.swift */, - 98ED7037305D9AE50077BD10 /* ExtraSettingsPopover.swift */, - 983DD03F28A844BE00BF1EEE /* SnapAreaViewController.swift */, - 98C97FFC25893B040061F01F /* Config.swift */, - ); - path = PrefsWindow; - sourceTree = ""; - }; 98987AA62391890C00BE72C4 /* Logging */ = { isa = PBXGroup; children = ( @@ -827,8 +805,10 @@ 98ED7049306171650077BD10 /* AppSettingsView.swift */, 98ED704A306171650077BD10 /* AppSettingsViewModel.swift */, 98ED704E306180AD0077BD10 /* SnapAreaSettingsView.swift */, + 944F25CE2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift */, 98ED73A93062FCD20077BD10 /* PopoverButton.swift */, 98ED703D305DC12D0077BD10 /* MASShortcutViewRepresentable.swift */, + 98ED73DB30657D7D0077BD10 /* Config.swift */, ); path = SettingsWindow; sourceTree = ""; @@ -1014,6 +994,7 @@ 98BEFA482620DEDD00D9D54F /* NSImageExtension.swift in Sources */, 98FA9497235A2D7600F95C4F /* RepeatedExecutionsCalculation.swift in Sources */, D0CFE33727A8CD51004DA47B /* BottomRightThirdCalculation.swift in Sources */, + 98ED73DC30657D7D0077BD10 /* Config.swift in Sources */, 9824705122B28D7A0037B409 /* LeftRightHalfCalculation.swift in Sources */, 9824703D22B13C7E0037B409 /* AccessibilityElement.swift in Sources */, 98D1441324560B1E0090C603 /* AlertUtil.swift in Sources */, @@ -1081,12 +1062,10 @@ 7B4C0A212F1B000100C0FFEE /* RepeatedMaximizeRestore.swift in Sources */, 7BE578F32EFE11010083DAE3 /* ActiveSideSplitRatios.swift in Sources */, 9821403722B3D16700ABFB3F /* MaximizeHeightCalculation.swift in Sources */, - 98ED7038305D9AEE0077BD10 /* ExtraSettingsPopover.swift in Sources */, 9824704122B186D00037B409 /* WindowManager.swift in Sources */, F05220000000000000000002 /* WindowSizeWarning.swift in Sources */, 982470432EFA00010037B409 /* WindowManager+CooperativeCornerResize.swift in Sources */, D0423D8327A8D31D008A4894 /* HorizontalThirdsRepeated.swift in Sources */, - 98C97FFD25893B040061F01F /* Config.swift in Sources */, 989DA30E243FC0DF008C7AA4 /* WelcomeView.swift in Sources */, 9818E01228B59B64004AA524 /* ThirdsCompoundCalculation.swift in Sources */, 7BE578F12EFA00010083DAE3 /* CooperativeCornerResize.swift in Sources */, @@ -1102,7 +1081,6 @@ 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */, 9851A5C3251BEBA300ECF78C /* OrientationAware.swift in Sources */, 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */, - 983DD04028A844BE00BF1EEE /* SnapAreaViewController.swift in Sources */, 9824702C22AFA22E0037B409 /* AccessibilityWindowController.swift in Sources */, 988D066122EB4C7C004EABD7 /* FirstThirdCalculation.swift in Sources */, 983BBD6F253B609D000D223E /* FootprintWindow.swift in Sources */, @@ -1114,7 +1092,6 @@ 988D067F22EB4EDE004EABD7 /* MoveLeftRightCalculation.swift in Sources */, AA3A9E8B29230A82004EB8E5 /* CFExtension.swift in Sources */, 98C6DEF023CE191700CC0C1E /* GapCalculation.swift in Sources */, - 98910B3E231130AF0066EC23 /* SettingsViewController.swift in Sources */, 98A009AD2512498000CFBF0C /* FirstFourthCalculation.swift in Sources */, AA4DA2FB28FDC94A00355CEB /* DispatchTimeExtension.swift in Sources */, 98D4B6C525B6256C009C7BF6 /* TodoManager.swift in Sources */, @@ -1151,7 +1128,6 @@ 98987AA52391890400BE72C4 /* LogViewer.swift in Sources */, 9824704C22B189250037B409 /* WindowMover.swift in Sources */, 6490B39B27BF980F0056C220 /* TopRightEighthCalculation.swift in Sources */, - 944F25CD2CE5A144004B2FD2 /* PrefsViewController.swift in Sources */, 98ED704B306171650077BD10 /* AppSettingsView.swift in Sources */, 944F25CF2CE5A144004B2FD2 /* ShortcutRecordingObserver.swift in Sources */, 9818E01028B59396004AA524 /* HalvesCompoundCalculation.swift in Sources */, diff --git a/Rectangle/Base.lproj/Main.storyboard b/Rectangle/Base.lproj/Main.storyboard index b124475ec..823219860 100644 --- a/Rectangle/Base.lproj/Main.storyboard +++ b/Rectangle/Base.lproj/Main.storyboard @@ -3,7 +3,6 @@ - @@ -295,4305 +294,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2. In the Rectangle menu, select -"Use [Application] as Todo App" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - While in Todo Mode, you can refresh the Todo Mode layout by selecting "Reflow Todo" in the Rectangle menu or executing the associated keyboard shortcut. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift b/Rectangle/PrefsWindow/ExtraSettingsPopover.swift deleted file mode 100644 index 9a0d97666..000000000 --- a/Rectangle/PrefsWindow/ExtraSettingsPopover.swift +++ /dev/null @@ -1,432 +0,0 @@ -/// ExtraSettingsPopover.swift - -import MASShortcut - -extension SettingsViewController { - - func showExtraSettingsPopover(_ sender: NSButton) { - if extraSettingsPopover == nil { - let popover = NSPopover() - popover.behavior = .transient - let viewController = NSViewController() - - let mainStackView = NSStackView() - mainStackView.orientation = .vertical - mainStackView.alignment = .leading - mainStackView.spacing = 5 - mainStackView.translatesAutoresizingMaskIntoConstraints = false - - let headerLabel = NSTextField(labelWithString: NSLocalizedString("Extra Shortcuts", tableName: "Main", value: "", comment: "")) - headerLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - headerLabel.alignment = .center - headerLabel.translatesAutoresizingMaskIntoConstraints = false - - let tileRowsLabel = NSTextField(labelWithString: NSLocalizedString("tileRows.title", tableName: "Main", value: "Tile Windows in Rows", comment: "")) - tileRowsLabel.alignment = .right - tileRowsLabel.translatesAutoresizingMaskIntoConstraints = false - let tileColumnsLabel = NSTextField(labelWithString: NSLocalizedString("tileColumns.title", tableName: "Main", value: "Tile Windows in Columns", comment: "")) - tileColumnsLabel.alignment = .right - tileColumnsLabel.translatesAutoresizingMaskIntoConstraints = false - let largerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Larger Width", tableName: "Main", value: "", comment: "")) - largerWidthLabel.alignment = .right - let smallerWidthLabel = NSTextField(labelWithString: NSLocalizedString("Smaller Width", tableName: "Main", value: "", comment: "")) - smallerWidthLabel.alignment = .right - let widthStepLabel = NSTextField(labelWithString: NSLocalizedString("Width Step (px)", tableName: "Main", value: "", comment: "")) - widthStepLabel.alignment = .right - - let topVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Top Third", tableName: "Main", value: "", comment: "")) - topVerticalThirdLabel.alignment = .right - let middleVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Middle Third", tableName: "Main", value: "", comment: "")) - middleVerticalThirdLabel.alignment = .right - let bottomVerticalThirdLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Third", tableName: "Main", value: "", comment: "")) - bottomVerticalThirdLabel.alignment = .right - let topVerticalTwoThirdsLabel = NSTextField(labelWithString: NSLocalizedString("Top Two Thirds", tableName: "Main", value: "", comment: "")) - topVerticalTwoThirdsLabel.alignment = .right - let bottomVerticalTwoThirdsLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Two Thirds", tableName: "Main", value: "", comment: "")) - bottomVerticalTwoThirdsLabel.alignment = .right - - let topLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Left Eighth", tableName: "Main", value: "", comment: "")) - topLeftEighthLabel.alignment = .right - let topCenterLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Center Left Eighth", tableName: "Main", value: "", comment: "")) - topCenterLeftEighthLabel.alignment = .right - let topCenterRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Center Right Eighth", tableName: "Main", value: "", comment: "")) - topCenterRightEighthLabel.alignment = .right - let topRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Top Right Eighth", tableName: "Main", value: "", comment: "")) - topRightEighthLabel.alignment = .right - let bottomLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Left Eighth", tableName: "Main", value: "", comment: "")) - bottomLeftEighthLabel.alignment = .right - let bottomCenterLeftEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Center Left Eighth", tableName: "Main", value: "", comment: "")) - bottomCenterLeftEighthLabel.alignment = .right - let bottomCenterRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Center Right Eighth", tableName: "Main", value: "", comment: "")) - bottomCenterRightEighthLabel.alignment = .right - let bottomRightEighthLabel = NSTextField(labelWithString: NSLocalizedString("Bottom Right Eighth", tableName: "Main", value: "", comment: "")) - bottomRightEighthLabel.alignment = .right - - let widthStepField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - widthStepField.stringValue = String(Int(Defaults.widthStepSize.value)) - widthStepField.delegate = self - widthStepField.defaults = Defaults.widthStepSize - widthStepField.translatesAutoresizingMaskIntoConstraints = false - widthStepField.refusesFirstResponder = true - widthStepField.alignment = .right - - let integerFormatter = NumberFormatter() - integerFormatter.allowsFloats = false - integerFormatter.minimum = 1 - widthStepField.formatter = integerFormatter - - let splitRatioHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Side Split Ratio", tableName: "Main", value: "", comment: "")) - splitRatioHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - splitRatioHeaderLabel.alignment = .center - splitRatioHeaderLabel.translatesAutoresizingMaskIntoConstraints = false - - let hSplitLabel = NSTextField(labelWithString: NSLocalizedString("Horizontal (L/R, %)", tableName: "Main", value: "", comment: "")) - hSplitLabel.alignment = .right - hSplitLabel.translatesAutoresizingMaskIntoConstraints = false - - let vSplitLabel = NSTextField(labelWithString: NSLocalizedString("Vertical (T/B, %)", tableName: "Main", value: "", comment: "")) - vSplitLabel.alignment = .right - vSplitLabel.translatesAutoresizingMaskIntoConstraints = false - - let percentFormatter = NumberFormatter() - percentFormatter.allowsFloats = false - percentFormatter.minimum = 1 - percentFormatter.maximum = 99 - - let hSplitField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - hSplitField.stringValue = String(Int(Defaults.horizontalSplitRatio.value)) - hSplitField.delegate = self - hSplitField.defaults = Defaults.horizontalSplitRatio - hSplitField.fallbackValue = 50 - hSplitField.translatesAutoresizingMaskIntoConstraints = false - hSplitField.refusesFirstResponder = true - hSplitField.alignment = .right - hSplitField.formatter = percentFormatter - - let hSplitPopUpButton = HalfSplitRatioPopUpButton() - hSplitPopUpButton.translatesAutoresizingMaskIntoConstraints = false - hSplitPopUpButton.target = self - hSplitPopUpButton.action = #selector(didSelectHalfSplitRatioPreset(sender:)) - hSplitPopUpButton.defaults = Defaults.horizontalSplitRatio - hSplitPopUpButton.customField = hSplitField - configureHalfSplitRatioPopUpButton(hSplitPopUpButton) - - let vSplitField = AutoSaveFloatField(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - vSplitField.stringValue = String(Int(Defaults.verticalSplitRatio.value)) - vSplitField.delegate = self - vSplitField.defaults = Defaults.verticalSplitRatio - vSplitField.fallbackValue = 50 - vSplitField.translatesAutoresizingMaskIntoConstraints = false - vSplitField.refusesFirstResponder = true - vSplitField.alignment = .right - vSplitField.formatter = percentFormatter - - let vSplitPopUpButton = HalfSplitRatioPopUpButton() - vSplitPopUpButton.translatesAutoresizingMaskIntoConstraints = false - vSplitPopUpButton.target = self - vSplitPopUpButton.action = #selector(didSelectHalfSplitRatioPreset(sender:)) - vSplitPopUpButton.defaults = Defaults.verticalSplitRatio - vSplitPopUpButton.customField = vSplitField - configureHalfSplitRatioPopUpButton(vSplitPopUpButton) - - hSplitField.defaultsSetAction = { [weak hSplitPopUpButton] in - hSplitPopUpButton?.selectCurrentValue() - } - vSplitField.defaultsSetAction = { [weak vSplitPopUpButton] in - vSplitPopUpButton?.selectCurrentValue() - } - - let widthStepRow = NSStackView() - widthStepRow.orientation = .horizontal - widthStepRow.alignment = .centerY - widthStepRow.spacing = 18 - widthStepRow.addArrangedSubview(widthStepLabel) - widthStepRow.addArrangedSubview(widthStepField) - - let hSplitRow = NSStackView() - hSplitRow.orientation = .horizontal - hSplitRow.alignment = .centerY - hSplitRow.spacing = 18 - hSplitRow.addArrangedSubview(hSplitLabel) - let hSplitControlsStack = NSStackView() - hSplitControlsStack.orientation = .horizontal - hSplitControlsStack.alignment = .centerY - hSplitControlsStack.spacing = 8 - hSplitControlsStack.addArrangedSubview(hSplitPopUpButton) - hSplitControlsStack.addArrangedSubview(hSplitField) - hSplitRow.addArrangedSubview(hSplitControlsStack) - - let vSplitRow = NSStackView() - vSplitRow.orientation = .horizontal - vSplitRow.alignment = .centerY - vSplitRow.spacing = 18 - vSplitRow.addArrangedSubview(vSplitLabel) - let vSplitControlsStack = NSStackView() - vSplitControlsStack.orientation = .horizontal - vSplitControlsStack.alignment = .centerY - vSplitControlsStack.spacing = 8 - vSplitControlsStack.addArrangedSubview(vSplitPopUpButton) - vSplitControlsStack.addArrangedSubview(vSplitField) - vSplitRow.addArrangedSubview(vSplitControlsStack) - - mainStackView.addArrangedSubview(headerLabel) - mainStackView.setCustomSpacing(10, after: headerLabel) - - let tileGridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Tile Windows in Rows/Columns", tableName: "Main", value: "", comment: "General settings group for multi-window grid limits")) - tileGridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - tileGridHeaderLabel.alignment = .center - tileGridHeaderLabel.translatesAutoresizingMaskIntoConstraints = false - - let columnsLimitRow = TileGridLimitRow( - title: NSLocalizedString("Maximum windows per column", tableName: "Main", value: "", comment: "Maximum windows stacked in each tiled column"), - defaults: Defaults.tileColumnsMaxWindows) - let rowsLimitRow = TileGridLimitRow( - title: NSLocalizedString("Maximum windows per row", tableName: "Main", value: "", comment: "Maximum windows placed side by side in each tiled row"), - defaults: Defaults.tileRowsMaxWindows) - tileGridLimitRows = [columnsLimitRow, rowsLimitRow] - mainStackView.addArrangedSubview(tileGridHeaderLabel) - mainStackView.addArrangedSubview(columnsLimitRow) - mainStackView.addArrangedSubview(rowsLimitRow) - mainStackView.setCustomSpacing(10, after: rowsLimitRow) - - mainStackView.addArrangedSubview(widthStepRow) - // Grid Positions - cycling shortcuts for larger grids - let showAdditionalSizesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show additional sizes in menu", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleShowAdditionalSizesInMenu(_:))) - showAdditionalSizesCheckbox.state = Defaults.showAdditionalSizesInMenu.userEnabled ? .on : .off - showAdditionalSizesCheckbox.translatesAutoresizingMaskIntoConstraints = false - showAdditionalSizesCheckbox.alignment = .left - showAdditionalSizesCheckbox.imageHugsTitle = true - - let gridHeaderLabel = NSTextField(labelWithString: NSLocalizedString("Grid Positions", tableName: "Main", value: "", comment: "")) - gridHeaderLabel.font = NSFont.boldSystemFont(ofSize: NSFont.systemFontSize) - gridHeaderLabel.alignment = .center - gridHeaderLabel.translatesAutoresizingMaskIntoConstraints = false - - let cyclingHintLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("Press the shortcut repeatedly to cycle through all positions in the grid.", tableName: "Main", value: "", comment: "")) - cyclingHintLabel.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize) - cyclingHintLabel.textColor = .secondaryLabelColor - cyclingHintLabel.alignment = .center - cyclingHintLabel.translatesAutoresizingMaskIntoConstraints = false - - // Cycling shortcut rows - Ninths, Twelfths, Sixteenths - let ninthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Ninths (3\u{00d7}3)", tableName: "Main", value: "", comment: "")) - ninthsCyclingLabel.alignment = .right - ninthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - let twelfthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Twelfths (4\u{00d7}3)", tableName: "Main", value: "", comment: "")) - twelfthsCyclingLabel.alignment = .right - twelfthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - - let sixteenthsCyclingLabel = NSTextField(labelWithString: NSLocalizedString("Sixteenths (4\u{00d7}4)", tableName: "Main", value: "", comment: "")) - sixteenthsCyclingLabel.alignment = .right - sixteenthsCyclingLabel.translatesAutoresizingMaskIntoConstraints = false - - - let ninthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - ninthsCyclingIcon.image = WindowAction.topLeftNinth.image - ninthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) - let twelfthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - twelfthsCyclingIcon.image = WindowAction.topLeftTwelfth.image - twelfthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) - let sixteenthsCyclingIcon = NSImageView(frame: NSRect(x: 0, y: 0, width: 21, height: 14)) - sixteenthsCyclingIcon.image = WindowAction.topLeftSixteenth.image - sixteenthsCyclingIcon.image?.size = NSSize(width: 21, height: 14) - - func makeLabelStack(_ label: NSTextField, _ icon: NSImageView) -> NSStackView { - let stack = NSStackView() - stack.orientation = .horizontal - stack.alignment = .centerY - stack.spacing = 8 - stack.addArrangedSubview(label) - stack.addArrangedSubview(icon) - return stack - } - - let overlapOffsetCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Offset window position on overlap", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleCyclingOverlapOffset(_:))) - overlapOffsetCheckbox.state = Defaults.cyclingOverlapOffset.userEnabled ? .on : .off - overlapOffsetCheckbox.translatesAutoresizingMaskIntoConstraints = false - overlapOffsetCheckbox.alignment = .left - - let stackBadgeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Show stacked window list on hover", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleStackBadge(_:))) - self.stackBadgeCheckbox = stackBadgeCheckbox - stackBadgeCheckbox.state = Defaults.stackBadge.userEnabled ? .on : .off - stackBadgeCheckbox.translatesAutoresizingMaskIntoConstraints = false - stackBadgeCheckbox.alignment = .left - - let stackBadgeToggleLabel = NSTextField(labelWithString: NSLocalizedString("Toggle window list", tableName: "Main", value: "", comment: "")) - stackBadgeToggleLabel.alignment = .right - stackBadgeToggleLabel.translatesAutoresizingMaskIntoConstraints = false - let stackBadgeToggleShortcutView = MASShortcutView(frame: NSRect(x: 0, y: 0, width: 160, height: 19)) - stackBadgeToggleShortcutView.setAssociatedUserDefaultsKey(StackBadgeManager.toggleDefaultsKey, withTransformerName: MASDictionaryTransformerName) - stackBadgeToggleShortcutView.translatesAutoresizingMaskIntoConstraints = false - stackBadgeToggleShortcutView.shortcutValidator = AppShortcutValidator(defaultsKey: StackBadgeManager.toggleDefaultsKey) - shortcutRecordingObserver.observe([stackBadgeToggleShortcutView]) - let stackBadgeToggleRow = NSStackView() - stackBadgeToggleRow.orientation = .horizontal - stackBadgeToggleRow.alignment = .centerY - stackBadgeToggleRow.spacing = 18 - stackBadgeToggleRow.addArrangedSubview(stackBadgeToggleLabel) - stackBadgeToggleRow.addArrangedSubview(stackBadgeToggleShortcutView) - - mainStackView.addArrangedSubview(gridHeaderLabel) - mainStackView.setCustomSpacing(4, after: gridHeaderLabel) - mainStackView.addArrangedSubview(cyclingHintLabel) - mainStackView.setCustomSpacing(8, after: cyclingHintLabel) - mainStackView.addArrangedSubview(showAdditionalSizesCheckbox) - mainStackView.addArrangedSubview(overlapOffsetCheckbox) - mainStackView.addArrangedSubview(stackBadgeCheckbox) - mainStackView.setCustomSpacing(6, after: stackBadgeCheckbox) - mainStackView.addArrangedSubview(stackBadgeToggleRow) - mainStackView.setCustomSpacing(8, after: stackBadgeToggleRow) - - - mainStackView.addArrangedSubview(splitRatioHeaderLabel) - mainStackView.setCustomSpacing(10, after: splitRatioHeaderLabel) - mainStackView.addArrangedSubview(hSplitRow) - mainStackView.addArrangedSubview(vSplitRow) - - let halvesCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Half actions preserve the window's size on the other axis", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleHalvesPreserveOtherAxisSize(_:))) - halvesCheckbox.state = Defaults.halvesPreserveOtherAxisSize.enabled ? .on : .off - halvesCheckbox.toolTip = NSLocalizedString("Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back.", tableName: "Main", value: "", comment: "") - halvesCheckbox.translatesAutoresizingMaskIntoConstraints = false - halvesCheckbox.alignment = .left - - mainStackView.setCustomSpacing(8, after: vSplitRow) - mainStackView.addArrangedSubview(halvesCheckbox) - halvesPreserveOtherAxisSizeCheckbox = halvesCheckbox - - let repeatedMaximizeCheckbox = NSButton(checkboxWithTitle: NSLocalizedString("Repeated maximize restores the previous size and position", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleRepeatedMaximizeRestoresPrevious(_:))) - repeatedMaximizeCheckbox.state = Defaults.repeatedMaximizeRestoresPrevious.enabled ? .on : .off - repeatedMaximizeCheckbox.toolTip = NSLocalizedString("After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position.", tableName: "Main", value: "", comment: "") - repeatedMaximizeCheckbox.translatesAutoresizingMaskIntoConstraints = false - repeatedMaximizeCheckbox.alignment = .left - - mainStackView.addArrangedSubview(repeatedMaximizeCheckbox) - repeatedMaximizeRestoresPreviousCheckbox = repeatedMaximizeCheckbox - - let containerView = NSView() - containerView.addSubview(mainStackView) - - NSLayoutConstraint.activate([ - mainStackView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10), - mainStackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -10), - mainStackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 15), - mainStackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -15) - ]) - - viewController.view = containerView - popover.contentViewController = viewController - extraSettingsPopover = popover - } - tileGridLimitRows.forEach { $0.reload() } - extraSettingsPopover?.show(relativeTo: sender.bounds, of: sender, preferredEdge: .maxY) - } - - @objc private func didSelectHalfSplitRatioPreset(sender: Any?) { - guard let popUpButton = sender as? HalfSplitRatioPopUpButton, - let defaults = popUpButton.defaults else { - Logger.log("Expected action to be sent from HalfSplitRatioPopUpButton. Instead, sender is: \(String(describing: sender))") - return - } - - guard popUpButton.selectedTag() != HalfSplitRatioPopUpButton.otherTag else { - popUpButton.customField?.isHidden = false - return - } - - guard let cycleSize = CycleSize(rawValue: popUpButton.selectedTag()) else { - Logger.log("Expected tag of half split ratio popup to match a value of CycleSize. Got: \(String(describing: popUpButton.selectedTag()))") - return - } - - defaults.value = cycleSize.percentValue - ActiveSideSplitRatios.shared.resetAll() - popUpButton.customField?.stringValue = "\(Int(round(cycleSize.percentValue)))" - popUpButton.customField?.isHidden = true - } - - private func configureHalfSplitRatioPopUpButton(_ popUpButton: HalfSplitRatioPopUpButton) { - popUpButton.removeAllItems() - - CycleSize.sortedSizes.forEach { cycleSize in - popUpButton.addItem(withTitle: cycleSize.title) - popUpButton.lastItem?.tag = cycleSize.rawValue - } - - popUpButton.addItem(withTitle: NSLocalizedString("Other", tableName: "Main", value: "", comment: "")) - popUpButton.lastItem?.tag = HalfSplitRatioPopUpButton.otherTag - popUpButton.selectCurrentValue() - } - -} - -class TileGridLimitRow: NSStackView, NSTextFieldDelegate { - private let defaults: PositiveIntDefault - private let field = NSTextField() - private let stepper = NSStepper() - - init(title: String, defaults: PositiveIntDefault) { - self.defaults = defaults - super.init(frame: .zero) - orientation = .horizontal - alignment = .centerY - spacing = 8 - translatesAutoresizingMaskIntoConstraints = false - - let label = NSTextField(labelWithString: title) - label.setContentCompressionResistancePriority(.required, for: .horizontal) - label.setContentHuggingPriority(.defaultLow, for: .horizontal) - - let formatter = NumberFormatter() - formatter.allowsFloats = false - formatter.minimum = 1 - formatter.maximum = NSNumber(value: Int.max) - field.formatter = formatter - field.delegate = self - field.alignment = .right - field.refusesFirstResponder = false - field.setAccessibilityLabel(title) - field.translatesAutoresizingMaskIntoConstraints = false - field.widthAnchor.constraint(equalToConstant: 72).isActive = true - - stepper.minValue = 1 - stepper.maxValue = Double(Int.max) - stepper.increment = 1 - stepper.valueWraps = false - stepper.target = self - stepper.action = #selector(stepLimit(_:)) - stepper.setAccessibilityLabel(title) - - let controls: [NSControl] = [label, field, stepper] - controls.forEach { control in - control.setContentCompressionResistancePriority(.required, for: .vertical) - control.setContentHuggingPriority(.defaultHigh, for: .vertical) - addArrangedSubview(control) - } - reload() - } - - required init?(coder: NSCoder) { - fatalError("TileGridLimitRow is created programmatically") - } - - func reload() { - field.stringValue = String(defaults.value) - stepper.doubleValue = Double(defaults.value) - } - - @objc private func stepLimit(_ sender: NSStepper) { - defaults.value = Int(exactly: sender.doubleValue) ?? Int.max - reload() - } - - func controlTextDidChange(_ obj: Notification) { - if let value = Int(field.stringValue), value > 0 { - defaults.value = value - stepper.doubleValue = Double(defaults.value) - } - } - - func controlTextDidEndEditing(_ obj: Notification) { - reload() - } -} diff --git a/Rectangle/PrefsWindow/PrefsViewController.swift b/Rectangle/PrefsWindow/PrefsViewController.swift deleted file mode 100644 index 79db8174c..000000000 --- a/Rectangle/PrefsWindow/PrefsViewController.swift +++ /dev/null @@ -1,157 +0,0 @@ -/// PrefsViewController.swift - -import Cocoa -import MASShortcut - -class PrefsViewController: NSViewController { - - var actionsToViews = [WindowAction: MASShortcutView]() - private let shortcutRecordingObserver = ShortcutRecordingObserver() - - @IBOutlet weak var leftHalfShortcutView: MASShortcutView! - @IBOutlet weak var rightHalfShortcutView: MASShortcutView! - @IBOutlet weak var centerHalfShortcutView: MASShortcutView! - @IBOutlet weak var topHalfShortcutView: MASShortcutView! - @IBOutlet weak var bottomHalfShortcutView: MASShortcutView! - - @IBOutlet weak var topLeftShortcutView: MASShortcutView! - @IBOutlet weak var topRightShortcutView: MASShortcutView! - @IBOutlet weak var bottomLeftShortcutView: MASShortcutView! - @IBOutlet weak var bottomRightShortcutView: MASShortcutView! - - @IBOutlet weak var nextDisplayShortcutView: MASShortcutView! - @IBOutlet weak var previousDisplayShortcutView: MASShortcutView! - - @IBOutlet weak var makeLargerShortcutView: MASShortcutView! - @IBOutlet weak var makeSmallerShortcutView: MASShortcutView! - - @IBOutlet weak var maximizeShortcutView: MASShortcutView! - @IBOutlet weak var almostMaximizeShortcutView: MASShortcutView! - @IBOutlet weak var maximizeHeightShortcutView: MASShortcutView! - @IBOutlet weak var centerShortcutView: MASShortcutView! - @IBOutlet weak var restoreShortcutView: MASShortcutView! - - // Additional - @IBOutlet weak var firstThirdShortcutView: MASShortcutView! - @IBOutlet weak var firstTwoThirdsShortcutView: MASShortcutView! - @IBOutlet weak var centerThirdShortcutView: MASShortcutView! - @IBOutlet weak var centerTwoThirdsShortcutView: MASShortcutView! - @IBOutlet weak var lastTwoThirdsShortcutView: MASShortcutView! - @IBOutlet weak var lastThirdShortcutView: MASShortcutView! - - @IBOutlet weak var moveLeftShortcutView: MASShortcutView! - @IBOutlet weak var moveRightShortcutView: MASShortcutView! - @IBOutlet weak var moveUpShortcutView: MASShortcutView! - @IBOutlet weak var moveDownShortcutView: MASShortcutView! - - @IBOutlet weak var firstFourthShortcutView: MASShortcutView! - @IBOutlet weak var secondFourthShortcutView: MASShortcutView! - @IBOutlet weak var thirdFourthShortcutView: MASShortcutView! - @IBOutlet weak var lastFourthShortcutView: MASShortcutView! - @IBOutlet weak var firstThreeFourthsShortcutView: MASShortcutView! - @IBOutlet weak var centerThreeFourthsShortcutView: MASShortcutView! - @IBOutlet weak var lastThreeFourthsShortcutView: MASShortcutView! - - @IBOutlet weak var topLeftSixthShortcutView: MASShortcutView! - @IBOutlet weak var topCenterSixthShortcutView: MASShortcutView! - @IBOutlet weak var topRightSixthShortcutView: MASShortcutView! - @IBOutlet weak var bottomLeftSixthShortcutView: MASShortcutView! - @IBOutlet weak var bottomCenterSixthShortcutView: MASShortcutView! - @IBOutlet weak var bottomRightSixthShortcutView: MASShortcutView! - - @IBOutlet weak var showMoreButton: NSButton! - @IBOutlet weak var additionalShortcutsStackView: NSStackView! - - // Settings - override func awakeFromNib() { - - actionsToViews = [ - .leftHalf: leftHalfShortcutView, - .rightHalf: rightHalfShortcutView, - .centerHalf: centerHalfShortcutView, - .topHalf: topHalfShortcutView, - .bottomHalf: bottomHalfShortcutView, - .topLeft: topLeftShortcutView, - .topRight: topRightShortcutView, - .bottomLeft: bottomLeftShortcutView, - .bottomRight: bottomRightShortcutView, - .nextDisplay: nextDisplayShortcutView, - .previousDisplay: previousDisplayShortcutView, - .maximize: maximizeShortcutView, - .almostMaximize: almostMaximizeShortcutView, - .maximizeHeight: maximizeHeightShortcutView, - .center: centerShortcutView, - .larger: makeLargerShortcutView, - .smaller: makeSmallerShortcutView, - .restore: restoreShortcutView, - .firstThird: firstThirdShortcutView, - .firstTwoThirds: firstTwoThirdsShortcutView, - .centerThird: centerThirdShortcutView, - .centerTwoThirds: centerTwoThirdsShortcutView, - .lastTwoThirds: lastTwoThirdsShortcutView, - .lastThird: lastThirdShortcutView, - .moveLeft: moveLeftShortcutView, - .moveRight: moveRightShortcutView, - .moveUp: moveUpShortcutView, - .moveDown: moveDownShortcutView, - .firstFourth: firstFourthShortcutView, - .secondFourth: secondFourthShortcutView, - .thirdFourth: thirdFourthShortcutView, - .lastFourth: lastFourthShortcutView, - .firstThreeFourths: firstThreeFourthsShortcutView, - .centerThreeFourths: centerThreeFourthsShortcutView, - .lastThreeFourths: lastThreeFourthsShortcutView, - .topLeftSixth: topLeftSixthShortcutView, - .topCenterSixth: topCenterSixthShortcutView, - .topRightSixth: topRightSixthShortcutView, - .bottomLeftSixth: bottomLeftSixthShortcutView, - .bottomCenterSixth: bottomCenterSixthShortcutView, - .bottomRightSixth: bottomRightSixthShortcutView - ] - - for (action, view) in actionsToViews { - view.setAssociatedUserDefaultsKey(action.name, withTransformerName: MASDictionaryTransformerName) - } - shortcutRecordingObserver.observe(Array(actionsToViews.values)) - - if Defaults.allowAnyShortcut.enabled { - let passThroughValidator = PassthroughShortcutValidator() - actionsToViews.values.forEach { $0.shortcutValidator = passThroughValidator } - } - - subscribeToAllowAnyShortcutToggle() - - additionalShortcutsStackView.isHidden = true - } - - @IBAction func toggleShowMore(_ sender: NSButton) { - additionalShortcutsStackView.isHidden = !additionalShortcutsStackView.isHidden - showMoreButton.title = additionalShortcutsStackView.isHidden - ? "▶︎ ⋯" : "▼" - } - - private func subscribeToAllowAnyShortcutToggle() { - Notification.Name.allowAnyShortcut.onPost { notification in - guard let enabled = notification.object as? Bool else { return } - let validator = enabled ? PassthroughShortcutValidator() : MASShortcutValidator() - self.actionsToViews.values.forEach { $0.shortcutValidator = validator } - } - } - -} - -class PassthroughShortcutValidator: MASShortcutValidator { - - override func isShortcutValid(_ shortcut: MASShortcut!) -> Bool { - return true - } - - override func isShortcutAlreadyTaken(bySystem shortcut: MASShortcut!, explanation: AutoreleasingUnsafeMutablePointer!) -> Bool { - return false - } - - override func isShortcut(_ shortcut: MASShortcut!, alreadyTakenIn menu: NSMenu!, explanation: AutoreleasingUnsafeMutablePointer!) -> Bool { - return false - } - -} diff --git a/Rectangle/PrefsWindow/SettingsViewController.swift b/Rectangle/PrefsWindow/SettingsViewController.swift deleted file mode 100644 index f29692d79..000000000 --- a/Rectangle/PrefsWindow/SettingsViewController.swift +++ /dev/null @@ -1,754 +0,0 @@ -/// SettingsViewController.swift - -import Cocoa -import Sparkle -import MASShortcut - -class SettingsViewController: NSViewController { - - @IBOutlet weak var launchOnLoginCheckbox: NSButton! - @IBOutlet weak var versionLabel: NSTextField! - @IBOutlet weak var hideMenuBarIconCheckbox: NSButton! - @IBOutlet weak var subsequentExecutionPopUpButton: NSPopUpButton! - @IBOutlet weak var allowAnyShortcutCheckbox: NSButton! - @IBOutlet weak var checkForUpdatesAutomaticallyCheckbox: NSButton! - @IBOutlet weak var checkForUpdatesButton: NSButton! - @IBOutlet weak var gapSlider: NSSlider! - @IBOutlet weak var gapLabel: NSTextField! - @IBOutlet weak var skipGapTopEdgeCheckbox: NSButton! - @IBOutlet weak var cursorAcrossCheckbox: NSButton! - @IBOutlet weak var useCursorScreenDetectionCheckbox: NSButton! - @IBOutlet weak var doubleClickTitleBarCheckbox: NSButton! - @IBOutlet weak var todoCheckbox: NSButton! - @IBOutlet weak var todoView: NSStackView! - @IBOutlet weak var todoAppWidthField: AutoSaveFloatField! - @IBOutlet weak var todoAppWidthUnitPopUpButton: NSPopUpButton! - @IBOutlet weak var todoAppSidePopUpButton: NSPopUpButton! - @IBOutlet weak var toggleTodoShortcutView: MASShortcutView! - @IBOutlet weak var reflowTodoShortcutView: MASShortcutView! - @IBOutlet weak var stageView: NSStackView! - @IBOutlet weak var stageSlider: NSSlider! - @IBOutlet weak var stageLabel: NSTextField! - - @IBOutlet weak var cycleSizesView: NSStackView! - - @IBOutlet var cycleSizesViewHeightConstraint: NSLayoutConstraint! - - @IBOutlet var todoViewHeightConstraint: NSLayoutConstraint! - - @IBOutlet weak var extraSettingsButton: NSButton! - - private var aboutTodoWindowController: NSWindowController? - - private var cycleSizeCheckboxes = [NSButton]() - private var cornerCycleExpansionAxisButtons = [NSButton]() - private var cooperativeCornerResizeCheckbox: NSButton? - - private var combinedDisplayModeCheckbox: NSButton? - private var greenButtonOverrideCheckbox: NSButton? - private var autoMaximizeCheckbox: NSButton? - - // Used in extras popover extension - var extraSettingsPopover: NSPopover? - var tilingShortcutViews = [MASShortcutView]() - let shortcutRecordingObserver = ShortcutRecordingObserver() - var tileGridLimitRows = [TileGridLimitRow]() - var halvesPreserveOtherAxisSizeCheckbox: NSButton? - var stackBadgeCheckbox: NSButton? - var repeatedMaximizeRestoresPreviousCheckbox: NSButton? - - @IBAction func toggleLaunchOnLogin(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - LaunchOnLogin.isEnabled = newSetting - Defaults.launchOnLogin.enabled = newSetting - } - - @IBAction func toggleHideMenuBarIcon(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.hideMenuBarIcon.enabled = newSetting - RectangleStatusItem.instance.refreshVisibility() - } - - @IBAction func setSubsequentExecutionBehavior(_ sender: NSPopUpButton) { - let tag = sender.selectedTag() - guard let mode = SubsequentExecutionMode(rawValue: tag) else { - Logger.log("Expected a pop up button to have a selected item with a valid tag matching a value of SubsequentExecutionMode. Got: \(String(describing: tag))") - return - } - - Defaults.subsequentExecutionMode.value = mode - initializeCycleSizesView(animated: true) - } - - @IBAction func toggleSkipGapTopEdge(_ sender: NSButton) { - Defaults.skipGapTopEdge.enabled = sender.state == .on - } - - @IBAction func gapSliderChanged(_ sender: NSSlider) { - gapLabel.stringValue = "\(sender.intValue) px" - if let event = NSApp.currentEvent { - if event.type == .leftMouseUp || event.type == .keyDown { - if Float(sender.intValue) != Defaults.gapSize.value { - Defaults.gapSize.value = Float(sender.intValue) - skipGapTopEdgeCheckbox.isHidden = Defaults.gapSize.value == 0 - } - } - } - } - - @IBAction func toggleCursorMove(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.moveCursorAcrossDisplays.enabled = newSetting - } - - @IBAction func toggleUseCursorScreenDetection(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.useCursorScreenDetection.enabled = newSetting - } - - @IBAction func toggleAllowAnyShortcut(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.allowAnyShortcut.enabled = newSetting - Notification.Name.allowAnyShortcut.post(object: newSetting) - let validator = newSetting ? PassthroughShortcutValidator() : MASShortcutValidator() - tilingShortcutViews.forEach { $0.shortcutValidator = validator } - } - - @objc func toggleShowAdditionalSizesInMenu(_ sender: NSButton) { - let enabled: Bool = sender.state == .on - Defaults.showAdditionalSizesInMenu.enabled = enabled - Notification.Name.showAdditionalSizesInMenuChanged.post() - } - - @objc func toggleStackBadge(_ sender: NSButton) { - Defaults.stackBadge.enabled = sender.state == .on - Notification.Name.stackBadgeChanged.post() - } - - @objc func toggleCyclingOverlapOffset(_ sender: NSButton) { - Defaults.cyclingOverlapOffset.enabled = sender.state == .on - } - - @objc func setCornerCycleExpansionAxis(_ sender: NSButton) { - guard let axis = CornerCycleExpansionAxis(rawValue: sender.tag) else { - Logger.log("Expected tag of cyclic corner expansion axis radio button to match a value of CornerCycleExpansionAxis. Got: \(String(describing: sender.tag))") - return - } - - Defaults.cornerCycleExpansionAxis.value = axis - setToggleStatesForCornerCycleExpansionAxisButtons() - } - - @objc func toggleCooperativeCornerResize(_ sender: NSButton) { - Defaults.cooperativeCornerResize.enabled = sender.state == .on - } - - @IBAction func checkForUpdates(_ sender: Any) { - AppDelegate.instance.updaterController?.checkForUpdates(sender) - } - - @IBAction func toggleDoubleClickTitleBar(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - if newSetting && !TitleBarManager.systemSettingDisabled { - - var openSystemSettingsButtonName = NSLocalizedString("iWV-c2-BJD.title", tableName: "Main", value: "Open System Preferences", comment: "") - - openSystemSettingsButtonName = NSLocalizedString( - "Open System Settings", tableName: "Main", value: "", comment: "") - - let conflictTitleText = NSLocalizedString( - "Conflict with system setting", tableName: "Main", value: "", comment: "") - let conflictDescriptionText = NSLocalizedString( - "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting.", tableName: "Main", value: "", comment: "") - - - let closeText = NSLocalizedString("DVo-aG-piG.title", tableName: "Main", value: "Close", comment: "") - - let response = AlertUtil.twoButtonAlert(question: conflictTitleText, text: conflictDescriptionText, confirmText: openSystemSettingsButtonName, cancelText: closeText) - if response == .alertFirstButtonReturn { - NSWorkspace.shared.open(URL(string:"x-apple.systempreferences:com.apple.preference.dock")!) - } - } - Defaults.doubleClickTitleBar.value = (newSetting ? WindowAction.maximize.rawValue : -1) + 1 - Notification.Name.windowTitleBar.post() - } - - @objc func toggleCombinedDisplayMode(_ sender: NSButton) { - Defaults.combinedDisplayMode.enabled = sender.state == .on - } - - @objc func toggleGreenButtonOverride(_ sender: NSButton) { - Defaults.greenButtonOverride.enabled = sender.state == .on - Notification.Name.greenButtonOverride.post() - } - - @objc func toggleAutoMaximize(_ sender: NSButton) { - Defaults.autoMaximize.enabled = sender.state == .on - } - - @objc func toggleHalvesPreserveOtherAxisSize(_ sender: NSButton) { - Defaults.halvesPreserveOtherAxisSize.enabled = sender.state == .on - } - - @objc func toggleRepeatedMaximizeRestoresPrevious(_ sender: NSButton) { - Defaults.repeatedMaximizeRestoresPrevious.enabled = sender.state == .on - } - - @IBAction func toggleTodoMode(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.todo.enabled = newSetting - showHideTodoModeSettings(animated: true) - Notification.Name.todoMenuToggled.post() - } - - @IBAction func showTodoModeHelp(_ sender: Any) { - if aboutTodoWindowController == nil { - aboutTodoWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "AboutTodoWindowController") as? NSWindowController - } - NSApp.activate(ignoringOtherApps: true) - aboutTodoWindowController?.showWindow(self) - } - - @IBAction func setTodoWidthUnit(_ sender: NSPopUpButton) { - let tag = sender.selectedTag() - guard let unit = TodoSidebarWidthUnit(rawValue: tag) else { - Logger.log("Expected a pop up button to have a selected item with a valid tag matching a value of TodoSidebarWidthUnit. Got: \(String(describing: tag))") - return - } - Defaults.todoSidebarWidthUnit.value = unit - - TodoManager.refreshTodoScreen() - - TodoManager.changeSidebarWidthUnit(to: unit) - - todoAppWidthField.stringValue = "\(Defaults.todoSidebarWidth.value)" - - TodoManager.moveAllIfNeeded(false) - } - - @IBAction func setTodoAppSide(_ sender: NSPopUpButton) { - let tag = sender.selectedTag() - guard let side = TodoSidebarSide(rawValue: tag) else { - Logger.log("Expected a pop up button to have a selected item with a valid tag matching a value of TodoSidebarSide. Got: \(String(describing: tag))") - return - } - - Defaults.todoSidebarSide.value = side - - TodoManager.moveAllIfNeeded(false) - } - - @IBAction func stageSliderChanged(_ sender: NSSlider) { - stageLabel.stringValue = "\(sender.intValue) px" - if let event = NSApp.currentEvent { - if event.type == .leftMouseUp || event.type == .keyDown { - let value: Float = sender.floatValue == 0 ? -1 : sender.floatValue - if value != Defaults.stageSize.value { - Defaults.stageSize.value = value - } - } - } - } - - @IBAction func restoreDefaults(_ sender: Any) { - // Ask user if they want to restore to Rectangle or Spectacle defaults - let currentDefaults = Defaults.alternateDefaultShortcuts.enabled ? "Rectangle" : "Spectacle" - let defaultShortcutsTitle = NSLocalizedString("Default Shortcuts", tableName: "Main", value: "", comment: "") - let currentlyUsingText = NSLocalizedString("Currently using: ", tableName: "Main", value: "", comment: "") - let cancelText = NSLocalizedString("Cancel", tableName: "Main", value: "", comment: "") - let response = AlertUtil.threeButtonAlert(question: defaultShortcutsTitle, text: currentlyUsingText + currentDefaults, buttonOneText: "Rectangle", buttonTwoText: "Spectacle", buttonThreeText: cancelText) - if response == .alertThirdButtonReturn { return } - - // Restore default shortcuts - let rectangleDefaults = response == .alertFirstButtonReturn - WindowAction.active.forEach { UserDefaults.standard.removeObject(forKey: $0.name) } - Defaults.alternateDefaultShortcuts.enabled = rectangleDefaults - Notification.Name.changeDefaults.post() - - // Restore snap areas - Defaults.portraitSnapAreas.typedValue = nil - Defaults.landscapeSnapAreas.typedValue = nil - Notification.Name.defaultSnapAreas.post() - } - - @IBAction func exportConfig(_ sender: NSButton) { - Notification.Name.windowSnapping.post(object: false) - let savePanel = NSSavePanel() - savePanel.allowedContentTypes = [.json] - savePanel.nameFieldStringValue = "RectangleConfig" - let response = savePanel.runModal() - if response == .OK, let url = savePanel.url { - do { - if let jsonString = Defaults.encoded() { - try jsonString.write(to: url, atomically: false, encoding: .utf8) - } - } - catch { - Logger.log(error.localizedDescription) - } - } - Notification.Name.windowSnapping.post(object: true) - } - - @IBAction func importConfig(_ sender: NSButton) { - Notification.Name.windowSnapping.post(object: false) - let openPanel = NSOpenPanel() - openPanel.allowedContentTypes = [.json] - let response = openPanel.runModal() - if response == .OK, let url = openPanel.url { - Defaults.load(fileUrl: url) - } - Notification.Name.windowSnapping.post(object: true) - } - - @IBAction func showExtraSettings(_ sender: NSButton) { - showExtraSettingsPopover(sender) - } - - override func awakeFromNib() { - initializeToggles() - NotificationCenter.default.addObserver(self, - selector: #selector(stackBadgeChanged), - name: .stackBadgeChanged, - object: nil) - - checkForUpdatesAutomaticallyCheckbox.bind(.value, to: AppDelegate.instance.updaterController.updater, withKeyPath: "automaticallyChecksForUpdates", options: nil) - - let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String - let buildString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String - - versionLabel.stringValue = "v" + appVersionString + " (" + buildString + ")" - - updateCheckForUpdatesTitle() - - initializeTodoModeSettings() - shortcutRecordingObserver.observe([toggleTodoShortcutView, reflowTodoShortcutView]) - - cycleSizesView.arrangedSubviews.forEach { view in - cycleSizesView.removeArrangedSubview(view) - view.removeFromSuperview() - } - - let cycleSizeCheckboxes = makeCycleSizeCheckboxes() - self.cycleSizeCheckboxes = cycleSizeCheckboxes - - let cornerCycleExpansionAxisRow = makeCornerCycleExpansionAxisRow() - let cooperativeCornerResizeCheckbox = makeCooperativeCornerResizeCheckbox() - self.cooperativeCornerResizeCheckbox = cooperativeCornerResizeCheckbox - cycleSizesView.orientation = .vertical - cycleSizesView.alignment = .leading - cycleSizesView.spacing = 8 - cycleSizesView.addArrangedSubview(makeCycleSizesRow(cycleSizeCheckboxes)) - cycleSizesView.addArrangedSubview(cornerCycleExpansionAxisRow) - - // Holding off on showing the cooperative resize feature for now - if Defaults.cooperativeCornerResize.enabled { - cycleSizesView.addArrangedSubview(cooperativeCornerResizeCheckbox) - } - - initializeCycleSizesView(animated: false) - - initializeCombinedDisplayCheckbox() - - initializeGreenButtonOverrideCheckbox() - - initializeAutoMaximizeCheckbox() - - Notification.Name.configImported.onPost(using: {_ in - self.initializeTodoModeSettings() - self.initializeToggles() - self.initializeCycleSizesView(animated: false) - }) - - Notification.Name.menuBarIconHidden.onPost(using: {_ in - self.hideMenuBarIconCheckbox.state = .on - }) - - Notification.Name.updateAvailability.onPost { _ in - self.updateCheckForUpdatesTitle() - } - } - - func updateCheckForUpdatesTitle() { - checkForUpdatesButton.title = AppDelegate.instance.hasPendingUpdate ? "Update Available…".localized : "Check for Updates…".localized(key: "74m-kw-w1f.title") - } - - func initializeTodoModeSettings() { - todoCheckbox.state = Defaults.todo.userEnabled ? .on : .off - todoAppWidthField.stringValue = String(Defaults.todoSidebarWidth.value) - todoAppWidthField.delegate = self - todoAppWidthField.defaults = Defaults.todoSidebarWidth - todoAppWidthField.defaultsSetAction = { - TodoManager.moveAllIfNeeded(false) - } - todoAppWidthUnitPopUpButton.selectItem(withTag: Defaults.todoSidebarWidthUnit.value.rawValue) - todoAppSidePopUpButton.selectItem(withTag: Defaults.todoSidebarSide.value.rawValue) - TodoManager.initToggleShortcut() - TodoManager.initReflowShortcut() - toggleTodoShortcutView.shortcutValidator = TodoShortcutValidator(defaultsKey: TodoManager.toggleDefaultsKey) - reflowTodoShortcutView.shortcutValidator = TodoShortcutValidator(defaultsKey: TodoManager.reflowDefaultsKey) - toggleTodoShortcutView.setAssociatedUserDefaultsKey(TodoManager.toggleDefaultsKey, withTransformerName: MASDictionaryTransformerName) - reflowTodoShortcutView.setAssociatedUserDefaultsKey(TodoManager.reflowDefaultsKey, withTransformerName: MASDictionaryTransformerName) - showHideTodoModeSettings(animated: false) - } - - private func showHideTodoModeSettings(animated: Bool) { - setVisibility(shown: Defaults.todo.userEnabled, ofView: todoView, withConstraint: todoViewHeightConstraint, animated: animated) - } - - func initializeToggles() { - checkForUpdatesAutomaticallyCheckbox.state = Defaults.SUEnableAutomaticChecks.enabled ? .on : .off - - launchOnLoginCheckbox.state = Defaults.launchOnLogin.enabled ? .on : .off - - hideMenuBarIconCheckbox.state = Defaults.hideMenuBarIcon.enabled ? .on : .off - - subsequentExecutionPopUpButton.selectItem(withTag: Defaults.subsequentExecutionMode.value.rawValue) - tileGridLimitRows.forEach { $0.reload() } - - allowAnyShortcutCheckbox.state = Defaults.allowAnyShortcut.enabled ? .on : .off - - gapSlider.intValue = Int32(Defaults.gapSize.value) - gapLabel.stringValue = "\(gapSlider.intValue) px" - gapSlider.isContinuous = true - skipGapTopEdgeCheckbox.state = Defaults.skipGapTopEdge.enabled ? .on : .off - skipGapTopEdgeCheckbox.isHidden = Defaults.gapSize.value == 0 - - cursorAcrossCheckbox.state = Defaults.moveCursorAcrossDisplays.userEnabled ? .on : .off - - useCursorScreenDetectionCheckbox.isHidden = !Defaults.useCursorScreenDetection.enabled - useCursorScreenDetectionCheckbox.state = Defaults.useCursorScreenDetection.enabled ? .on : .off - - doubleClickTitleBarCheckbox.state = WindowAction(rawValue: Defaults.doubleClickTitleBar.value - 1) != nil ? .on : .off - - combinedDisplayModeCheckbox?.state = Defaults.combinedDisplayMode.userEnabled ? .on : .off - - greenButtonOverrideCheckbox?.state = Defaults.greenButtonOverride.enabled ? .on : .off - - autoMaximizeCheckbox?.state = Defaults.autoMaximize.userDisabled ? .off : .on - - halvesPreserveOtherAxisSizeCheckbox?.state = Defaults.halvesPreserveOtherAxisSize.enabled ? .on : .off - repeatedMaximizeRestoresPreviousCheckbox?.state = Defaults.repeatedMaximizeRestoresPrevious.enabled ? .on : .off - - if StageUtil.stageCapable { - stageSlider.intValue = Int32(Defaults.stageSize.value) - stageSlider.isContinuous = true - stageLabel.stringValue = "\(stageSlider.intValue) px" - } else { - stageView.isHidden = true - } - setToggleStatesForCycleSizeCheckboxes() - setToggleStatesForCornerCycleExpansionAxisButtons() - setToggleStateForCooperativeCornerResizeCheckbox() - } - - private func initializeCycleSizesView(animated: Bool = false) { - let showOptionsView = Defaults.subsequentExecutionMode.resizes - - if showOptionsView { - setToggleStatesForCycleSizeCheckboxes() - setToggleStatesForCornerCycleExpansionAxisButtons() - setToggleStateForCooperativeCornerResizeCheckbox() - } - - setVisibility(shown: showOptionsView, ofView: cycleSizesView, withConstraint: cycleSizesViewHeightConstraint, animated: animated) - } - - private func initializeCombinedDisplayCheckbox() { - if combinedDisplayModeCheckbox == nil, !NSScreen.screensHaveSeparateSpaces, - let parentStack = doubleClickTitleBarCheckbox.superview as? NSStackView, - let insertIdx = parentStack.arrangedSubviews.firstIndex(of: doubleClickTitleBarCheckbox) { - - let checkbox = NSButton(checkboxWithTitle: NSLocalizedString("Treat multiple displays as one", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleCombinedDisplayMode(_:))) - checkbox.state = Defaults.combinedDisplayMode.userEnabled ? .on : .off - // Match storyboard checkbox content priorities to prevent vertical compression - checkbox.setContentCompressionResistancePriority(.required, for: .vertical) - checkbox.setContentHuggingPriority(.defaultHigh, for: .vertical) - - // Must be set before inserting: NSStackView queries intrinsicContentSize once on - // insertion, so preferredMaxLayoutWidth=0 would give zero height permanently. - let descLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF.", tableName: "Main", value: "", comment: "")) - descLabel.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize) - descLabel.textColor = .secondaryLabelColor - descLabel.translatesAutoresizingMaskIntoConstraints = false - descLabel.preferredMaxLayoutWidth = 500 - descLabel.setContentCompressionResistancePriority(.required, for: .vertical) - descLabel.setContentHuggingPriority(.defaultHigh, for: .vertical) - - let separator = NSBox() - separator.boxType = .separator - separator.translatesAutoresizingMaskIntoConstraints = false - separator.setContentHuggingPriority(.defaultHigh, for: .vertical) - - parentStack.insertArrangedSubview(separator, at: insertIdx + 1) - parentStack.insertArrangedSubview(checkbox, at: insertIdx + 2) - parentStack.insertArrangedSubview(descLabel, at: insertIdx + 3) - separator.widthAnchor.constraint(equalTo: doubleClickTitleBarCheckbox.widthAnchor).isActive = true - separator.heightAnchor.constraint(equalToConstant: 20).isActive = true - combinedDisplayModeCheckbox = checkbox - } - } - - private func initializeGreenButtonOverrideCheckbox() { - if greenButtonOverrideCheckbox == nil, - let parentStack = doubleClickTitleBarCheckbox.superview as? NSStackView, - let insertIdx = parentStack.arrangedSubviews.firstIndex(of: doubleClickTitleBarCheckbox) { - - let checkbox = NSButton(checkboxWithTitle: NSLocalizedString("Green stoplight button maximizes instead of Full Screen", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleGreenButtonOverride(_:))) - checkbox.state = Defaults.greenButtonOverride.enabled ? .on : .off - // Match storyboard checkbox content priorities to prevent vertical compression - checkbox.setContentCompressionResistancePriority(.required, for: .vertical) - checkbox.setContentHuggingPriority(.defaultHigh, for: .vertical) - - // Must be set before inserting: NSStackView queries intrinsicContentSize once on - // insertion, so preferredMaxLayoutWidth=0 would give zero height permanently. - let descLabel = NSTextField(wrappingLabelWithString: NSLocalizedString("Hold any modifier key or use the window menu for default macOS behavior", tableName: "Main", value: "", comment: "")) - descLabel.font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize) - descLabel.textColor = .secondaryLabelColor - descLabel.translatesAutoresizingMaskIntoConstraints = false - descLabel.preferredMaxLayoutWidth = 500 - descLabel.setContentCompressionResistancePriority(.required, for: .vertical) - descLabel.setContentHuggingPriority(.defaultHigh, for: .vertical) - - parentStack.insertArrangedSubview(checkbox, at: insertIdx + 1) - parentStack.insertArrangedSubview(descLabel, at: insertIdx + 2) - greenButtonOverrideCheckbox = checkbox - } - } - - private func initializeAutoMaximizeCheckbox() { - if autoMaximizeCheckbox == nil, - let parentStack = doubleClickTitleBarCheckbox.superview as? NSStackView, - let insertIdx = parentStack.arrangedSubviews.firstIndex(of: doubleClickTitleBarCheckbox) { - - let checkbox = NSButton(checkboxWithTitle: NSLocalizedString("Preserve maximize state when moving across displays", tableName: "Main", value: "", comment: ""), target: self, action: #selector(toggleAutoMaximize(_:))) - checkbox.state = Defaults.autoMaximize.userDisabled ? .off : .on - checkbox.setContentCompressionResistancePriority(.required, for: .vertical) - checkbox.setContentHuggingPriority(.defaultHigh, for: .vertical) - - parentStack.insertArrangedSubview(checkbox, at: insertIdx + 1) - autoMaximizeCheckbox = checkbox - } - } - - private func setVisibility(shown: Bool, ofView view: NSView, withConstraint constraint: NSLayoutConstraint, animated: Bool) { - - if shown { - view.isHidden = false - constraint.isActive = false - animateChanges(animated: animated) { - view.animator().alphaValue = 1 - } - } else { - animateChanges(animated: animated) { - view.isHidden = true - constraint.isActive = true - } - DispatchQueue.main.async { - view.alphaValue = 0 - } - } - } - - private func animateChanges(animated: Bool, block: () -> Void) { - if animated { - view.layoutSubtreeIfNeeded() - NSAnimationContext.runAnimationGroup({ context in - context.duration = 0.3 - context.allowsImplicitAnimation = true - - block() - view.layoutSubtreeIfNeeded() - }, completionHandler: nil) - } else { - block() - } - } - - private func makeCycleSizeCheckboxes() -> [NSButton] { - CycleSize.sortedSizes.map { division in - let button = NSButton(checkboxWithTitle: division.title, target: self, action: #selector(didCheckCycleSizeCheckbox(sender:))) - button.tag = division.rawValue - button.refusesFirstResponder = true - button.setContentCompressionResistancePriority(.required, for: .vertical) - return button - } - } - - private func makeCycleSizesRow(_ checkboxes: [NSButton]) -> NSStackView { - let row = NSStackView() - row.orientation = .horizontal - row.alignment = .centerY - row.spacing = 8 - checkboxes.forEach { row.addArrangedSubview($0) } - return row - } - - private func makeCornerCycleExpansionAxisRow() -> NSStackView { - let row = NSStackView() - row.orientation = .horizontal - row.alignment = .centerY - row.spacing = 8 - - let label = NSTextField(labelWithString: NSLocalizedString("Cyclic corner shortcuts expand:", tableName: "Main", value: "", comment: "")) - label.setContentCompressionResistancePriority(.required, for: .horizontal) - row.addArrangedSubview(label) - - let horizontalButton = makeCornerCycleExpansionAxisButton(title: NSLocalizedString("horizontally", tableName: "Main", value: "", comment: ""), axis: .horizontal) - let verticalButton = makeCornerCycleExpansionAxisButton(title: NSLocalizedString("vertically", tableName: "Main", value: "", comment: ""), axis: .vertical) - cornerCycleExpansionAxisButtons = [horizontalButton, verticalButton] - cornerCycleExpansionAxisButtons.forEach { row.addArrangedSubview($0) } - - return row - } - - private func makeCornerCycleExpansionAxisButton(title: String, axis: CornerCycleExpansionAxis) -> NSButton { - let button = NSButton(radioButtonWithTitle: title, target: self, action: #selector(setCornerCycleExpansionAxis(_:))) - button.tag = axis.rawValue - button.refusesFirstResponder = true - button.setContentCompressionResistancePriority(.required, for: .vertical) - return button - } - - private func makeCooperativeCornerResizeCheckbox() -> NSButton { - let button = NSButton(checkboxWithTitle: NSLocalizedString("Resize adjacent windows when cycling side or corner shortcuts", tableName: "Main", value: "", comment: ""), - target: self, - action: #selector(toggleCooperativeCornerResize(_:))) - button.refusesFirstResponder = true - button.setContentCompressionResistancePriority(.required, for: .vertical) - return button - } - - @objc private func didCheckCycleSizeCheckbox(sender: Any?) { - guard let checkbox = sender as? NSButton else { - Logger.log("Expected action to be sent from NSButton. Instead, sender is: \(String(describing: sender))") - return - } - - let rawValue = checkbox.tag - - guard let cycleSize = CycleSize(rawValue: rawValue) else { - Logger.log("Expected tag of cycle size checkbox to match a value of CycleSize. Got: \(String(describing: rawValue))") - return - } - - // If selected cycle sizes has not been changed, write the defaults. - if !Defaults.cycleSizesIsChanged.enabled { - Defaults.selectedCycleSizes.value = CycleSize.defaultSizes - } - - Defaults.cycleSizesIsChanged.enabled = true - - if checkbox.state == .on { - Defaults.selectedCycleSizes.value.insert(cycleSize) - } else { - Defaults.selectedCycleSizes.value.remove(cycleSize) - } - } - - private func setToggleStatesForCycleSizeCheckboxes() { - let useDefaultCycleSizes = !Defaults.cycleSizesIsChanged.enabled - let cycleSizes = useDefaultCycleSizes ? CycleSize.defaultSizes : Defaults.selectedCycleSizes.value - - cycleSizeCheckboxes.forEach { checkbox in - guard let cycleSizeForCheckbox = CycleSize(rawValue: checkbox.tag) else { - return - } - - let isChecked = cycleSizes.contains(cycleSizeForCheckbox) - checkbox.state = isChecked ? .on : .off - checkbox.isEnabled = true - } - } - - private func setToggleStatesForCornerCycleExpansionAxisButtons() { - cornerCycleExpansionAxisButtons.forEach { button in - button.state = button.tag == Defaults.cornerCycleExpansionAxis.value.rawValue ? .on : .off - } - } - - private func setToggleStateForCooperativeCornerResizeCheckbox() { - cooperativeCornerResizeCheckbox?.state = Defaults.cooperativeCornerResize.enabled ? .on : .off - } - - @objc private func stackBadgeChanged() { - stackBadgeCheckbox?.state = Defaults.stackBadge.userEnabled ? .on : .off - } - -} - -extension SettingsViewController { - static func freshController() -> SettingsViewController { - let storyboard = NSStoryboard(name: "Main", bundle: nil) - let identifier = "SettingsViewController" - guard let viewController = storyboard.instantiateController(withIdentifier: identifier) as? SettingsViewController else { - fatalError("Unable to find ViewController - Check Main.storyboard") - } - return viewController - } -} - -extension SettingsViewController: NSTextFieldDelegate { - func controlTextDidChange(_ obj: Notification) { - guard let sender = obj.object as? AutoSaveFloatField, - let defaults: FloatDefault = sender.defaults else { return } - - Debounce.input(sender.floatValue, comparedAgainst: sender.floatValue) { floatValue in - defaults.value = floatValue - self.resetActiveSideSplitRatiosIfNeeded(for: defaults) - sender.defaultsSetAction?() - } - } - - func controlTextDidEndEditing(_ obj: Notification) { - guard let sender = obj.object as? AutoSaveFloatField, - let defaults: FloatDefault = sender.defaults else { return } - - if sender.stringValue.isEmpty { - let fallback = sender.fallbackValue - sender.stringValue = "\(Int(fallback))" - defaults.value = fallback - resetActiveSideSplitRatiosIfNeeded(for: defaults) - sender.defaultsSetAction?() - } - } - - private func resetActiveSideSplitRatiosIfNeeded(for defaults: FloatDefault) { - guard defaults.key == Defaults.horizontalSplitRatio.key - || defaults.key == Defaults.verticalSplitRatio.key - else { - return - } - - ActiveSideSplitRatios.shared.resetAll() - } -} - -class AutoSaveFloatField: NSTextField { - var defaults: FloatDefault? - var defaultsSetAction: (() -> Void)? - var fallbackValue: Float = 30 -} - -class HalfSplitRatioPopUpButton: NSPopUpButton { - static let otherTag = -1 - - var defaults: FloatDefault? - weak var customField: AutoSaveFloatField? - - func selectCurrentValue() { - guard let value = defaults?.value else { - selectItem(withTag: Self.otherTag) - customField?.isHidden = false - return - } - - if let cycleSize = CycleSize.matching(percentValue: value) { - selectItem(withTag: cycleSize.rawValue) - customField?.isHidden = true - } else { - selectItem(withTag: Self.otherTag) - customField?.isHidden = false - } - } -} diff --git a/Rectangle/PrefsWindow/SnapAreaViewController.swift b/Rectangle/PrefsWindow/SnapAreaViewController.swift deleted file mode 100644 index 059d2be64..000000000 --- a/Rectangle/PrefsWindow/SnapAreaViewController.swift +++ /dev/null @@ -1,302 +0,0 @@ -/// SnapAreaViewController.swift - -import Cocoa - -class SnapAreaViewController: NSViewController { - - @IBOutlet weak var windowSnappingCheckbox: NSButton! - @IBOutlet weak var unsnapRestoreButton: NSButton! - @IBOutlet weak var animateFootprintCheckbox: NSButton! - @IBOutlet weak var blurFootprintCheckbox: NSButton! - @IBOutlet weak var experimentalWindowAnimationsCheckbox: NSButton! - @IBOutlet weak var hapticFeedbackCheckbox: NSButton! - @IBOutlet weak var missionControlDraggingCheckbox: NSButton! - private let blurAppearanceSelect = NSPopUpButton(frame: .zero, pullsDown: false) - - @IBOutlet weak var topLeftLandscapeSelect: NSPopUpButton! - @IBOutlet weak var topLandscapeSelect: NSPopUpButton! - @IBOutlet weak var topRightLandscapeSelect: NSPopUpButton! - @IBOutlet weak var leftLandscapeSelect: NSPopUpButton! - @IBOutlet weak var rightLandscapeSelect: NSPopUpButton! - @IBOutlet weak var bottomLeftLandscapeSelect: NSPopUpButton! - @IBOutlet weak var bottomLandscapeSelect: NSPopUpButton! - @IBOutlet weak var bottomRightLandscapeSelect: NSPopUpButton! - - @IBOutlet weak var portraitStackView: NSStackView! - - @IBOutlet weak var topLeftPortraitSelect: NSPopUpButton! - @IBOutlet weak var topPortraitSelect: NSPopUpButton! - @IBOutlet weak var topRightPortraitSelect: NSPopUpButton! - @IBOutlet weak var leftPortraitSelect: NSPopUpButton! - @IBOutlet weak var rightPortraitSelect: NSPopUpButton! - @IBOutlet weak var bottomLeftPortraitSelect: NSPopUpButton! - @IBOutlet weak var bottomPortraitSelect: NSPopUpButton! - @IBOutlet weak var bottomRightPortraitSelect: NSPopUpButton! - - @IBAction func toggleWindowSnapping(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.windowSnapping.enabled = newSetting - Notification.Name.windowSnapping.post(object: newSetting) - if newSetting { - MacTilingDefaults.checkForBuiltInTiling(skipIfAlreadyNotified: false) - } - } - - @IBAction func toggleUnsnapRestore(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.unsnapRestore.enabled = newSetting - } - - @IBAction func toggleAnimateFootprint(_ sender: NSButton) { - let newSetting: Float = sender.state == .on ? 0.75 : 0 - Defaults.footprintAnimationDurationMultiplier.value = newSetting - } - - @IBAction func toggleBlurFootprint(_ sender: NSButton) { - Defaults.footprintBlur.enabled = sender.state == .on - refreshWindowAnimationPreferences() - } - - @IBAction func toggleExperimentalWindowAnimations(_ sender: NSButton) { - Defaults.experimentalWindowAnimations.enabled = sender.state == .on - refreshWindowAnimationPreferences() - Notification.Name.windowAnimationPreferencesChanged.post() - } - - private func refreshWindowAnimationPreferences() { - blurFootprintCheckbox.state = Defaults.footprintBlur.enabled ? .on : .off - experimentalWindowAnimationsCheckbox.state = Defaults.experimentalWindowAnimations.enabled ? .on : .off - blurAppearanceSelect.selectItem(withTag: Defaults.blurAppearance.value.rawValue) - blurAppearanceSelect.isEnabled = Defaults.footprintBlur.enabled - } - - private func configureBlurAppearance() { - guard let stack = blurFootprintCheckbox.superview as? NSStackView else { return } - let label = NSTextField(labelWithString: NSLocalizedString("Blur appearance", tableName: "Main", comment: "Preview blur appearance setting")) - let titles = [NSLocalizedString("Follow System", tableName: "Main", comment: "Use the system appearance"), - NSLocalizedString("Light", tableName: "Main", comment: "Light preview blur"), - NSLocalizedString("Dark", tableName: "Main", comment: "Dark preview blur")] - for (mode, title) in zip(BlurAppearance.allCases, titles) { - blurAppearanceSelect.addItem(withTitle: title) - blurAppearanceSelect.lastItem?.tag = mode.rawValue - } - blurAppearanceSelect.setAccessibilityLabel(label.stringValue) - blurAppearanceSelect.target = self - blurAppearanceSelect.action = #selector(setBlurAppearance(_:)) - let row = NSStackView(views: [label, blurAppearanceSelect]) - row.orientation = .horizontal - row.alignment = .centerY - row.spacing = 8 - stack.addArrangedSubview(row) - } - - @objc private func setBlurAppearance(_ sender: NSPopUpButton) { - guard let appearance = BlurAppearance(rawValue: sender.selectedTag()) else { return } - Defaults.blurAppearance.value = appearance - } - - @IBAction func toggleHapticFeedback(_ sender: NSButton) { - let newSetting: Bool = sender.state == .on - Defaults.hapticFeedbackOnSnap.enabled = newSetting - } - - @IBAction func toggleMissionControlDragging(_ sender: NSButton) { - let newSetting: Bool = sender.state == .off - Defaults.missionControlDragging.enabled = newSetting - Notification.Name.missionControlDragging.post(object: newSetting) - } - - @IBAction func setLandscapeSnapArea(_ sender: NSPopUpButton) { - setSnapArea(sender: sender, type: .landscape) - } - - @IBAction func setPortraitSnapArea(_ sender: NSPopUpButton) { - setSnapArea(sender: sender, type: .portrait) - } - - private func setSnapArea(sender: NSPopUpButton, type: DisplayOrientation) { - guard let directional = Directional(rawValue: sender.tag) else { return } - let selectedTag = sender.selectedTag() - var snapAreaConfig: SnapAreaConfig? - if selectedTag < -1, let compound = CompoundSnapArea(rawValue: selectedTag) { - snapAreaConfig = SnapAreaConfig(compound: compound) - } else if selectedTag > -1, let action = WindowAction(rawValue: selectedTag) { - snapAreaConfig = SnapAreaConfig(action: action) - } - SnapAreaModel.instance.setConfig(type: type, directional: directional, snapAreaConfig: snapAreaConfig) - } - - override func viewDidLoad() { - configureBlurAppearance() - windowSnappingCheckbox.state = Defaults.windowSnapping.userDisabled ? .off : .on - unsnapRestoreButton.state = Defaults.unsnapRestore.userDisabled ? .off : .on - animateFootprintCheckbox.state = Defaults.footprintAnimationDurationMultiplier.value > 0 ? .on : .off - refreshWindowAnimationPreferences() - hapticFeedbackCheckbox.state = Defaults.hapticFeedbackOnSnap.userEnabled ? .on : .off - missionControlDraggingCheckbox.state = Defaults.missionControlDragging.userDisabled ? .on : .off - missionControlDraggingCheckbox.isHidden = !Defaults.missionControlDragging.userDisabled - showHidePortrait() - - Notification.Name.configImported.onPost(using: { [weak self] _ in - self?.refreshWindowAnimationPreferences() - self?.loadSnapAreas() - }) - Notification.Name.defaultSnapAreas.onPost(using: { [weak self] _ in - self?.loadSnapAreas() - }) - Notification.Name.appWillBecomeActive.onPost() { [weak self] _ in - self?.showHidePortrait() - } - Notification.Name.windowSnapping.onPost { [weak self] _ in - self?.windowSnappingCheckbox.state = Defaults.windowSnapping.userDisabled ? .off : .on - } - NotificationCenter.default.addObserver(forName: NSApplication.didChangeScreenParametersNotification, object: nil, queue: nil) { [weak self] _ in - self?.showHidePortrait() - } - } - - func showHidePortrait() { - portraitStackView.isHidden = !NSScreen.portraitDisplayConnected - } - - // Only load the selects when the view appears, to fix a performance issue where switching to this tab was taking a long time to load - var selectsLoaded = false - override func viewWillAppear() { - refreshWindowAnimationPreferences() - animateFootprintCheckbox.state = Defaults.footprintAnimationDurationMultiplier.value > 0 ? .on : .off - if !selectsLoaded { - loadSnapAreas() - selectsLoaded = true - } - } - - func loadSnapAreas() { - - let landscapeSelects: [NSPopUpButton] = [ - topLeftLandscapeSelect, - topLandscapeSelect, - topRightLandscapeSelect, - leftLandscapeSelect, - rightLandscapeSelect, - bottomLeftLandscapeSelect, - bottomLandscapeSelect, - bottomRightLandscapeSelect - ] - - let portraitSelects: [NSPopUpButton] = [ - topLeftPortraitSelect, - topPortraitSelect, - topRightPortraitSelect, - leftPortraitSelect, - rightPortraitSelect, - bottomLeftPortraitSelect, - bottomPortraitSelect, - bottomRightPortraitSelect - ] - - landscapeSelects.forEach { initialize(select: $0, orientation: .landscape)} - portraitSelects.forEach { initialize(select: $0, orientation: .portrait)} - } - - /// Fix a performance bug by loading only selected menu items first, then dispatching async to fill out all menu items - private func initialize(select: NSPopUpButton, orientation: DisplayOrientation) { - - defer { - DispatchQueue.main.async { - self.configure(select: select, orientation: orientation) - } - } - - guard let directional = Directional(rawValue: select.tag) else { return } - - reset(select: select) - let selectedTag = getSelectedTag(for: directional, orientation: orientation) - - for compoundSnapArea in CompoundSnapArea.all { - guard compoundSnapArea.compatibleOrientation.contains(orientation), compoundSnapArea.compatibleDirectionals.contains(directional) else { continue } - if selectedTag == compoundSnapArea.rawValue { - addCompoundSnapAreaMenuItem(for: compoundSnapArea, to: select, isSelected: true) - return - } - } - - for windowAction in WindowAction.active { - if windowAction.isDragSnappable, selectedTag == windowAction.rawValue { - addWindowActionMenuItem(for: windowAction, to: select, isSelected: true) - return - } - } - } - - private func configure(select: NSPopUpButton, orientation: DisplayOrientation) { - guard let directional = Directional(rawValue: select.tag) else { return } - - reset(select: select) - let selectedTag = getSelectedTag(for: directional, orientation: orientation) - - for compoundSnapArea in CompoundSnapArea.all { - guard compoundSnapArea.compatibleOrientation.contains(orientation), compoundSnapArea.compatibleDirectionals.contains(directional) else { continue } - - addCompoundSnapAreaMenuItem(for: compoundSnapArea, to: select, isSelected: selectedTag == compoundSnapArea.rawValue) - } - - select.menu?.addItem(NSMenuItem.separator()) - - for windowAction in WindowAction.active { - if windowAction.isDragSnappable { - addWindowActionMenuItem(for: windowAction, to: select, isSelected: selectedTag == windowAction.rawValue) - } - } - } - - // MARK: - Menu Item & Setup Helpers - - private func reset(select: NSPopUpButton) { - select.removeAllItems() - select.addItem(withTitle: "-") - select.menu?.items.first?.tag = -1 - } - - private func getSelectedTag(for directional: Directional, orientation: DisplayOrientation) -> Int { - let snapAreaConfig = orientation == .landscape - ? SnapAreaModel.instance.landscape[directional] - : SnapAreaModel.instance.portrait[directional] - - return snapAreaConfig?.action?.rawValue ?? snapAreaConfig?.compound?.rawValue ?? -1 - } - - private func addCompoundSnapAreaMenuItem(for compoundSnapArea: CompoundSnapArea, to select: NSPopUpButton, isSelected: Bool) { - let item = NSMenuItem(title: compoundSnapArea.displayName, action: nil, keyEquivalent: "") - item.tag = compoundSnapArea.rawValue - select.menu?.addItem(item) - - if isSelected { - select.select(item) - } - } - - private func addWindowActionMenuItem(for windowAction: WindowAction, to select: NSPopUpButton, isSelected: Bool) { - guard let name = windowAction.displayName else { return } - - let item = NSMenuItem(title: name, action: nil, keyEquivalent: "") - item.tag = windowAction.rawValue - item.image = windowAction.image.copy() as? NSImage - item.image?.size.height = 12 - item.image?.size.width = 18 - select.menu?.addItem(item) - - if isSelected { - select.select(item) - } - } -} - -extension NSViewController { - static func newControllerFromStoryboard(storyboardName: String = "Main", identifier: String) -> NSViewController { - let storyboard = NSStoryboard(name: storyboardName, bundle: nil) - guard let viewController = storyboard.instantiateController(withIdentifier: identifier) as? NSViewController else { - fatalError("Unable to find \(identifier) in \(storyboardName)") - } - return viewController - } -} diff --git a/Rectangle/PrefsWindow/Config.swift b/Rectangle/SettingsWindow/Config.swift similarity index 100% rename from Rectangle/PrefsWindow/Config.swift rename to Rectangle/SettingsWindow/Config.swift diff --git a/Rectangle/PrefsWindow/ShortcutRecordingObserver.swift b/Rectangle/SettingsWindow/ShortcutRecordingObserver.swift similarity index 100% rename from Rectangle/PrefsWindow/ShortcutRecordingObserver.swift rename to Rectangle/SettingsWindow/ShortcutRecordingObserver.swift diff --git a/Rectangle/SettingsWindow/ShortcutsViewController.swift b/Rectangle/SettingsWindow/ShortcutsViewController.swift index f2326cd53..edf265b83 100644 --- a/Rectangle/SettingsWindow/ShortcutsViewController.swift +++ b/Rectangle/SettingsWindow/ShortcutsViewController.swift @@ -447,3 +447,19 @@ extension ShortcutsViewController: NSOutlineViewDelegate { } } } + +class PassthroughShortcutValidator: MASShortcutValidator { + + override func isShortcutValid(_ shortcut: MASShortcut!) -> Bool { + return true + } + + override func isShortcutAlreadyTaken(bySystem shortcut: MASShortcut!, explanation: AutoreleasingUnsafeMutablePointer!) -> Bool { + return false + } + + override func isShortcut(_ shortcut: MASShortcut!, alreadyTakenIn menu: NSMenu!, explanation: AutoreleasingUnsafeMutablePointer!) -> Bool { + return false + } + +} diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 85ae44a12..8d401ddef 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -3,7 +3,7 @@ "strings" : { "0Ak-33-SM7.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Right\"; ObjectID = \"0Ak-33-SM7\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -189,7 +189,7 @@ }, "0eh-6G-rMp.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"0 px\"; ObjectID = \"0eh-6G-rMp\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -561,7 +561,7 @@ }, "1Rc-Od-eP5.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Down\"; ObjectID = \"1Rc-Od-eP5\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -885,7 +885,7 @@ }, "1ui-PL-TkR.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Snap windows by dragging\"; ObjectID = \"1ui-PL-TkR\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -1545,7 +1545,7 @@ }, "1zK-sf-CSX.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Version\"; ObjectID = \"1zK-sf-CSX\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "cs" : { "stringUnit" : { @@ -1941,7 +1941,7 @@ }, "2ue-Mv-5Wh.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"2ue-Mv-5Wh\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -2127,7 +2127,7 @@ }, "2XJ-Ca-9di.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Spectacle\"; ObjectID = \"2XJ-Ca-9di\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "cs" : { "stringUnit" : { @@ -2253,7 +2253,7 @@ }, "2Zm-fl-PcC.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Repeated commands\"; ObjectID = \"2Zm-fl-PcC\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -2439,7 +2439,7 @@ }, "3GE-la-fAZ.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"move to adjacent on left/right, or cycle size on side\"; ObjectID = \"3GE-la-fAZ\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -2625,7 +2625,7 @@ }, "3hZ-Cs-EZ6.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Disable fast dragging to Mission Control\"; ObjectID = \"3hZ-Cs-EZ6\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -3225,7 +3225,7 @@ }, "3zd-xE-oWl.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"First Two Thirds\"; ObjectID = \"3zd-xE-oWl\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4155,7 +4155,7 @@ }, "5LN-YU-Bwy.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"px\"; ObjectID = \"5LN-YU-Bwy\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -4503,7 +4503,7 @@ }, "5WR-Ui-uYB.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"5WR-Ui-uYB\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -4875,7 +4875,7 @@ }, "6DV-cd-fda.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Maximize Height\"; ObjectID = \"6DV-cd-fda\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5067,7 +5067,7 @@ }, "6e0-ji-qXw.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Todo app width\"; ObjectID = \"6e0-ji-qXw\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5253,7 +5253,7 @@ }, "6HX-rn-VIp.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Fourth\"; ObjectID = \"6HX-rn-VIp\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5445,7 +5445,7 @@ }, "6ma-hP-5xX.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Left\"; ObjectID = \"6ma-hP-5xX\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5631,7 +5631,7 @@ }, "7YK-9Z-lzw.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Center Third\"; ObjectID = \"7YK-9Z-lzw\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -5823,7 +5823,7 @@ }, "7yS-wj-uWD.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Show Todo Mode in menu\"; ObjectID = \"7yS-wj-uWD\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6009,7 +6009,7 @@ }, "8Bg-SZ-hDO.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Move to Center\"; ObjectID = \"8Bg-SZ-hDO\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6201,7 +6201,7 @@ }, "8dv-v2-SPu.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"3. In the Rectangle menu, enable Todo Mode.\"; ObjectID = \"8dv-v2-SPu\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6525,7 +6525,7 @@ }, "8oe-J2-oUU.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Maximize\"; ObjectID = \"8oe-J2-oUU\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -6717,7 +6717,7 @@ }, "08q-Ce-1QL.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Two Thirds\"; ObjectID = \"08q-Ce-1QL\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7041,7 +7041,7 @@ }, "9JD-tZ-7jf.title" : { "comment" : "Class = \"NSWindow\"; title = \"Authorize Rectangle\"; ObjectID = \"9JD-tZ-7jf\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7233,7 +7233,7 @@ }, "9XM-Zb-HEb.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"If the checkbox is disabled, click the padlock and enter your password\"; ObjectID = \"9XM-Zb-HEb\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -7695,7 +7695,7 @@ }, "74m-kw-w1f.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Check for Updates…\"; ObjectID = \"74m-kw-w1f\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "cs" : { "stringUnit" : { @@ -8187,7 +8187,7 @@ }, "adp-cN-qkh.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Left\"; ObjectID = \"adp-cN-qkh\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -8373,7 +8373,7 @@ }, "AEr-NX-9wW.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"190 px\"; ObjectID = \"AEr-NX-9wW\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -8532,9 +8532,6 @@ } } } - }, - "After Rectangle maximizes or almost maximizes a window, executing the same action again moves the window back to its previous size and position." : { - }, "agt-UL-0e3.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"agt-UL-0e3\";", @@ -8676,7 +8673,7 @@ }, "AgV-lP-6XB.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"%\"; ObjectID = \"AgV-lP-6XB\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -8700,6 +8697,7 @@ }, "ani-win-cell.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Animate windows (experimental)\"; ObjectID = \"ani-win-cell\";", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -9406,7 +9404,7 @@ }, "ayu-YO-10p.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Stage Manager recent apps area\"; ObjectID = \"ayu-YO-10p\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -9592,7 +9590,7 @@ }, "bg9-nw-YvU.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Gaps between windows\"; ObjectID = \"bg9-nw-YvU\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -10298,6 +10296,7 @@ }, "blur-preview-cell.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Blur footprint\"; ObjectID = \"blur-preview-cell\";", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -10512,6 +10511,7 @@ } }, "Bottom Center Left Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10528,6 +10528,7 @@ } }, "Bottom Center Right Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10561,6 +10562,7 @@ } }, "Bottom Left Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10577,6 +10579,7 @@ } }, "Bottom Right Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10772,6 +10775,7 @@ } }, "Bottom Third" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10788,6 +10792,7 @@ } }, "Bottom Two Thirds" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -10805,7 +10810,7 @@ }, "bRX-dV-iAR.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Center\"; ObjectID = \"bRX-dV-iAR\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -11459,7 +11464,7 @@ }, "C9v-g0-DH8.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Restore\"; ObjectID = \"C9v-g0-DH8\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -11644,6 +11649,7 @@ } }, "Cancel" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -12175,6 +12181,7 @@ } }, "Conflict with system setting" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -12664,7 +12671,7 @@ }, "cRm-wn-Yv6.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Third\"; ObjectID = \"cRm-wn-Yv6\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -12850,7 +12857,7 @@ }, "CUR-SD-CEL.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Use cursor position for screen detection\"; ObjectID = \"CUR-SD-CEL\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -12873,6 +12880,7 @@ } }, "Currently using: " : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -13169,13 +13177,10 @@ } } } - }, - "Cyclic corner shortcuts expand:" : { - }, "d7y-s8-7GE.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Top\"; ObjectID = \"d7y-s8-7GE\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -13851,6 +13856,7 @@ } }, "Default Shortcuts" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -14012,7 +14018,7 @@ }, "DG2-BN-GPE.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Right\"; ObjectID = \"DG2-BN-GPE\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -14198,7 +14204,7 @@ }, "DHt-cE-Bl0.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Toggle Todo\"; ObjectID = \"DHt-cE-Bl0\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -15445,7 +15451,7 @@ }, "e9j-DR-MEH.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Launch on login\"; ObjectID = \"e9j-DR-MEH\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -15631,7 +15637,7 @@ }, "e57-QJ-6bL.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Almost Maximize\"; ObjectID = \"e57-QJ-6bL\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -15823,7 +15829,7 @@ }, "Eah-KL-kbn.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Make Larger\"; ObjectID = \"Eah-KL-kbn\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -16009,7 +16015,7 @@ }, "EBt-5H-0z6.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"EBt-5H-0z6\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -16195,7 +16201,7 @@ }, "ec4-FB-fMa.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom\"; ObjectID = \"ec4-FB-fMa\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -16558,7 +16564,7 @@ }, "Ext-Set-Cel.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Extras\"; ObjectID = \"Ext-Set-Cel\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -16803,7 +16809,7 @@ }, "f3Q-q7-Pcy.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Right Sixth\"; ObjectID = \"f3Q-q7-Pcy\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -16989,7 +16995,7 @@ }, "F8S-GI-LiB.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Right\"; ObjectID = \"F8S-GI-LiB\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -17175,7 +17181,7 @@ }, "F12-EV-Lfz.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"First Third\"; ObjectID = \"F12-EV-Lfz\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -17499,7 +17505,7 @@ }, "Fap-R2-Aj6.label" : { "comment" : "Class = \"NSTabViewItem\"; label = \"Snap Areas\"; ObjectID = \"Fap-R2-Aj6\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -17619,7 +17625,7 @@ }, "FCh-1Q-Xms.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Keep a chosen application visible on the right of your primary screen at all times\"; ObjectID = \"FCh-1Q-Xms\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -18129,7 +18135,7 @@ }, "Fko-xs-gN5.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Second Fourth\"; ObjectID = \"Fko-xs-gN5\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -18321,7 +18327,7 @@ }, "fL5-gz-pOD.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"fL5-gz-pOD\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -18507,7 +18513,7 @@ }, "FLh-CI-WNK.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"FLh-CI-WNK\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -19085,7 +19091,7 @@ }, "Fx0-sm-DrT.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Reflow Todo\"; ObjectID = \"Fx0-sm-DrT\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -19409,7 +19415,7 @@ }, "gEd-S9-Cfp.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Please select your default shortcuts and behavior\"; ObjectID = \"gEd-S9-Cfp\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -19925,7 +19931,7 @@ }, "gHH-BV-5kP.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"cycle sizes on side actions\"; ObjectID = \"gHH-BV-5kP\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -20423,11 +20429,9 @@ } } } - }, - "Green stoplight button maximizes instead of Full Screen" : { - }, "Grid Positions" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -20445,7 +20449,7 @@ }, "gtf-PD-IHm.label" : { "comment" : "Class = \"NSTabViewItem\"; label = \"General\"; ObjectID = \"gtf-PD-IHm\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -20629,18 +20633,6 @@ } } }, - "GTP-tg-Cel.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Remove gap on top screen edge\"; ObjectID = \"GTP-tg-Cel\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Remove gap on top screen edge" - } - } - } - }, "GUa-eO-cwY.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"GUa-eO-cwY\";", "extractionState" : "manual", @@ -20967,7 +20959,7 @@ }, "gyg-xl-dPn.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Rectangle needs your permission to control your window positions.\"; ObjectID = \"gyg-xl-dPn\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -21474,13 +21466,10 @@ } } } - }, - "Half actions preserve the window's size on the other axis" : { - }, "heT-W6-Fyf.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Double-click window title bar to maximize/restore\"; ObjectID = \"heT-W6-Fyf\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -22131,13 +22120,10 @@ } } } - }, - "Hold any modifier key or use the window menu for default macOS behavior" : { - }, "HOm-BV-2jc.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Up\"; ObjectID = \"HOm-BV-2jc\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -22323,7 +22309,7 @@ }, "HOp-Kd-vhY.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Recommended\"; ObjectID = \"HOp-Kd-vhY\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -22508,6 +22494,7 @@ } }, "Horizontal (L/R, %)" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -22522,9 +22509,6 @@ } } } - }, - "horizontally" : { - }, "hQb-2v-fYv.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Smart Quotes\"; ObjectID = \"hQb-2v-fYv\";", @@ -22666,7 +22650,7 @@ }, "HtH-yF-lBR.title" : { "comment" : "Class = \"NSWindow\"; title = \"Welcome!\"; ObjectID = \"HtH-yF-lBR\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -23638,7 +23622,7 @@ }, "I97-ob-ue4.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"I97-ob-ue4\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -24148,7 +24132,7 @@ }, "IO3-Hi-7gC.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Export\"; ObjectID = \"IO3-Hi-7gC\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -24334,7 +24318,7 @@ }, "iOQ-1e-esP.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Center Sixth\"; ObjectID = \"iOQ-1e-esP\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -24526,7 +24510,7 @@ }, "iWV-c2-BJD.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Open System Preferences\"; ObjectID = \"iWV-c2-BJD\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -24712,7 +24696,7 @@ }, "iXo-XL-T6q.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Authorize Rectangle\"; ObjectID = \"iXo-XL-T6q\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -25042,7 +25026,7 @@ }, "J6t-sg-Wwz.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Right\"; ObjectID = \"J6t-sg-Wwz\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -25642,7 +25626,7 @@ }, "Jnd-Lc-nlh.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Next Display\"; ObjectID = \"Jnd-Lc-nlh\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -25828,7 +25812,7 @@ }, "JSl-FY-MF0.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"JSl-FY-MF0\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -26014,7 +25998,7 @@ }, "jww-Ju-S3d.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"do nothing\"; ObjectID = \"jww-Ju-S3d\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -26848,7 +26832,7 @@ }, "KfQ-dw-3jk.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"KfQ-dw-3jk\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -27172,7 +27156,7 @@ }, "kx2-tZ-lk8.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Animate footprint\"; ObjectID = \"kx2-tZ-lk8\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -27358,7 +27342,7 @@ }, "kXi-dT-zSF.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Spectacle shortcuts are more likely to conflict with other shortcuts\"; ObjectID = \"kXi-dT-zSF\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -27544,7 +27528,7 @@ }, "kYm-Ye-gOR.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Welcome to Rectangle!\"; ObjectID = \"kYm-Ye-gOR\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -28032,9 +28016,6 @@ } } } - }, - "Left Half then Top Half moves the window to the top left quarter; the action for the opposite edge expands it back." : { - }, "Left or right side" : { "extractionState" : "stale", @@ -28396,7 +28377,7 @@ }, "lgE-cR-cQ5.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Go to System Preferences → Security & Privacy → Privacy → Accessibility\"; ObjectID = \"lgE-cR-cQ5\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -28611,7 +28592,7 @@ }, "LqQ-pM-jRN.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Left Sixth\"; ObjectID = \"LqQ-pM-jRN\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -28797,7 +28778,7 @@ }, "ltc-mf-BHr.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"When the menu bar icon is hidden, relaunch Rectangle from Finder to open\"; ObjectID = \"ltc-mf-BHr\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -28983,7 +28964,7 @@ }, "lUu-Hs-vuk.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"400\"; ObjectID = \"lUu-Hs-vuk\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "cs" : { "stringUnit" : { @@ -29289,7 +29270,7 @@ }, "m2F-eA-g7w.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Right Sixth\"; ObjectID = \"m2F-eA-g7w\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -29657,15 +29638,9 @@ } } }, - "Maximum windows per column" : { - "comment" : "Maximum windows stacked in each tiled column" - }, - "Maximum windows per row" : { - "comment" : "Maximum windows placed side by side in each tiled row" - }, "MDd-Sm-sUx.title" : { "comment" : "Class = \"NSWindow\"; title = \"About Todo Mode\"; ObjectID = \"MDd-Sm-sUx\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -29851,7 +29826,7 @@ }, "mFt-Kg-UYG.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Left Sixth\"; ObjectID = \"mFt-Kg-UYG\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -30036,6 +30011,7 @@ } }, "Middle Third" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -30329,7 +30305,7 @@ }, "MKW-qf-Q2C.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"▶︎ ⋯\"; ObjectID = \"MKW-qf-Q2C\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -30687,7 +30663,7 @@ }, "mpl-sd-2Wc.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Left\"; ObjectID = \"mpl-sd-2Wc\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -30873,7 +30849,7 @@ }, "MzN-CJ-ASD.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Make Smaller\"; ObjectID = \"MzN-CJ-ASD\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -31059,7 +31035,7 @@ }, "N2U-pY-CLq.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Keep a chosen application visible on the right side of your primary screen at all times\"; ObjectID = \"N2U-pY-CLq\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -31245,7 +31221,7 @@ }, "n4U-FC-L9s.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Remove keyboard shortcut restrictions\"; ObjectID = \"n4U-FC-L9s\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -31446,6 +31422,7 @@ } }, "Ninths (3×3)" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -31649,7 +31626,7 @@ }, "NMu-W8-Awa.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"NMu-W8-Awa\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -31973,7 +31950,7 @@ }, "nwX-h6-fwm.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Three Fourths\"; ObjectID = \"nwX-h6-fwm\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -32489,7 +32466,7 @@ }, "O9a-3Q-HB1.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Todo side\"; ObjectID = \"O9a-3Q-HB1\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -32951,7 +32928,7 @@ }, "oEQ-RN-TTJ.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"oEQ-RN-TTJ\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -33134,9 +33111,6 @@ } } } - }, - "Offset window position on overlap" : { - }, "ogc-rX-tC1.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Loosen\"; ObjectID = \"ogc-rX-tC1\";", @@ -33642,6 +33616,7 @@ }, "oSu-n4-8Yu.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Center Two Thirds\"; ObjectID = \"oSu-n4-8Yu\";", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -34683,7 +34658,7 @@ }, "Pbz-DF-hgG.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Move cursor along with window across displays\"; ObjectID = \"Pbz-DF-hgG\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -34866,11 +34841,9 @@ } } } - }, - "Preserve maximize state when moving across displays" : { - }, "Press the shortcut repeatedly to cycle through all positions in the grid." : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -35212,7 +35185,7 @@ }, "Q2j-YZ-1jU.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"Q2j-YZ-1jU\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -35530,7 +35503,7 @@ }, "Q6Q-6J-okH.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"First Fourth\"; ObjectID = \"Q6Q-6J-okH\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -35908,7 +35881,7 @@ }, "q9C-qZ-xw5.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"While in Todo Mode, you can refresh the Todo Mode layout by selecting \\\"Reflow Todo\\\" in the Rectangle menu or executing the associated keyboard shortcut.\"; ObjectID = \"q9C-qZ-xw5\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -36094,7 +36067,7 @@ }, "qBm-QP-s63.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"qBm-QP-s63\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -36274,7 +36247,7 @@ }, "qCy-Kx-9mR.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"cycle positions on quadrants, cycle sizes on side\"; ObjectID = \"qCy-Kx-9mR\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -36436,7 +36409,7 @@ }, "qlg-kC-FMr.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Hide menu bar icon\"; ObjectID = \"qlg-kC-FMr\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -36622,7 +36595,7 @@ }, "QwF-QN-YH7.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Previous Display\"; ObjectID = \"QwF-QN-YH7\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -36808,7 +36781,7 @@ }, "qze-7p-m1X.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"1. Bring your chosen todo application frontmost\"; ObjectID = \"qze-7p-m1X\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -36994,7 +36967,7 @@ }, "r2Y-cY-tgn.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Haptic feedback\"; ObjectID = \"r2Y-cY-tgn\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -37186,7 +37159,7 @@ }, "r4Q-q9-FLt.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"r4Q-q9-FLt\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -37800,12 +37773,6 @@ } } } - }, - "Repeated maximize restores the previous size and position" : { - - }, - "Resize adjacent windows when cycling side or corner shortcuts" : { - }, "rgM-f4-ycn.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Smart Dashes\"; ObjectID = \"rgM-f4-ycn\";", @@ -37947,7 +37914,7 @@ }, "RgZ-Jw-XQZ.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Import\"; ObjectID = \"RgZ-Jw-XQZ\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -38312,7 +38279,7 @@ }, "rmV-YD-Hzj.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Check for updates automatically\"; ObjectID = \"rmV-YD-Hzj\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -38822,7 +38789,7 @@ }, "rzr-Qq-702.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Right\"; ObjectID = \"rzr-Qq-702\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -39193,6 +39160,7 @@ } }, "Show additional sizes in menu" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -39207,11 +39175,9 @@ } } } - }, - "Show stacked window list on hover" : { - }, "Side Split Ratio" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -39416,6 +39382,7 @@ } }, "Sixteenths (4×4)" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -39944,7 +39911,7 @@ }, "STb-JK-oB1.title" : { "comment" : "Class = \"NSWindow\"; title = \"Rectangle Settings\"; ObjectID = \"STb-JK-oB1\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -40268,7 +40235,7 @@ }, "t7n-mU-75I.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Enable Rectangle.app\"; ObjectID = \"t7n-mU-75I\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -40454,7 +40421,7 @@ }, "T9Z-QF-gwc.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"First Three Fourths\"; ObjectID = \"T9Z-QF-gwc\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -41360,9 +41327,6 @@ } } }, - "Tile Windows in Rows/Columns" : { - "comment" : "General settings group for multi-window grid limits" - }, "tileColumns.title" : { "extractionState" : "manual", "localizations" : { @@ -41682,6 +41646,7 @@ } }, "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -41899,11 +41864,9 @@ } } } - }, - "Toggle window list" : { - }, "Top Center Left Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -41920,6 +41883,7 @@ } }, "Top Center Right Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -41953,6 +41917,7 @@ } }, "Top Left Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -41969,6 +41934,7 @@ } }, "Top Right Eighth" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -42181,6 +42147,7 @@ } }, "Top Third" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -42197,6 +42164,7 @@ } }, "Top Two Thirds" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -42234,9 +42202,6 @@ } } } - }, - "Treat multiple displays as one" : { - }, "Treat multiple monitors as one" : { "extractionState" : "stale", @@ -42389,7 +42354,7 @@ }, "Tt8-3X-UpT.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"Tt8-3X-UpT\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -42575,7 +42540,7 @@ }, "TTx-7X-Wie.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Center Sixth\"; ObjectID = \"TTx-7X-Wie\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -42782,6 +42747,7 @@ } }, "Twelfths (4×3)" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -43075,7 +43041,7 @@ }, "uLF-Uf-tBt.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Restore Default Shortcuts & Snap Areas\"; ObjectID = \"uLF-Uf-tBt\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -43990,7 +43956,7 @@ }, "uw2-9W-2jq.label" : { "comment" : "Class = \"NSTabViewItem\"; label = \"Shortcuts\"; ObjectID = \"uw2-9W-2jq\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -44176,7 +44142,7 @@ }, "UZP-5q-D5Y.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"Restore window size when unsnapped\"; ObjectID = \"UZP-5q-D5Y\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -44362,7 +44328,7 @@ }, "v2f-bX-xiM.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Left\"; ObjectID = \"v2f-bX-xiM\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -44733,6 +44699,7 @@ } }, "Vertical (T/B, %)" : { + "extractionState" : "stale", "localizations" : { "ko" : { "stringUnit" : { @@ -44747,13 +44714,10 @@ } } } - }, - "vertically" : { - }, "Vfd-fe-hCe.title" : { "comment" : "Class = \"NSButtonCell\"; title = \"ⓘ\"; ObjectID = \"Vfd-fe-hCe\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "cs" : { "stringUnit" : { @@ -45935,7 +45899,7 @@ }, "Vph-Z0-euH.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Center Three Fourths\"; ObjectID = \"Vph-Z0-euH\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -46958,9 +46922,6 @@ } } } - }, - "When using multiple displays, treats them as a single display. Requires System Settings > Desktop & Dock > Displays have separate Spaces to be OFF." : { - }, "Width Step (px)" : { "extractionState" : "manual", @@ -47527,7 +47488,7 @@ }, "xBU-le-7cX.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"xBU-le-7cX\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -47713,7 +47674,7 @@ }, "Xc8-Sm-pig.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Left\"; ObjectID = \"Xc8-Sm-pig\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -47899,7 +47860,7 @@ }, "xcE-uL-2J0.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts\"; ObjectID = \"xcE-uL-2J0\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -48085,7 +48046,7 @@ }, "xE6-jw-EPt.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"If the area is too small, recent apps will be hidden\"; ObjectID = \"xE6-jw-EPt\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -48271,7 +48232,7 @@ }, "xK0-Bn-yqf.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"xK0-Bn-yqf\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -48457,7 +48418,7 @@ }, "XlM-ch-cLG.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"cycle through displays\"; ObjectID = \"XlM-ch-cLG\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -48643,7 +48604,7 @@ }, "xNi-9K-fnJ.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"2. In the Rectangle menu, select\\n\\\"Use [Application] as Todo App\\\"\"; ObjectID = \"xNi-9K-fnJ\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -50239,7 +50200,7 @@ }, "Z9d-Rl-RVq.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"move to adjacent display on left or right\"; ObjectID = \"Z9d-Rl-RVq\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -50563,7 +50524,7 @@ }, "ZTK-rS-b17.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"Third Fourth\"; ObjectID = \"ZTK-rS-b17\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -50755,7 +50716,7 @@ }, "ZVi-DR-1zj.title" : { "comment" : "Class = \"NSTextFieldCell\"; title = \"About Todo Mode\"; ObjectID = \"ZVi-DR-1zj\";", - "extractionState" : "extracted_with_value", + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { From af5147a0475ff037741f8da6cf0d2ef928fd7fea Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:51:54 -0400 Subject: [PATCH 70/79] Pulled out some unused strings --- Rectangle/Localizable.xcstrings | 186 +++++++++++--------------------- 1 file changed, 60 insertions(+), 126 deletions(-) diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 91e47a7e8..4554e80b2 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -9790,17 +9790,6 @@ } } }, - "Export Config" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Export Config" - } - } - } - }, "Extra Shortcuts" : { "extractionState" : "manual", "localizations" : { @@ -14784,17 +14773,6 @@ } } }, - "Import Config" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Import Config" - } - } - } - }, "In the Rectangle menu, enable Todo Mode." : { "localizations" : { "en" : { @@ -16714,17 +16692,6 @@ } } }, - "Left side, top/bottom near corners" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom near corners" - } - } - } - }, "Left side, top/bottom side near corners" : { "extractionState" : "manual", "localizations" : { @@ -22236,17 +22203,6 @@ } } }, - "Provide haptic feedback" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Provide haptic feedback" - } - } - } - }, "px" : { "localizations" : { "en" : { @@ -24901,197 +24857,186 @@ } } }, - "Right side, top/bottom near corners" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom near corners" - } - } - } - }, "Right side, top/bottom side near corners" : { "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Moitié droite, moitié du haut/bas près des coins" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Pravá polovina, horní/spodní polovina blízko rohů" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Rechte Hälfte, Obere/Untere Hälfte in der Nähe der Ecken" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Right side, top/bottom side near corners" + "value" : "Right side, top/bottom near corners" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Mitad derecha, mitad superior/inferior cerca de las esquinas" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Mitad derecha, mitad superior/inferior cerca de las esquinas" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Moitié droite, moitié du haut/bas près des coins" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Metà destra, metà superiore/inferiore vicino gli angoli" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "右半分、画面端付近の上半分・下半分" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "반, 위/아래 반에 근접한 모서리" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Dešinė pusė, viršutinė/apačioje pusė šalia kampų" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Høgre halvdel, øverste/nederste halvdel nære hjørne" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Høgre halvdel, øvste/nedste halvdel nære hjørne" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Metade direita, metade cima/baixo próximo das bordas" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Правая половина, верхняя/нижняя половина возле углов" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Pravá polovica, horná/spodná polovica blízko rohov" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Right side, top/bottom side near corners" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Sağ yarım (köşelere yaklaşıldığında ise üst/alt yarım)" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Права половина, верхня/нижня половина близько кутів" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nửa phải, nửa trên/dưới nếu ngay góc" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "右半屏,靠近角落则上/下半屏" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "右半,靠近角落則上半/下半" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "右半,靠近角落則上半/下半" } } @@ -28636,197 +28581,186 @@ } } }, - "Thirds, top/bottom near corners" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thirds, top/bottom near corners" - } - } - } - }, "Thirds, top/bottom side near corners" : { "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tiers, moitié du haut/bas près des coins" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Třetiny, horní/spodní polovina blízko rohů" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Drittel, Obere/Untere Hälfte in der Nähe der Ecken" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Thirds, top/bottom near corners" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tercios, mitad superior/inferior cerca de las esquinas" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tercios, mitad superior/inferior cerca de las esquinas" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tiers, moitié du haut/bas près des coins" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Terzi, metà superiore/inferiore vicino gli angoli" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "3分割、画面端付近の上半分・下半分" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "1/3, 위/아래 반에 근접한 모서리" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Trečdalys, viršutinė/apačioje pusė šalia kampų" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tredjedeler, øverste/nederste halvdel nære hjørne" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tredjedelar, øvste/nedste halvdel nære hjørne" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Трети, верхняя/нижняя половина возле углов" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tretiny, horná/spodná polovica blízko rohov" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thirds, top/bottom side near corners" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Üçte bir (köşelere yaklaşıldığında ise üst/alt)" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Третини, верхня/нижня половина близько кутів" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "1/3, nửa trên/dưới nếu ngay góc" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "⅓,靠近角落则上/下半屏" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "⅓,靠近角落則上半/下半" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "⅓;靠近角落則上半/下半" } } From ccea6d2810c85d1cf0d522fa3a1c9a0382770400 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:55:27 -0400 Subject: [PATCH 71/79] Make Smaller & Make larger localizations --- Rectangle/Localizable.xcstrings | 122 ++++++++++++++++---------------- Rectangle/WindowAction.swift | 4 +- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 4554e80b2..d4c4e9eae 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -15350,6 +15350,7 @@ }, "Larger" : { + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -17135,181 +17136,181 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "اجعله أكبر" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fer més gran" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fer més gran" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zvětšit" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Vergrößern" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Make Larger" + "value" : "Larger" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Hacer más grande" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Hacer más grande" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Agrandir la taille" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Buat Lebih Luas" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Ingrandisci" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "拡大" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "크게" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Padidinti" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Gjør større" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Groter maken" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Gjer større" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Powiększ" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Aumentar" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Aumentar o tamanho" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Mărește" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Увеличить" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zväčšiť" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Gör större" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Büyüt" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Збільшити" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tăng kích thước" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "放大" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "放大" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "放大" } } @@ -17320,181 +17321,181 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "اجعله اصغر" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fer més petit" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fer més petit" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zmenšit" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Verkleinern" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Make Smaller" + "value" : "Smaller" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Hacer más pequeño" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Hacer más pequeño" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Réduire la taille" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Buat Lebih Kecil" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Rimpicciolisci" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "縮小" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "작게" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Sumažinti" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Gjør mindre" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Maak kleiner" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Gjer mindre" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zmniejsz" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Diminuir" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tornar mais pequeno" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Micșorează" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Уменьшить" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zmenšiť" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Gör mindre" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Küçült" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Зменшити" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Giảm kích thước" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "缩小" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "縮小" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "縮小" } } @@ -27175,6 +27176,7 @@ } }, "Smaller" : { + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index 41b690976..8845f31e8 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -383,9 +383,9 @@ enum WindowAction: Int, Codable { case .nextDisplay: String(localized: "Next Display") case .larger: - String(localized: "Larger") + String(localized: "Make Larger") case .smaller: - String(localized: "Smaller") + String(localized: "Make Smaller") case .bottomHalf: String(localized: "Bottom") case .topHalf: From 2be6c353e3662d438a118d644a4e04b8ffd56583 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:57:17 -0400 Subject: [PATCH 72/79] Remove unused strings --- Rectangle/Localizable.xcstrings | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index d4c4e9eae..83068964a 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -15348,17 +15348,6 @@ }, "Landscape Snap Areas" : { - }, - "Larger" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Larger" - } - } - } }, "Larger Width" : { "localizations" : { @@ -27175,17 +27164,6 @@ } } }, - "Smaller" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smaller" - } - } - } - }, "Smaller Width" : { "localizations" : { "en" : { From b80cae9bf4f3abbad4b85f948138fa24e27e2e1a Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 11:59:05 -0400 Subject: [PATCH 73/79] Remove vertical thirds from menu --- Rectangle/WindowAction.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index 8845f31e8..6e6603cc6 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -205,7 +205,7 @@ enum WindowAction: Int, Codable { var excludedFromMenu: Bool { switch self { - case .smallerWidth, .largerWidth: return true + case .smallerWidth, .largerWidth, .topVerticalThird, .middleVerticalThird, .bottomVerticalThird, .topVerticalTwoThirds, .bottomVerticalTwoThirds: return true default: return false } } From 4e254a4c7d91deea9a995505e3108d70bf67eb62 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 12:06:52 -0400 Subject: [PATCH 74/79] Remove unnecessary files --- SWIFTUI_CONVERSION_PLAN.md | 60 -------------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 SWIFTUI_CONVERSION_PLAN.md diff --git a/SWIFTUI_CONVERSION_PLAN.md b/SWIFTUI_CONVERSION_PLAN.md deleted file mode 100644 index e0e1b26f6..000000000 --- a/SWIFTUI_CONVERSION_PLAN.md +++ /dev/null @@ -1,60 +0,0 @@ -# Plan for Converting SettingsViewController to SwiftUI - -This document outlines the steps and structure for migrating the current `SettingsViewController` (AppKit) to a modern SwiftUI implementation. - -## Goals -- Replace all checkboxes with SwiftUI `Toggle` components. -- Group settings into logical `Section` elements instead of using horizontal separators. -- Maintain existing functionality by binding directly to the underlying `Defaults` model via a ViewModel. -- Implement responsive layouts that follow macOS design guidelines. - -## Proposed Data Model: `SettingsViewModel` -A new `@ObservableObject` or `@Observable` class will act as the mediator between SwiftUI and the current `Defaults` system. It will include: -- `@Published` properties for all setting values (e.g., `launchOnLogin`, `gapSize`). -- Bindings that update `Defaults` whenever a value is changed by the user. -- Logic migrated from `@IBAction` methods to handle side effects (e.g., refreshing visibility, posting notifications). - -## UI Structure (SwiftUI Form) - -### 1. General Section -- **Launch on login**: `Toggle` -- **Subsequent execution mode**: `Picker` -- **Allow any shortcut**: `Toggle` -- **Check for updates automatically**: `Toggle` - -### 2. Gap Section -- **Gap size**: `Slider` with a label indicating current value in pixels. -- **Skip gap top edge**: `Toggle` (visible only when gap size > 0). - -### 3. Window & Display Section -- **Move cursor across displays**: `Toggle` -- **Use cursor screen detection**: `Toggle` (visible only if enabled by system/defaults). -- **Double click title bar**: `Picker` or `Menu` for different window actions. -- **Treat multiple displays as one**: `Toggle` with description text underneath. -- **Green stoplight button maximizes instead of Full Screen**: `Toggle` with description text underneath. -- **Preserve maximize state when moving across displays**: `Toggle`. - -### 4. Stage Section (Conditional) -*Only visible if `StageUtil.stageCapable` is true.* -- **Stage size**: `Slider` with a label indicating current value in pixels. - -### 5. Cycle Sizes Section -- **Cycle sizes selection**: A horizontal collection of `Toggles` for each available `CycleSize`. -- **Cyclic corner shortcuts expand**: `Picker` (Segmented style) for Horizontal/Vertical axes. -- **Resize adjacent windows when cycling side or corner shortcuts**: `Toggle`. - -### 6. Todo Section -*Visible only if "Todo mode" is enabled.* -- **Todo Mode Toggle**: Master toggle for the section. -- **Sidebar width**: `TextField` + `Picker` for units (px, etc.). -- **Sidebar side**: `Picker` for position (left/right). -- *Note: MASShortcut views will require `NSViewRepresentable` to integrate with SwiftUI.* - -## Implementation Steps -1. [ ] Create `SettingsViewModel.swift`. -2. [ ] Implement `@Published` properties and bindings in the ViewModel. -3. [ ] Create `SettingsView.swift` using a `Form` layout. -4. [ ] Migrate all `@IBAction` logic from `SettingsViewController` into the ViewModel or via SwiftUI actions. -5. [ ] Implement `NSViewRepresentable` for complex components like `MASShortcutView` if needed. -6. [ ] Verify that all settings correctly update `Defaults` and trigger necessary notifications/side effects. -7. [ ] Run linting and type checking to ensure correctness. From 2e541c8097b80d27fbcd80323b44a7fac0f66a07 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 12:07:52 -0400 Subject: [PATCH 75/79] Remove unnecessary files --- Rectangle.xcodeproj/project.pbxproj | 4 -- .../AccessibilityWindowController.swift | 45 ------------------- 2 files changed, 49 deletions(-) delete mode 100644 Rectangle/AccessibilityAuthorization/AccessibilityWindowController.swift diff --git a/Rectangle.xcodeproj/project.pbxproj b/Rectangle.xcodeproj/project.pbxproj index db0d51b55..3392db522 100644 --- a/Rectangle.xcodeproj/project.pbxproj +++ b/Rectangle.xcodeproj/project.pbxproj @@ -71,7 +71,6 @@ 9824701122AF9B7E0037B409 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9824701022AF9B7E0037B409 /* Assets.xcassets */; }; 9824701422AF9B7E0037B409 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9824701222AF9B7E0037B409 /* Main.storyboard */; }; 9824702022AF9B7E0037B409 /* RectangleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824701F22AF9B7E0037B409 /* RectangleTests.swift */; }; - 9824702C22AFA22E0037B409 /* AccessibilityWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824702A22AFA22E0037B409 /* AccessibilityWindowController.swift */; }; 9824702F22AFA2E50037B409 /* AccessibilityAuthorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824702E22AFA2E50037B409 /* AccessibilityAuthorization.swift */; }; 9824703122AFA8470037B409 /* RectangleStatusItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824703022AFA8470037B409 /* RectangleStatusItem.swift */; }; 9824703722B0F3200037B409 /* WindowAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9824703622B0F3200037B409 /* WindowAction.swift */; }; @@ -309,7 +308,6 @@ 9824701B22AF9B7E0037B409 /* RectangleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RectangleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 9824701F22AF9B7E0037B409 /* RectangleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RectangleTests.swift; sourceTree = ""; }; 9824702122AF9B7E0037B409 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9824702A22AFA22E0037B409 /* AccessibilityWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccessibilityWindowController.swift; sourceTree = ""; }; 9824702E22AFA2E50037B409 /* AccessibilityAuthorization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityAuthorization.swift; sourceTree = ""; }; 9824703022AFA8470037B409 /* RectangleStatusItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RectangleStatusItem.swift; sourceTree = ""; }; 9824703622B0F3200037B409 /* WindowAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowAction.swift; sourceTree = ""; }; @@ -636,7 +634,6 @@ isa = PBXGroup; children = ( 9824702E22AFA2E50037B409 /* AccessibilityAuthorization.swift */, - 9824702A22AFA22E0037B409 /* AccessibilityWindowController.swift */, 98ED73AF306558490077BD10 /* AccessibilityView.swift */, ); path = AccessibilityAuthorization; @@ -1081,7 +1078,6 @@ 98ED704C306171650077BD10 /* AppSettingsViewModel.swift in Sources */, 9851A5C3251BEBA300ECF78C /* OrientationAware.swift in Sources */, 98FD7C5F2687BC14009E9DAF /* FirstThreeFourthsCalculation.swift in Sources */, - 9824702C22AFA22E0037B409 /* AccessibilityWindowController.swift in Sources */, 988D066122EB4C7C004EABD7 /* FirstThirdCalculation.swift in Sources */, 983BBD6F253B609D000D223E /* FootprintWindow.swift in Sources */, F1AC0DE000000000000000C2 /* OverlapOffsetGeometry.swift in Sources */, diff --git a/Rectangle/AccessibilityAuthorization/AccessibilityWindowController.swift b/Rectangle/AccessibilityAuthorization/AccessibilityWindowController.swift deleted file mode 100644 index 0c3eaaf6e..000000000 --- a/Rectangle/AccessibilityAuthorization/AccessibilityWindowController.swift +++ /dev/null @@ -1,45 +0,0 @@ -/// AccessibilityWindowController.swift - -import Cocoa - -class AccessibilityWindowController: NSWindowController { - - override func windowDidLoad() { - super.windowDidLoad() - let closeButton = self.window?.standardWindowButton(.closeButton) - closeButton?.target = self - closeButton?.action = #selector(quit) - } - - @objc func quit() { - exit(1) - } - -} - -class AccessibilityViewController: NSViewController { - - @IBOutlet weak var sysPrefsPathField: NSTextField! - @IBOutlet weak var openSysPrefsButton: NSButton! - @IBOutlet weak var padlockField: NSTextField! - - override func viewDidLoad() { - super.viewDidLoad() - if #available(macOS 27, *) { - sysPrefsPathField.stringValue = NSLocalizedString( - "Go to System Settings → Privacy & Security → Device Control and Data Access", tableName: "Main", value: "", comment: "") - } else { - sysPrefsPathField.stringValue = NSLocalizedString( - "Go to System Settings → Privacy & Security → Accessibility", tableName: "Main", value: "", comment: "") - } - openSysPrefsButton.title = NSLocalizedString( - "Open System Settings", tableName: "Main", value: "", comment: "") - padlockField.isHidden = true - sysPrefsPathField.preferredMaxLayoutWidth = 250 - sysPrefsPathField.maximumNumberOfLines = 0 - } - - @IBAction func openSystemPrefs(_ sender: Any) { - NSWorkspace.shared.open(URL(string:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility")!) - } -} From 60c12786b7033bc718d92f50c886026b50f3d3fb Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 12:40:34 -0400 Subject: [PATCH 76/79] Remove localization testing scheme --- .../xcschemes/Rectangle Localize.xcscheme | 88 ------------------- 1 file changed, 88 deletions(-) delete mode 100644 Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme diff --git a/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme b/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme deleted file mode 100644 index 600652489..000000000 --- a/Rectangle.xcodeproj/xcshareddata/xcschemes/Rectangle Localize.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From a4393021d16ccb724cd542ff4c9ba6df7eaa834d Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 12:46:59 -0400 Subject: [PATCH 77/79] Minor localization and app delegate changes --- Rectangle/AppDelegate.swift | 8 +- Rectangle/Localizable.xcstrings | 296 ++++++++++++++--------------- Rectangle/mul.lproj/Main.xcstrings | 3 + 3 files changed, 153 insertions(+), 154 deletions(-) diff --git a/Rectangle/AppDelegate.swift b/Rectangle/AppDelegate.swift index 594d87441..2d35efadb 100644 --- a/Rectangle/AppDelegate.swift +++ b/Rectangle/AppDelegate.swift @@ -28,7 +28,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { private var titleBarManager: TitleBarManager! private var greenButtonManager: GreenButtonManager! - private var prefsWindowController: NSWindowController? + private var settingsWindowController: NSWindowController? private var prevActiveAppObservation: NSKeyValueObservation? private var prevActiveApp: NSRunningApplication? @@ -253,16 +253,12 @@ class AppDelegate: NSObject, NSApplicationDelegate { return true } - var settingsWindowController: NSWindowController? @IBAction func openPreferences(_ sender: Any) { if settingsWindowController == nil { -// prefsWindowController = SettingsWindowController() -// prefsWindowController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "PrefsWindowController") as? NSWindowController settingsWindowController = SettingsWindowController() } - settingsWindowController?.showWindow(self) NSApp.activate(ignoringOtherApps: true) - prefsWindowController?.showWindow(self) + settingsWindowController?.showWindow(self) } @IBAction func showAbout(_ sender: Any) { diff --git a/Rectangle/Localizable.xcstrings b/Rectangle/Localizable.xcstrings index 83068964a..d82ac3d86 100644 --- a/Rectangle/Localizable.xcstrings +++ b/Rectangle/Localizable.xcstrings @@ -7184,18 +7184,18 @@ "en" : { "stringUnit" : { "state" : "translated", - "value" : "cycle positions on quadrants, cycle sizes on side" + "value" : "Cycle positions on quadrants, cycle sizes on side" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "1/4 동작시 위치 순환, 절반 동작시 창 크기 순환" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "vị trí chu kỳ trên góc phần tư, kích thước chu kỳ trên một nửa" } } @@ -7206,151 +7206,151 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "دورة ½ و ⅔ و على نصف الإجراءات" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cicle ½, ⅔, i ⅓ a mitges accions" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cicle ½, ⅔, i ⅓ a mitges accions" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "změnit šířku oken na ½, ⅔, a ⅓ u polovičních akcí" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wechsle zwischen verschiedenen Größen bei Aktionen für halbe Bildschirme" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "cycle sizes on side actions" + "value" : "Cycle sizes on side actions" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "bucle de ½, ⅔, y ⅓ en acciones de mitad" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "bucle de ½, ⅔, y ⅓ en acciones de mitad" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "alterner entre ½, ⅔ et ⅓ lors des actions de moitié d’écran" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "siklus ½, ⅔ dan ⅓ pada setengah tindakan" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "scorri tra ½, ⅔, e ⅓ con le azioni di mezzi" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "サイズを半分にするのを繰り返す" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "절반 동작시 창 크기 순환" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "perjungti tarp ½, ⅔ ir ⅓ pusėms" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "bytt mellom størrelser for halv-handlinger" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "byt mellom storleikar for halv-handlingar" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "переключаться между ½, ⅔ и ⅓ для половин" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "meniť veľkosť pri použití skratiek polovice na:" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "växla mellan storlek på halva åtgärder" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "yarım seçenekleri yinelenirse ½, ⅔, ve ⅓ oranlarında geçiş yap" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "перемикати ½, ⅔, and ⅓ при діях з половиною" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "thay đổi tuần hoàn ½, ⅔, và ⅓ kích thước" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "半屏操作循环½、⅔、⅓" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "一半動作循環½、⅔和⅓" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "一半動作循環½、⅔和⅓" } } @@ -7361,181 +7361,181 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "دورة من خلال شاشات العرض" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cicle per les pantalles" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cicle per les pantalles" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "přesouvat po displejích" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Durch Bildschirme wechseln" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "cycle through displays" + "value" : "Cycle through displays" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "bucle a través de las pantallas" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "bucle a través de las pantallas" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "parcourir les moniteurs" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "siklus melalui tampilan" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "scorri tra schermi" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ウインドウを表示するディスプレイを変更" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "디스플레이 순환" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "perjungineti tarp ekranų" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "gå gjennom skjermene" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cycle through displays" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "gå gjennom skjermane" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cycle through displays" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cycle through displays" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "cycle through displays" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "navigare ciclică între ecrane" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "переключаться между дисплеями" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "prepínať medzi displejmi" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "bläddra mellan skärmarna" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ekranlar arasında dolaş" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "циклічно перебирати екрани" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Di chuyển tuần hoàn qua các màn hình" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "循环显示器" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "循環顯示器" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "循環顯示器" } } @@ -8469,181 +8469,181 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "لا تفعل شيئا" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "no fer res" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "no fer res" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "nic nedělat" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nichts tun" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "do nothing" + "value" : "Do nothing" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "no hacer nada" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "no hacer nada" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ne rien faire" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "tidak melakukan apapun" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "nessuna azione" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "何もしない" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "아무것도 하지 않음" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "nieko nedaryti" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "gjør ingenting" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "do nothing" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "gjer ingenting" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "do nothing" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "do nothing" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "do nothing" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "nu face nimic" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ничего не делать" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "nič nerobiť" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "gör ingenting" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "hiçbir şey yapma" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "не робити нічого" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Không làm gì" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "不执行任何操作" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "不執行任何動作" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "不執行任何操作" } } @@ -18945,181 +18945,181 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "انتقل إلى الشاشة المجاورة على اليسار أو اليمين" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mou a la pantalla adjacent a l'esquerra o a la dreta" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mou a la pantalla adjacent a l'esquerra o a la dreta" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "přesunout na sousedící displej vlevo nebo vpravo" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zum benachbarten Bildschirm auf der linken oder rechten Seite bewegen" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "move to adjacent display on left or right" + "value" : "Move to adjacent display on left or right" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mover a la pantalla adyacente a la izquierda o a la derecha" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mover a la pantalla adyacente a la izquierda o a la derecha" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "déplacer vers le moniteur à gauche ou à droite" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "pindah ke tampilan yang berdekatan di kiri atau kanan" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "sposta nello schermo adiacente a sinistra o a destra" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ウインドウを左右のディスプレイに順次移動" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "인접한 왼쪽 또는 오른쪽 디스플레이로 이동" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "pereiti prie gretimo ekrano kairėje arba dešinėje" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "flytt til nærmeste skjerm til venstre eller høgre" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent display on left or right" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "flytt til nærmaste skjerm til venstre eller høgre" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent display on left or right" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent display on left or right" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent display on left or right" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mută în ecranul adiacent din stânga sau din dreapta" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "перейти к соседнему дисплею слева или справа" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "presunúť na susediaci displej vľavo alebo vpravo" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "flytta till intilliggande skärm till vänster eller höger" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "pencereyi sağdaki veya soldaki bitişik ekrana taşı" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "перемістити на сусідній екран зліва або справа" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Di chuyển đến cạnh trái hoặc phải" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "移动到左侧或右侧的相邻显示器" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "移至左側或右側的相鄰顯示器" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "移到左側或右側的相鄰顯示器" } } @@ -19130,181 +19130,181 @@ "localizations" : { "ar" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "الانتقال إلى الحجم المجاور على اليسار / اليمين ، أو حجم الدورة على النصف" } }, "ca" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mou al costat adjacent a l'esquerra/dreta, o la mida del cicle a la meitat" } }, "ca-ES" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mou al costat adjacent a l'esquerra/dreta, o la mida del cicle a la meitat" } }, "cs" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "přesune na následující levou/pravou pozici" } }, "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zum benachbarten Bildschirm auf der linken/rechten Seite bewegen oder Größe auf die Hälfte einstellen" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "move to adjacent on left/right, or cycle size on side" + "value" : "Move to adjacent on left/right, or cycle size on side" } }, "es" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mover a adyacente en izquierda/derecha, o crear bucle de tamaño en mitades" } }, "es-419" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mover a adyacente en izquierda/derecha, o crear bucle de tamaño en mitades" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "déplacer vers adjacent gauche/droite, ou scinder en deux" } }, "id" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "pindah ke yang berdekatan di kiri/kanan, atau ukuran siklus di setengah" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "sposta nell'adiacente a sinistra/destra, o scorri dimensioni con azioni di mezzi" } }, "ja" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ウインドウを左右いずれかのディスプレイに移動させるか、サイズを半分にするのを繰り返す" } }, "ko" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "인접한 왼쪽 또는 오른쪽 디스플레이로 이동, 절반 동작시 창 크기 순환" } }, "lt" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "pereiti prie gretimo ekrano kairėje/dešinėje arba keisti pusės dydį" } }, "nb" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "flytt til nærmeste til venstre/høgre, eller gå gjennom størrelsene på halvdeler" } }, "nl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent on left/right, or cycle size on side" } }, "nn" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "flytt til nærmaste til venstre/høgre, eller gå gjennom storleikane på halvdelar" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent on left/right, or cycle size on side" } }, "pt-BR" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent on left/right, or cycle size on side" } }, "pt-PT" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "move to adjacent on left/right, or cycle size on side" } }, "ro" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "mută pe partea stângă/dreaptă adiacentă, sau permută între jumătăți" } }, "ru" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "перейти к соседнему дисплею слева/справа или переключать размер половин" } }, "sk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "presunúť na vedľajšiu ľavú/pravú pozíciu alebo striedať polovice" } }, "sv-SE" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "flytta till intilliggande till vänster/höger, eller växla storlek på hälften" } }, "tr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "sağa/sola taşı veya yarım boyutlarda geçiş yap" } }, "uk" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "перемістити на сусідній лівий/правий, або циклічно змінювати розмір на половину" } }, "vi" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Di chuyển đến cạnh trái/phải, hoặc thay đổi tuần hoàn một nửa kích thước" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "左/右移动到相邻,或半屏循环大小" } }, "zh-Hant" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "左/右移至相鄰,或一半循環大小" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "左/右移到相鄰,或一半循環大小" } } diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index 8d401ddef..f39f4caf1 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -20224,6 +20224,7 @@ } }, "Go to System Settings → Privacy & Security → Accessibility" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -20403,6 +20404,7 @@ }, "Go to System Settings → Privacy & Security → Device Control and Data Access" : { "comment" : "macOS 27 and later permission pane name.", + "extractionState" : "stale", "localizations" : { "en" : { "stringUnit" : { @@ -33437,6 +33439,7 @@ } }, "Open System Settings" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { From 10ab817003f85940613e87a8d1ae920e34b03ae9 Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 12:51:38 -0400 Subject: [PATCH 78/79] Fix over eager 8th replacements --- Rectangle/WindowAction.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Rectangle/WindowAction.swift b/Rectangle/WindowAction.swift index 6e6603cc6..164de4c1c 100644 --- a/Rectangle/WindowAction.swift +++ b/Rectangle/WindowAction.swift @@ -268,14 +268,14 @@ enum WindowAction: Int, Codable { case .topRightThird: return "topRightThird" case .bottomLeftThird: return "bottomLeftThird" case .bottomRightThird: return "bottomRightThird" - case .topLeftEighth: return "topLeft8th" - case .topCenterLeftEighth: return "topCenterLeft8th" - case .topCenterRightEighth: return "topCenterRight8th" - case .topRightEighth: return "topRight8th" - case .bottomLeftEighth: return "bottomLeft8th" - case .bottomCenterLeftEighth: return "bottomCenterLeft8th" - case .bottomCenterRightEighth: return "bottomCenterRight8th" - case .bottomRightEighth: return "bottomRight8th" + case .topLeftEighth: return "topLeftEighth" + case .topCenterLeftEighth: return "topCenterLeftEighth" + case .topCenterRightEighth: return "topCenterRightEighth" + case .topRightEighth: return "topRightEighth" + case .bottomLeftEighth: return "bottomLeftEighth" + case .bottomCenterLeftEighth: return "bottomCenterLeftEighth" + case .bottomCenterRightEighth: return "bottomCenterRightEighth" + case .bottomRightEighth: return "bottomRightEighth" case .doubleHeightUp: return "doubleHeightUp" case .doubleHeightDown: return "doubleHeightDown" case .doubleWidthLeft: return "doubleWidthLeft" From 086cdebaabc4974fb87fbf88c6ab7adf4e17ee4b Mon Sep 17 00:00:00 2001 From: Ryan Hanson Date: Thu, 24 Sep 2026 12:55:58 -0400 Subject: [PATCH 79/79] Remove stale xcstrings --- Rectangle/mul.lproj/Main.xcstrings | 37476 ++++----------------------- 1 file changed, 5701 insertions(+), 31775 deletions(-) diff --git a/Rectangle/mul.lproj/Main.xcstrings b/Rectangle/mul.lproj/Main.xcstrings index f39f4caf1..7a8b6c29e 100644 --- a/Rectangle/mul.lproj/Main.xcstrings +++ b/Rectangle/mul.lproj/Main.xcstrings @@ -1,3788 +1,3440 @@ { "sourceLanguage" : "en", "strings" : { - "0Ak-33-SM7.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Right\"; ObjectID = \"0Ak-33-SM7\";", - "extractionState" : "stale", + "1b7-l0-nxx.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Find\"; ObjectID = \"1b7-l0-nxx\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اعلى اليمين" + "value" : "يجد" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "A dalt a la dreta" + "value" : "Cerca" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Superior dreta" + "value" : "Cerca" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Vpravo nahoře" + "value" : "Hledat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Oben rechts" + "value" : "Suchen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Top Right" + "value" : "Find" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Arriba a la derecha" + "value" : "Encontrar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Arriba a la derecha" + "value" : "Encontrar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "En haut à droite" + "value" : "Rechercher" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kanan Atas" + "value" : "Temukan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "In alto a destra" + "value" : "Trova" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "右上" + "value" : "検索" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "오른쪽 위" + "value" : "찾기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Dešinėje viršuje" + "value" : "Ieškoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Øvre høgre" + "value" : "Finn" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rechtsboven" + "value" : "Zoeken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Øvre høgre" + "value" : "Finn" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Prawy górny róg" + "value" : "Znajdź" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Em cima, à direita" + "value" : "Buscar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Em cima, à direita" + "value" : "Encontrar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Dreapta Sus" + "value" : "Căutare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Справа вверху" + "value" : "Найти" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vpravo hore" + "value" : "Nájsť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Övre högra" + "value" : "Sök" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sağ üst" + "value" : "Bul" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Верхній правий кут" + "value" : "Знайти" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Góc trên bên phải" + "value" : "Tìm kiếm" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "右上" + "value" : "查找" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "右上" + "value" : "尋找" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "右上" + "value" : "尋找" } } } }, - "0eh-6G-rMp.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"0 px\"; ObjectID = \"0eh-6G-rMp\";", - "extractionState" : "stale", + "1tx-W0-xDw.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Lower\"; ObjectID = \"1tx-W0-xDw\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "أدنى" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Més baix" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 px" + "value" : "Més baix" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "0 px" + "value" : "Tiefer" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Más bajo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Más bajo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Abaisser" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Lebih Rendah" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Abbassa" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "下付き" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "아래로" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Apačioje" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Nedre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Lager" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Nedre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Niżej" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "Inferior" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 px" + "value" : "Inferior" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 px" + "value" : "Нижнее" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 px" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 пкс" + "value" : "Nedre" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" + "value" : "1tx-W0-xDw.title" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "0 px" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 px" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "0 px" + "value" : "变为小写" } } } }, - "1b7-l0-nxx.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Find\"; ObjectID = \"1b7-l0-nxx\";", - "extractionState" : "extracted_with_value", + "1UK-8n-QPP.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Customize Toolbar…\"; ObjectID = \"1UK-8n-QPP\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يجد" + "value" : "تخصيص شريط الأدوات ..." } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Cerca" + "value" : "Personalitzar la barra d'eines…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Cerca" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hledat" + "value" : "Personalitzar la barra d'eines…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Suchen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Find" + "value" : "Symbolleiste anpassen…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Encontrar" + "value" : "Personalizar la barra de herramientas…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Encontrar" + "value" : "Personalizar la barra de herramientas…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rechercher" + "value" : "Personnaliser la barre d'outils…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Temukan" + "value" : "Sesuaikan Bilah Alat…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Trova" + "value" : "Personalizza la barra strumenti…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "検索" + "value" : "ツールバーをカスタマイズ…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "찾기" + "value" : "도구 막대 사용자화…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ieškoti" + "value" : "Įrankių juostos nustatymai…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Finn" + "value" : "Tilpass verktøyfeltet…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Zoeken" + "value" : "Werkbalk aanpassen…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Finn" + "value" : "Tilpass verktøyfeltet…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Znajdź" + "value" : "Dostosuj pasek narzędzi…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Buscar" + "value" : "Personalizar barra de ferramentas…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Encontrar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Căutare" + "value" : "Personalizar Toolbar…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Найти" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nájsť" + "value" : "Настройка Панели инструментов…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Sök" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bul" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Знайти" + "value" : "Anpassa verktygsfältet…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tìm kiếm" + "value" : "Tùy chỉnh thanh công cụ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "查找" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找" + "value" : "自定义工具栏..." } } } }, - "1Rc-Od-eP5.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Down\"; ObjectID = \"1Rc-Od-eP5\";", - "extractionState" : "stale", + "1Xt-HY-uBw.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Rectangle\"; ObjectID = \"1Xt-HY-uBw\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تحرك لأسفل" + "value" : "مستطيل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Moure fins a baix" + "value" : "Rectangle" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Moure fins a baix" + "value" : "Rectangle" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Přesunout dolů" + "value" : "Rectangle" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nach unten bewegen" + "value" : "Rectangle" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Move Down" + "value" : "Rectangle" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mover hasta abajo" + "value" : "Rectangle" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mover hasta abajo" + "value" : "Rectangle" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacer en bas" + "value" : "Rectangle" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Turunkan" + "value" : "Rectangle" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sposta giù" + "value" : "Rectangle" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "下に移動" + "value" : "Rectangle" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "아래로 이동" + "value" : "Rectangle" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Žemyn" + "value" : "Rectangle" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Flytt ned" + "value" : "Rectangle" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Naar beneden" + "value" : "Rectangle" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Flytt ned" + "value" : "Rectangle" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przesuń w dół" + "value" : "Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mover para baixo" + "value" : "Rectangle" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Mover para baixo" + "value" : "Rectangle" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Mută Jos" + "value" : "Rectangle" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вниз" + "value" : "Rectangle" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Presunúť dole" + "value" : "Rectangle" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Flytta ner" + "value" : "Rectangle" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Aşağı kenar" + "value" : "Rectangle" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Перемістити вниз" + "value" : "Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đi xuống" + "value" : "Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "向下移动" + "value" : "Rectangle" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "下移" + "value" : "Rectangle" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "下移" + "value" : "Rectangle" } } } }, - "1tx-W0-xDw.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Lower\"; ObjectID = \"1tx-W0-xDw\";", + "01Z-t3-cBm.title" : { + "comment" : "Class = \"NSTextFieldCell\"; title = \"If you repeat move or side actions, the window will move to the next display instead of 1/2, 2/3, and 1/3 size.\"; ObjectID = \"01Z-t3-cBm\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أدنى" + "value" : "إذا كررت إجراء نقل أو نصف ، فستنتقل النافذة إلى الشاشة التالية بدلاً من حجم 1/2 و 2/3 و 1/3" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Més baix" + "value" : "Si repeteixes accions de meitat o desplaçar, la finestra es mourà a la següent pantalla en lloc d'ajustar-se a 1/2, 2/3 o 1/3 de la mida." } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Més baix" + "value" : "Si repeteixes accions de meitat o desplaçar, la finestra es mourà a la següent pantalla en lloc d'ajustar-se a 1/2, 2/3 o 1/3 de la mida." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Tiefer" + "value" : "Wechsle bei wiederholten Links- oder Rechts-Befehlen zum nächsten Monitor anstatt zwischen den Fenstergrößen 1/2, 2/3, und 1/3." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If you repeat move or side actions, the window will move to the next display instead of 1/2, 2/3, and 1/3 size." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Más bajo" + "value" : "Si repites acciones de mitad o desplazar, la ventana se moverá a la siguiente pantalla en lugar de ajustarse a 1/2, 2/3 o 1/3 del tamaño." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Más bajo" + "value" : "Si repites acciones de mitad o desplazar, la ventana se moverá a la siguiente pantalla en lugar de ajustarse a 1/2, 2/3 o 1/3 del tamaño." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Abaisser" + "value" : "En répétant une action de déplacement ou de moitié d'écran, la fenêtre sera déplacée sur le moniteur suivant au lieu d'alterner les tailles 1/2, 2/3, et 1/3." } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Lebih Rendah" + "value" : "Jika Anda mengulangi gerakan atau tindakan setengah, jendela akan berpindah ke tampilan berikutnya, bukan ukuran 1/2, 2/3, dan 1/3." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Abbassa" + "value" : "Se ripeti lo spostamento o i mezzi spostamenti, la finestra si sposterà sullo schermo successivo invece che ridimensionarsi a 1/2, 2/3 o 1/3." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "下付き" + "value" : "ウインドウを移動する動作や半分のサイズに変更する動作を繰り返すと、ウインドウをサイズ変更するのではなく、次のディスプレイに移動します。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "아래로" + "value" : "이동하기 또는 절반 동작을 반복하면 창이 1/2, 2/3, 혹은 1/3 크기가 되는 대신, 다음 디스플레이로 이동합니다." } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Apačioje" + "value" : "Jei pakartosite judėjimo ar pusės veiksmus, langas bus perkeltas į kitą ekraną, o ne į 1/2, 2/3 ir 1/3 dydį." } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nedre" + "value" : "Om du gjentar flytt- eller halv-handlinger, vil vinduet flyttes til neste skjerm i stedet for 1/2-, 2/3- og 1/3-størrelser." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lager" + "value" : "Dit geldt alleen voor verplaatsingen of halve acties. De helft van de acties zal geen 2/3 & 1/3 gedrag uitvoeren indien ingeschakeld." } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Nedre" + "value" : "Om du gjentek flytt- eller halv-handlingar, vil vindauget bli flytta til neste skjerm i staden for 1/2-, 2/3- og 1/3-storleik." } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Niżej" + "value" : "Jeżeli powtórzysz akcję przenoszącą okno, bądź zmieniającą jego rozmiar, okno przeniesie się do następnego pulpitu zamiast zmniejszać się do 1/2, 2/3 bądź 1/3 swego rozmiaru." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Inferior" + "value" : "Repetindo os comandos de movimento e divisão, a janela será movida para a próxima tela, em vez de diminuir para 1/2, 2/3 ou 1/3 do tamanho" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Inferior" + "value" : "Se repetir as ações de mover ou de metade, a janela passa para o ecrã seguinte, em vez de mudar de tamanho para 1/2, 2/3, and 1/3." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Нижнее" + "value" : "При повторе перемещения или изменения размеров до трети или половины окна оно будет перемещено на следующий экран вместо изменения размеров." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pri opakovaní presunutia alebo skratiek pre polovice sa okno presunie na ďalší displej namiesto ½, ⅔ a ⅓ veľkosti." } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Nedre" + "value" : "Om du upprepar drag eller halva åtgärder, kommer fönstret att flyttas till nästa skärm i stället för 1/2-, 2/3- och 1/3-storlek." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1tx-W0-xDw.title" + "value" : "Nếu bạn lặp lại thao tác di chuyển hoặc một nửa, cửa sổ sẽ chuyển sang màn hình hiển thị tiếp theo thay vì kích thước 1/2, 2/3 và 1/3." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "变为小写" + "value" : "如果你重复移动或进行一半的移动操作,窗口将移动到下一个显示器,而不是 1 / 2、2 / 3 或 1 / 3 大小。" } } } }, - "1ui-PL-TkR.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Snap windows by dragging\"; ObjectID = \"1ui-PL-TkR\";", - "extractionState" : "stale", + "2h7-ER-AoG.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Raise\"; ObjectID = \"2h7-ER-AoG\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "التقط النوافذ عن طريق السحب" + "value" : "يرفع" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ajusta les finestres arrossegant" + "value" : "Eleva" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ajusta les finestres arrossegant" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Přichytávat okna tažením" + "value" : "Eleva" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fenster zum Anordnen an Bildschirmrand ziehen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Snap windows by dragging" + "value" : "Höher" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ajustar ventanas arrastrando" + "value" : "Elevación" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ajustar ventanas arrastrando" + "value" : "Elevación" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Redimensionner les fenêtres en les faisant glisser" + "value" : "Lever" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jepret jendela dengan menyeret" + "value" : "Angkat" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ridimensiona le finestre trascinandole" + "value" : "Alza" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ドラッグでウインドウをスナップ" + "value" : "上げる" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "드래그하여 창 배치" + "value" : "올리기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Langų užrakinimas perkeliant" + "value" : "Pakelti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Fest vinduet ved å dra" + "value" : "Løft" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Snap windows door te slepen" + "value" : "Verhogen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Fest vindaguet ved å dra" + "value" : "Løft" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Złap okna poprzez przeciąganie" + "value" : "Podnieś" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Redimensionar janelas arrastando" + "value" : "Levantar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Encaixar janelas arrastando" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deschide fereastra prin glisare" + "value" : "Levantar" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Защелкивание окон путем перетаскивания" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prichytávať okná ťahaním" + "value" : "Поднять" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Fäst fönster genom att dra" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pencereleri sürükleyerek tuttur" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Прив'язувати вікна перетягуванням" + "value" : "Höja" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Kéo để bố trí cửa sổ" + "value" : "Đưa lên" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "拖移以吸附窗口" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "拖移來貼齊視窗" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "拖移以貼齊視窗" + "value" : "升高" } } } }, - "1UK-8n-QPP.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Customize Toolbar…\"; ObjectID = \"1UK-8n-QPP\";", + "2oI-Rn-ZJC.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Transformations\"; ObjectID = \"2oI-Rn-ZJC\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تخصيص شريط الأدوات ..." + "value" : "التحولات" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Personalitzar la barra d'eines…" + "value" : "Transformacions" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Personalitzar la barra d'eines…" + "value" : "Transformacions" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Symbolleiste anpassen…" + "value" : "Transformationen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Personalizar la barra de herramientas…" + "value" : "Transformaciones" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Personalizar la barra de herramientas…" + "value" : "Transformaciones" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Personnaliser la barre d'outils…" + "value" : "Transformations" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sesuaikan Bilah Alat…" + "value" : "Transformasi" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Personalizza la barra strumenti…" + "value" : "Trasformazioni" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ツールバーをカスタマイズ…" + "value" : "変換" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "도구 막대 사용자화…" + "value" : "변형" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Įrankių juostos nustatymai…" + "value" : "Transformacijos" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tilpass verktøyfeltet…" + "value" : "Transformasjoner" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Werkbalk aanpassen…" + "value" : "Transformaties" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tilpass verktøyfeltet…" + "value" : "Transformasjonar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Dostosuj pasek narzędzi…" + "value" : "Zmień" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Personalizar barra de ferramentas…" + "value" : "Transformações" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Personalizar Toolbar…" + "value" : "Transformações" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Настройка Панели инструментов…" + "value" : "Преобразования" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Anpassa verktygsfältet…" + "value" : "Transformationer" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tùy chỉnh thanh công cụ" + "value" : "Chuyển đổi" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自定义工具栏..." + "value" : "转换" } } } }, - "1Xt-HY-uBw.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Rectangle\"; ObjectID = \"1Xt-HY-uBw\";", - "extractionState" : "extracted_with_value", + "3IN-sU-3Bg.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Spelling\"; ObjectID = \"3IN-sU-3Bg\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مستطيل" + "value" : "الإملائية" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografia" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografia" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Rectangle" + "value" : "Rechtschreibung" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografía" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografía" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Orthographe" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Ejaan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografia" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "スペル" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "맞춤법" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Rašybos tikrinimas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Stavekontroll" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Spelling" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Stavekontroll" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Pisownia" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografia" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" + "value" : "Ortografia" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" + "value" : "Правописание" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" + "value" : "Stavning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Đọc chính tả" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle" + "value" : "拼写" } } } }, - "01Z-t3-cBm.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"If you repeat move or side actions, the window will move to the next display instead of 1/2, 2/3, and 1/3 size.\"; ObjectID = \"01Z-t3-cBm\";", + "3Om-Ey-2VK.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"3Om-Ey-2VK\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إذا كررت إجراء نقل أو نصف ، فستنتقل النافذة إلى الشاشة التالية بدلاً من حجم 1/2 و 2/3 و 1/3" + "value" : "استخدم الافتراضي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Si repeteixes accions de meitat o desplaçar, la finestra es mourà a la següent pantalla en lloc d'ajustar-se a 1/2, 2/3 o 1/3 de la mida." + "value" : "Ús per defecte" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Si repeteixes accions de meitat o desplaçar, la finestra es mourà a la següent pantalla en lloc d'ajustar-se a 1/2, 2/3 o 1/3 de la mida." + "value" : "Ús per defecte" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wechsle bei wiederholten Links- oder Rechts-Befehlen zum nächsten Monitor anstatt zwischen den Fenstergrößen 1/2, 2/3, und 1/3." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "If you repeat move or side actions, the window will move to the next display instead of 1/2, 2/3, and 1/3 size." + "value" : "Standard verwenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Si repites acciones de mitad o desplazar, la ventana se moverá a la siguiente pantalla en lugar de ajustarse a 1/2, 2/3 o 1/3 del tamaño." + "value" : "Uso Predeterminado" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Si repites acciones de mitad o desplazar, la ventana se moverá a la siguiente pantalla en lugar de ajustarse a 1/2, 2/3 o 1/3 del tamaño." + "value" : "Uso Predeterminado" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "En répétant une action de déplacement ou de moitié d'écran, la fenêtre sera déplacée sur le moniteur suivant au lieu d'alterner les tailles 1/2, 2/3, et 1/3." + "value" : "Utiliser la valeur par défaut" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jika Anda mengulangi gerakan atau tindakan setengah, jendela akan berpindah ke tampilan berikutnya, bukan ukuran 1/2, 2/3, dan 1/3." + "value" : "Gunakan Bawaan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Se ripeti lo spostamento o i mezzi spostamenti, la finestra si sposterà sullo schermo successivo invece che ridimensionarsi a 1/2, 2/3 o 1/3." + "value" : "Usa predefinito" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウを移動する動作や半分のサイズに変更する動作を繰り返すと、ウインドウをサイズ変更するのではなく、次のディスプレイに移動します。" + "value" : "デフォルトを使用" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이동하기 또는 절반 동작을 반복하면 창이 1/2, 2/3, 혹은 1/3 크기가 되는 대신, 다음 디스플레이로 이동합니다." + "value" : "기본값 사용" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jei pakartosite judėjimo ar pusės veiksmus, langas bus perkeltas į kitą ekraną, o ne į 1/2, 2/3 ir 1/3 dydį." + "value" : "Naudoti pagal nutylėjimą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Om du gjentar flytt- eller halv-handlinger, vil vinduet flyttes til neste skjerm i stedet for 1/2-, 2/3- og 1/3-størrelser." + "value" : "Bruk standard" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Dit geldt alleen voor verplaatsingen of halve acties. De helft van de acties zal geen 2/3 & 1/3 gedrag uitvoeren indien ingeschakeld." + "value" : "Gebruik standaard" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Om du gjentek flytt- eller halv-handlingar, vil vindauget bli flytta til neste skjerm i staden for 1/2-, 2/3- og 1/3-storleik." + "value" : "Bruk standard" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeżeli powtórzysz akcję przenoszącą okno, bądź zmieniającą jego rozmiar, okno przeniesie się do następnego pulpitu zamiast zmniejszać się do 1/2, 2/3 bądź 1/3 swego rozmiaru." + "value" : "Użyj domyślnych" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Repetindo os comandos de movimento e divisão, a janela será movida para a próxima tela, em vez de diminuir para 1/2, 2/3 ou 1/3 do tamanho" + "value" : "Usar Padrão" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Se repetir as ações de mover ou de metade, a janela passa para o ecrã seguinte, em vez de mudar de tamanho para 1/2, 2/3, and 1/3." + "value" : "Usar Padrão" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "При повторе перемещения или изменения размеров до трети или половины окна оно будет перемещено на следующий экран вместо изменения размеров." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pri opakovaní presunutia alebo skratiek pre polovice sa okno presunie na ďalší displej namiesto ½, ⅔ a ⅓ veľkosti." + "value" : "Использовать по умолчанию" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Om du upprepar drag eller halva åtgärder, kommer fönstret att flyttas till nästa skärm i stället för 1/2-, 2/3- och 1/3-storlek." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nếu bạn lặp lại thao tác di chuyển hoặc một nửa, cửa sổ sẽ chuyển sang màn hình hiển thị tiếp theo thay vì kích thước 1/2, 2/3 và 1/3." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "如果你重复移动或进行一半的移动操作,窗口将移动到下一个显示器,而不是 1 / 2、2 / 3 或 1 / 3 大小。" - } - } - } - }, - "1zK-sf-CSX.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Version\"; ObjectID = \"1zK-sf-CSX\";", - "extractionState" : "stale", - "localizations" : { - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verze" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Version" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Version" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versión" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versión" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Version" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Version" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versione" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "バージョン" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "버전" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Version" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versão" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versão" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Versiune" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verzia" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sürüm" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Версія" + "value" : "Använd standard" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Phiên bản" + "value" : "Sử dụng mặc định" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "版本" + "value" : "使用默认" } } } }, - "2h7-ER-AoG.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Raise\"; ObjectID = \"2h7-ER-AoG\";", + "3rS-ZA-NoH.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Speech\"; ObjectID = \"3rS-ZA-NoH\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يرفع" + "value" : "خطاب" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Eleva" + "value" : "Veu" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Eleva" + "value" : "Veu" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Höher" + "value" : "Sprachausgabe" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Elevación" + "value" : "Voz" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Elevación" + "value" : "Voz" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Lever" + "value" : "Discours" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Angkat" + "value" : "Bicara" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Alza" + "value" : "Voce" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "上げる" + "value" : "スピーチ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "올리기" + "value" : "말하기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pakelti" + "value" : "Kalba" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Løft" + "value" : "Tale" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Verhogen" + "value" : "Spraak" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Løft" + "value" : "Tale" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Podnieś" + "value" : "Mowa" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Levantar" + "value" : "Voz" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Levantar" + "value" : "Fala" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Поднять" + "value" : "Речь" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Höja" + "value" : "Tal" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đưa lên" + "value" : "Đọc" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "升高" + "value" : "语音" } } } }, - "2oI-Rn-ZJC.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Transformations\"; ObjectID = \"2oI-Rn-ZJC\";", - "extractionState" : "manual", + "4EN-yA-p0u.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Find\"; ObjectID = \"4EN-yA-p0u\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "التحولات" + "value" : "يجد" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Transformacions" + "value" : "Cerca" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Transformacions" + "value" : "Cerca" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hledat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Transformationen" + "value" : "Suchen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Find" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Transformaciones" + "value" : "Encontrar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Transformaciones" + "value" : "Encontrar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Transformations" + "value" : "Rechercher" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Transformasi" + "value" : "Temukan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Trasformazioni" + "value" : "Trova" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "変換" + "value" : "検索" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "변형" + "value" : "찾기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Transformacijos" + "value" : "Ieškoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Transformasjoner" + "value" : "Finn" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Transformaties" + "value" : "Zoeken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Transformasjonar" + "value" : "Finn" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zmień" + "value" : "Znajdź" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Transformações" + "value" : "Buscar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Transformações" + "value" : "Encontrar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Căutare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Преобразования" + "value" : "Найти" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nájsť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Transformationer" + "value" : "Sök" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bul" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Знайти" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chuyển đổi" + "value" : "Tìm kiếm" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "转换" + "value" : "查找" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "尋找" } } } }, - "2ue-Mv-5Wh.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"2ue-Mv-5Wh\";", - "extractionState" : "stale", + "4J7-dP-txa.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Enter Full Screen\"; ObjectID = \"4J7-dP-txa\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "أدخل ملء الشاشة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Entrar a pantalla completa" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Entrar a pantalla completa" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Spustit režim celé obrazovky" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Vollbildmodus" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "-" + "value" : "Enter Full Screen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Entrar en pantalla completa" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Entrar en pantalla completa" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Passer en plein écran" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Masuk Layar Penuh" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Attiva modalità a schermo intero" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "フルスクリーンにする" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "전체 화면 시작" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Įveskite visą ekraną" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Åpne helskjerm" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ga naar volledig scherm" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Opne heilskjerm" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Pełny ekran" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Entrar em tela cheia" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Entrar em ecrã completo" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Intră în Ecran Complet" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Перейти в полноэкранный режим" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zobraziť na celej obrazovky" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Öppna helskärm" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Tam Ekrana Geç" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Перейти до повноекранного режиму" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Toàn màn hình" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "进入全屏幕" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "進入全螢幕" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "進入全螢幕" } } } }, - "2XJ-Ca-9di.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Spectacle\"; ObjectID = \"2XJ-Ca-9di\";", - "extractionState" : "stale", + "4sb-4s-VLi.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Quit Rectangle\"; ObjectID = \"4sb-4s-VLi\";", + "extractionState" : "extracted_with_value", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قم بإنهاء المستطيل" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sortir de Rectangle" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sortir de Rectangle" + } + }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Ukončit Rectangle" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Rectangle beenden" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Spectacle" + "value" : "Quit Rectangle" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Spectable" + "value" : "Salir de Rectangle" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Salir de Rectangle" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Quitter Rectangle" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Keluar Rectangle" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Spectable" + "value" : "Esci da Rectangle" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Rectangleを終了" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Rectangle 종료" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Išeiti iš Rectangle" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avslutt Rectangle" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle " + "value" : "Rectangle stoppen" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avslutt Rectangle" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyjdź z Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Fechar Rectangle" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Sair do Rectangle" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Închide Rectangle" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выход из Rectangle" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Ukončiť Rectangle" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Avsluta Rectangle" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Rectangle'dan Çık" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Вийти з Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle" + "value" : "Thoát Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "放大镜" + "value" : "退出 Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "結束 Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "結束Rectangle" } } } }, - "2Zm-fl-PcC.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Repeated commands\"; ObjectID = \"2Zm-fl-PcC\";", - "extractionState" : "stale", + "5kV-Vb-QxS.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"About Rectangle\"; ObjectID = \"5kV-Vb-QxS\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أوامر متكررة" + "value" : "حول المستطيل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ordres repetides" + "value" : "Quant a Rectangle" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ordres repetides" + "value" : "Quant a Rectangle" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Opakované příkazy" + "value" : "O aplikaci Rectangle" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wiederholte Befehle" + "value" : "Über Rectangle" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Repeated commands" + "value" : "About Rectangle" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Comandos repetidos" + "value" : "Acerca de Rectangle" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Comandos repetidos" + "value" : "Acerca de Rectangle" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Commandes répétées" + "value" : "À propos de Rectangle" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Perintah berulang" + "value" : "Tentang Rectangle" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Comandi ripetuti" + "value" : "Informazioni su Rectangle" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "コマンドを繰り返した際の挙動" + "value" : "Rectangleについて" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "커맨드 반복 입력시" + "value" : "Rectangle 정보" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kartojamos komandos" + "value" : "Apie Rectangle" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gjentatte kommandoer" + "value" : "Om Rectangle" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Repeated commands" + "value" : "Over Rectangle" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Gjentekne kommandoar" + "value" : "Om Rectangle" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Repeated commands" + "value" : "O Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Comandos repetidos" + "value" : "Sobre o Rectangle" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Repeated commands" + "value" : "Sobre o Rectangle" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Comenzi repetitive" + "value" : "Despre Rectangle" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Повторяющиеся команды" + "value" : "О Rectangle" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Opakované príkazy" + "value" : "O aplikácii Rectangle" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Upprepade kommandon" + "value" : "Om Rectangle" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Yinelenen komutlar" + "value" : "Rectangle Hakkında" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Повторювані команди" + "value" : "Про Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Khi lệnh lặp lại" + "value" : "Giới thiệu Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "重复命令" + "value" : "关于 Rectangle" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "重複的指令" + "value" : "關於 Rectangle" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "重複的指令" + "value" : "關於Rectangle" } } } }, - "3GE-la-fAZ.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"move to adjacent on left/right, or cycle size on side\"; ObjectID = \"3GE-la-fAZ\";", - "extractionState" : "stale", + "5QF-Oa-p0T.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Edit\"; ObjectID = \"5QF-Oa-p0T\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الانتقال إلى الحجم المجاور على اليسار / اليمين ، أو حجم الدورة على النصف" + "value" : "يحرر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "mou al costat adjacent a l'esquerra/dreta, o la mida del cicle a la meitat" + "value" : "Edita" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "mou al costat adjacent a l'esquerra/dreta, o la mida del cicle a la meitat" + "value" : "Edita" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "přesune na následující levou/pravou pozici" + "value" : "Upravit" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zum benachbarten Bildschirm auf der linken/rechten Seite bewegen oder Größe auf die Hälfte einstellen" + "value" : "Bearbeiten" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "move to adjacent on left/right, or cycle size on side" + "value" : "Edit" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "mover a adyacente en izquierda/derecha, o crear bucle de tamaño en mitades" + "value" : "Editar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "mover a adyacente en izquierda/derecha, o crear bucle de tamaño en mitades" + "value" : "Editar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "déplacer vers adjacent gauche/droite, ou scinder en deux" + "value" : "Modifier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "pindah ke yang berdekatan di kiri/kanan, atau ukuran siklus di setengah" + "value" : "Sunting" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "sposta nell'adiacente a sinistra/destra, o scorri dimensioni con azioni di mezzi" + "value" : "Modifica" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウを左右いずれかのディスプレイに移動させるか、サイズを半分にするのを繰り返す" + "value" : "編集" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "인접한 왼쪽 또는 오른쪽 디스플레이로 이동, 절반 동작시 창 크기 순환" + "value" : "편집" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "pereiti prie gretimo ekrano kairėje/dešinėje arba keisti pusės dydį" + "value" : "Redaguoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "flytt til nærmeste til venstre/høgre, eller gå gjennom størrelsene på halvdeler" + "value" : "Rediger" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "move to adjacent on left/right, or cycle size on side" + "value" : "Bewerken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "flytt til nærmaste til venstre/høgre, eller gå gjennom storleikane på halvdelar" + "value" : "Rediger" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "move to adjacent on left/right, or cycle size on side" + "value" : "Edytuj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "move to adjacent on left/right, or cycle size on side" + "value" : "Editar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "move to adjacent on left/right, or cycle size on side" + "value" : "Editar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "mută pe partea stângă/dreaptă adiacentă, sau permută între jumătăți" + "value" : "Editare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "перейти к соседнему дисплею слева/справа или переключать размер половин" + "value" : "Редактировать" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "presunúť na vedľajšiu ľavú/pravú pozíciu alebo striedať polovice" + "value" : "Upraviť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "flytta till intilliggande till vänster/höger, eller växla storlek på hälften" + "value" : "Redigera" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "sağa/sola taşı veya yarım boyutlarda geçiş yap" + "value" : "Düzenle" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "перемістити на сусідній лівий/правий, або циклічно змінювати розмір на половину" + "value" : "Редагувати" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Di chuyển đến cạnh trái/phải, hoặc thay đổi tuần hoàn một nửa kích thước" + "value" : "Chỉnh sửa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "左/右移动到相邻,或半屏循环大小" + "value" : "编辑" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "左/右移至相鄰,或一半循環大小" + "value" : "編輯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "左/右移到相鄰,或一半循環大小" + "value" : "編輯" } } } }, - "3hZ-Cs-EZ6.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Disable fast dragging to Mission Control\"; ObjectID = \"3hZ-Cs-EZ6\";", - "extractionState" : "stale", + "5Vv-lz-BsD.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Copy Style\"; ObjectID = \"5Vv-lz-BsD\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تعطيل السحب السريع إلى Mission Control" + "value" : "نسخ النمط" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Estil de còpia" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Estil de còpia" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Schnelles Ziehen zu Mission Control deaktivieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Disable fast dragging to Mission Control" + "value" : "Stil kopieren" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Desactivar el arrastre rápido hacia el Mission Control" + "value" : "Estilo de copia" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Desactivar el arrastre rápido hacia el Mission Control" + "value" : "Estilo de copia" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Désactiver le glissement rapide vers Mission Control" + "value" : "Style de copie" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Salin Gaya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Disattiva il trascinamento rapido in Mission Control" + "value" : "Copia stile" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Mission Controlへの高速ドラッグを無効にする" + "value" : "スタイルをコピー" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "미션 컨트롤에 빠른 드래그 비활성화" + "value" : "스타일 복사하기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Išjungti greitą vilkimą „Mission Control“" + "value" : "Kopijavimo stilius" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Slå av «raskt drag» til Mission Control" + "value" : "Kopier stil" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Kopieer stijl" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Slå av «raskt drag» til Mission Control" + "value" : "Kopier stil" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Styl kopiowania" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Copiar estilo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Copiar Estilo" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Disable fast dragging to Mission Control" + "value" : "Стиль копирования" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Отключить быстрое перетаскивание в Mission Control" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vypnúť rýchle ťahanie do Mission Control" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disable fast dragging to Mission Control" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hızlı sürükleme ile Mission Control'ün açılmasını devre dışı bırak" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вимкнути швидке перетягування до Mission Control" + "value" : "Kopiera stil" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tắt cơ chế kéo nhanh trong trình Điều khiển Tác vụ (Mission Control)" + "value" : "Sao chép phong cách" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "禁用快速拖移到调度中心" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "停用快速拖移至「指揮中心」" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "停用快速拖移到「指揮中心」" + "value" : "拷贝样式" } } } }, - "3IN-sU-3Bg.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Spelling\"; ObjectID = \"3IN-sU-3Bg\";", - "extractionState" : "manual", + "6dh-zS-Vam.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Redo\"; ObjectID = \"6dh-zS-Vam\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الإملائية" + "value" : "إعادة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografia" + "value" : "Refés" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografia" + "value" : "Refés" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znovu" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rechtschreibung" + "value" : "Wiederholen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Redo" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografía" + "value" : "Rehacer" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografía" + "value" : "Rehacer" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Orthographe" + "value" : "Refaire" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ejaan" + "value" : "Ulangi" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografia" + "value" : "Ripeti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スペル" + "value" : "やり直し" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "맞춤법" + "value" : "실행 복귀" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rašybos tikrinimas" + "value" : "Kartoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Stavekontroll" + "value" : "Gjør på nytt" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Spelling" + "value" : "Opnieuw" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Stavekontroll" + "value" : "Gjer på nytt" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pisownia" + "value" : "Powtórz" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografia" + "value" : "Refazer" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Ortografia" + "value" : "Refazer" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reaplicare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Правописание" + "value" : "Повторить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Znovu" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Stavning" + "value" : "Gör om" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yinele" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторити" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đọc chính tả" + "value" : "Lặp lại hoàn tác" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "拼写" + "value" : "重做" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重做" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "重做" } } } }, - "3Om-Ey-2VK.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"3Om-Ey-2VK\";", + "8mr-sm-Yjd.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Writing Direction\"; ObjectID = \"8mr-sm-Yjd\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "استخدم الافتراضي" + "value" : "اتجاه الكتابة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ús per defecte" + "value" : "Direcció d'escriptura" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ús per defecte" + "value" : "Direcció d'escriptura" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Standard verwenden" + "value" : "Schreibrichtung" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Uso Predeterminado" + "value" : "Dirección de escritura" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Uso Predeterminado" + "value" : "Dirección de escritura" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser la valeur par défaut" + "value" : "Sens d'écriture" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gunakan Bawaan" + "value" : "Arah Penulisan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Usa predefinito" + "value" : "Direzione di scrittura" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "デフォルトを使用" + "value" : "文字の向き" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "기본값 사용" + "value" : "작성 방향" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Naudoti pagal nutylėjimą" + "value" : "Rašymo kryptis" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk standard" + "value" : "Skriveretning" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruik standaard" + "value" : "Schrijfrichting" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk standard" + "value" : "Skriveretning" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Użyj domyślnych" + "value" : "Kierunek pisania" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Usar Padrão" + "value" : "Direção de escrita" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Usar Padrão" + "value" : "Direção de Escrita" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Использовать по умолчанию" + "value" : "Направление записи" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Använd standard" + "value" : "Skrivriktning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sử dụng mặc định" + "value" : "8mr-sm-Yjd.title" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "使用默认" + "value" : "书写方向" } } } }, - "3rS-ZA-NoH.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Speech\"; ObjectID = \"3rS-ZA-NoH\";", + "9ic-FL-obx.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Substitutions\"; ObjectID = \"9ic-FL-obx\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "خطاب" + "value" : "البدائل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Veu" + "value" : "Sustitucions" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Veu" + "value" : "Sustitucions" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Sprachausgabe" + "value" : "Ersetzungen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Voz" + "value" : "Sustituciones" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Voz" + "value" : "Sustituciones" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Discours" + "value" : "Remplacements" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bicara" + "value" : "Pergantian" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Voce" + "value" : "Sostituzioni" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スピーチ" + "value" : "自動置換" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "말하기" + "value" : "대체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kalba" + "value" : "Pakeitimai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tale" + "value" : "Erstatninger" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Spraak" + "value" : "Vervangingen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tale" + "value" : "Erstatningar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Mowa" + "value" : "Zamienniki" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Voz" + "value" : "Substituições" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Fala" + "value" : "Substituições" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Речь" + "value" : "Замены" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Tal" + "value" : "Substitutioner" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Đọc" + "value" : "Sự thay thế" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "语音" + "value" : "替换" } } } }, - "3zd-xE-oWl.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"First Two Thirds\"; ObjectID = \"3zd-xE-oWl\";", - "extractionState" : "stale", + "9yt-4B-nSM.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Smart Copy/Paste\"; ObjectID = \"9yt-4B-nSM\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أول ثلثين" + "value" : "نسخ / لصق ذكي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Primers dos terços" + "value" : "Copia/enganxa intel·ligent" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Primers dos terços" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "První dvě třetiny" + "value" : "Copia/enganxa intel·ligent" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zwei Drittel links" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "First Two Thirds" + "value" : "Intelligentes Kopieren/Einfügen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Primeros dos tercios" + "value" : "Copiar y pegar de forma inteligente" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Primeros dos tercios" + "value" : "Copiar y pegar de forma inteligente" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Deux tiers du haut" + "value" : "Copier/coller intelligent" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Dua Pertiga Pertama" + "value" : "Salin/Tempel Pintar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Primi due terzi" + "value" : "Copia/incolla intelligente" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "2/3にして左寄せ" + "value" : "スマートコピー/ペースト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "처음 2/3" + "value" : "스마트 복사하기/붙여넣기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kairės dvi trečiosios" + "value" : "Protingas kopijavimas/įterpimas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Første to tredjedelar" + "value" : "Smart kopier/lim inn" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Eerste tweederde deel" + "value" : "Slim kopiëren/plakken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Fyrste to tredjedelar" + "value" : "Smart kopier/lim inn" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Dwie trzecie z lewej" + "value" : "Inteligentne kopiowanie/wklejanie" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Primeiros dois terços" + "value" : "Copiar/Colar Inteligente" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Primeiros Dois Terços" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primele Două Treimi" + "value" : "Copiar/Colar Inteligente" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Первые две трети" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prvé dve tretiny" + "value" : "Умное копирование/вставка" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Första två tredjedelar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "İlk iki üçte bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перші дві третини" + "value" : "Smart kopiera/klistra in" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "2/3 đầu" + "value" : "Sao chép/Dán thông minh" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "左侧2/3" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左側2/3" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左側2/3" + "value" : "智能拷贝/粘贴" } } } }, - "4EN-yA-p0u.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Find\"; ObjectID = \"4EN-yA-p0u\";", - "extractionState" : "extracted_with_value", + "46P-cB-AYj.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Tighten\"; ObjectID = \"46P-cB-AYj\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يجد" + "value" : "شد" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Cerca" + "value" : "Estirar" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Cerca" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hledat" + "value" : "Estirar" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Suchen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Find" + "value" : "Enger" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Encontrar" + "value" : "Ajustar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Encontrar" + "value" : "Ajustar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rechercher" + "value" : "Reserrer" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Temukan" + "value" : "Kencangkan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Trova" + "value" : "Stringi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "検索" + "value" : "きつく" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "찾기" + "value" : "좁게" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ieškoti" + "value" : "Tempkite" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Finn" + "value" : "Stram inn" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Zoeken" + "value" : "Aanhalen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Finn" + "value" : "Stram inn" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Znajdź" + "value" : "Ściśnij" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Buscar" + "value" : "Apertar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Encontrar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Căutare" + "value" : "Apertar" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Найти" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nájsť" + "value" : "Затяните" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Sök" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bul" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Знайти" + "value" : "Dra åt" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tìm kiếm" + "value" : "Siết chặt" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "查找" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找" + "value" : "紧排" } } } }, - "4J7-dP-txa.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Enter Full Screen\"; ObjectID = \"4J7-dP-txa\";", - "extractionState" : "extracted_with_value", + "78Y-hA-62v.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Correct Spelling Automatically\"; ObjectID = \"78Y-hA-62v\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أدخل ملء الشاشة" + "value" : "التصحيح الإملائي تلقائيًا" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Entrar a pantalla completa" + "value" : "Corregir l'ortografia automàticament" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Entrar a pantalla completa" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spustit režim celé obrazovky" + "value" : "Corregir l'ortografia automàticament" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Vollbildmodus" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Enter Full Screen" + "value" : "Rechtschreibung automatisch korrigieren" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Entrar en pantalla completa" + "value" : "Corrección ortográfica automática" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Entrar en pantalla completa" + "value" : "Corrección ortográfica automática" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Passer en plein écran" + "value" : "Corriger l'orthographe automatiquement" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Masuk Layar Penuh" + "value" : "Benarkan Ejaan Secara Otomatis" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Attiva modalità a schermo intero" + "value" : "Correggi automaticamente ortografia" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "フルスクリーンにする" + "value" : "スペルを自動的に修正" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "전체 화면 시작" + "value" : "맞춤법 자동 수정" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Įveskite visą ekraną" + "value" : "Automatiškai taisyti rašybą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Åpne helskjerm" + "value" : "Automatisk stavekontrollretting" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ga naar volledig scherm" + "value" : "Corrigeer spelling automatisch" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Opne heilskjerm" + "value" : "Automatisk stavekontrollretting" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pełny ekran" + "value" : "Popraw pisownię automatycznie" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Entrar em tela cheia" + "value" : "Correção ortográfica automática" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Entrar em ecrã completo" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Intră în Ecran Complet" + "value" : "Correção ortográfica automátic" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Перейти в полноэкранный режим" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobraziť na celej obrazovky" + "value" : "Автоматически исправлять орфографию" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Öppna helskärm" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tam Ekrana Geç" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перейти до повноекранного режиму" + "value" : "Automatiskt rättstavning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Toàn màn hình" + "value" : "Tự động sửa lỗi chính tả" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "进入全屏幕" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "進入全螢幕" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "進入全螢幕" + "value" : "自动纠正拼写" } } } }, - "4sb-4s-VLi.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Quit Rectangle\"; ObjectID = \"4sb-4s-VLi\";", + "A66-A4-cGD.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Quit Rectangle\"; ObjectID = \"A66-A4-cGD\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { @@ -3967,41725 +3619,16594 @@ } } }, - "5kV-Vb-QxS.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"About Rectangle\"; ObjectID = \"5kV-Vb-QxS\";", - "extractionState" : "extracted_with_value", + "agt-UL-0e3.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"agt-UL-0e3\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حول المستطيل" + "value" : "استخدم الافتراضي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Quant a Rectangle" + "value" : "Ús per defecte" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Quant a Rectangle" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "O aplikaci Rectangle" + "value" : "Ús per defecte" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Über Rectangle" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "About Rectangle" + "value" : "Standard verwenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Acerca de Rectangle" + "value" : "Uso predeterminado" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Acerca de Rectangle" + "value" : "Uso predeterminado" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "À propos de Rectangle" + "value" : "Utiliser la valeur par défaut" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tentang Rectangle" + "value" : "Gunakan Bawaan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Informazioni su Rectangle" + "value" : "Usa predefinito" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangleについて" + "value" : "デフォルトを使用" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle 정보" + "value" : "기본값 사용" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Apie Rectangle" + "value" : "Naudoti pagal nutylėjimą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Om Rectangle" + "value" : "Bruk standard" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Over Rectangle" + "value" : "Gebruik standaard" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Om Rectangle" + "value" : "Bruk standard" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "O Rectangle" + "value" : "Użyj domyślnych" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sobre o Rectangle" + "value" : "Usar Padrão" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Sobre o Rectangle" + "value" : "Usar Padrão" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Despre Rectangle" + "value" : "Использовать по умолчанию" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "О Rectangle" + "value" : "Använd standard" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "O aplikácii Rectangle" + "value" : "Sử dụng mặc định" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Om Rectangle" + "value" : "使用默认" + } + } + } + }, + "Animation style" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Animation style" } }, - "tr" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle Hakkında" + "value" : "アニメーションの種類" } }, - "uk" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Про Rectangle" + "value" : "动画样式" } }, - "vi" : { + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Giới thiệu Rectangle" + "value" : "動畫樣式" + } + } + } + }, + "aTl-1u-JFS.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Print…\"; ObjectID = \"aTl-1u-JFS\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مطبعة…" } }, - "zh-Hans" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "关于 Rectangle" + "value" : "Imprimeix…" } }, - "zh-Hant" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "關於 Rectangle" + "value" : "Imprimeix…" } }, - "zh-Hant-HK" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "關於Rectangle" + "value" : "Drucken…" } - } - } - }, - "5LN-YU-Bwy.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"px\"; ObjectID = \"5LN-YU-Bwy\";", - "extractionState" : "stale", - "localizations" : { - "en" : { + }, + "es" : { "stringUnit" : { - "state" : "new", - "value" : "px" + "state" : "translated", + "value" : "Imprimir…" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imprimir…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imprimer…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cetak…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stampa…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プリント…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "px" + "value" : "프린트…" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spausdinti…" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv ut…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afdrukken…" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv ut…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drukuj…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imprimir…" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imprimir…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Печать…" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv ut…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "px" + "value" : "In…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打印…" } } } }, - "5QF-Oa-p0T.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Edit\"; ObjectID = \"5QF-Oa-p0T\";", + "aUF-d1-5bR.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Window\"; ObjectID = \"aUF-d1-5bR\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يحرر" + "value" : "نافذة او شباك" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Edita" + "value" : "Finestra" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Edita" + "value" : "Finestra" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Upravit" + "value" : "Okno" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Bearbeiten" + "value" : "Fenster" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Edit" + "value" : "Window" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Ventana" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Ventana" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Modifier" + "value" : "Fenêtre" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sunting" + "value" : "Jendela" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Modifica" + "value" : "Finestra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "編集" + "value" : "ウインドウ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "편집" + "value" : "창" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Redaguoti" + "value" : "Langas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Vindu" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bewerken" + "value" : "Venster" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Vindauge" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Edytuj" + "value" : "Okno" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Janela" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Janela" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Editare" + "value" : "Fereastră" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Редактировать" + "value" : "Окно" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Upraviť" + "value" : "Okno" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Redigera" + "value" : "Fönster" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Düzenle" + "value" : "Pencere" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Редагувати" + "value" : "Вікно" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chỉnh sửa" + "value" : "Cửa sổ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "编辑" + "value" : "窗口" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "編輯" + "value" : "視窗" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "編輯" + "value" : "視窗" } } } }, - "5Vv-lz-BsD.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Copy Style\"; ObjectID = \"5Vv-lz-BsD\";", + "aXa-aM-Jaq.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Font\"; ObjectID = \"aXa-aM-Jaq\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نسخ النمط" + "value" : "الخط" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Estil de còpia" + "value" : "Tipus de lletra" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Estil de còpia" + "value" : "Tipus de lletra" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Stil kopieren" + "value" : "Schrift" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Estilo de copia" + "value" : "Tipo de letra" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Estilo de copia" + "value" : "Tipo de letra" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Style de copie" + "value" : "Police" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Salin Gaya" + "value" : "Jenis Huruf" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Copia stile" + "value" : "Carattere" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スタイルをコピー" + "value" : "フォント" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "스타일 복사하기" + "value" : "서체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kopijavimo stilius" + "value" : "Šriftas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier stil" + "value" : "Font" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kopieer stijl" + "value" : "Lettertype" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier stil" + "value" : "Font" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Styl kopiowania" + "value" : "Czcionka" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar estilo" + "value" : "Fonte" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar Estilo" + "value" : "Tipo de letra" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Стиль копирования" + "value" : "Шрифт" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiera stil" + "value" : "Typsnitt" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sao chép phong cách" + "value" : "Phông" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "拷贝样式" + "value" : "字体" } } } }, - "5WR-Ui-uYB.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"5WR-Ui-uYB\";", - "extractionState" : "stale", + "AYu-sK-qS6.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Main Menu\"; ObjectID = \"AYu-sK-qS6\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "القائمة الرئيسية" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menú principal" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menú principal" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hlavní menu" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hauptmenü" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "-" + "value" : "Main Menu" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menú principal" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menú principal" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu principal" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu Utama" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu principale" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "メインメニュー" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "메인 메뉴" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Pagrindinis meniu" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hovedmeny" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hoofdmenu" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hovudmeny" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu główne" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu Principal" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu principal" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Meniu Principal" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Главное меню" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hlavné menu" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Huvudmeny" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ana Menü" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Головне меню" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Menu chính" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "主菜单" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "主選單" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "主選單" } } } }, - "6dh-zS-Vam.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Redo\"; ObjectID = \"6dh-zS-Vam\";", - "extractionState" : "extracted_with_value", + "BgM-ve-c93.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"BgM-ve-c93\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إعادة" + "value" : " t من اليسار إلى اليمين" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Refés" + "value" : "\tEsquerra a dreta" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Refés" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Znovu" + "value" : "\tEsquerra a dreta" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wiederholen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Redo" + "value" : "\tVon links nach rechts" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Rehacer" + "value" : "\tIzquierda a derecha" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Rehacer" + "value" : "\tIzquierda a derecha" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Refaire" + "value" : "\tDe gauche à droite" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ulangi" + "value" : "\tKiri ke Kanan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ripeti" + "value" : "\tDa sinistra a destra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "やり直し" + "value" : "\t左から右" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "실행 복귀" + "value" : "\t좌에서 우로" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kartoti" + "value" : "\tIš kairės į dešinę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gjør på nytt" + "value" : "\tVenstre til høgre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Opnieuw" + "value" : "\tVan links naar rechts" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Gjer på nytt" + "value" : "\tVenstre til høgre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Powtórz" + "value" : "\tOd lewej do prawej" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Refazer" + "value" : "\tDa esquerda para a direita" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Refazer" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reaplicare" + "value" : "\tDa esquerda para a direita" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Повторить" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Znovu" + "value" : "\tСлева направо" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Gör om" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Yinele" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Повторити" + "value" : "\tVänster till höger" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Lặp lại hoàn tác" + "value" : "Trái sang phải" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "重做" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "重做" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "重做" + "value" : "\\tLeft to Right" } } } }, - "6DV-cd-fda.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Maximize Height\"; ObjectID = \"6DV-cd-fda\";", - "extractionState" : "stale", + "bgn-CT-cEk.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show Colors\"; ObjectID = \"bgn-CT-cEk\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تعظيم الارتفاع" + "value" : "إظهار الألوان" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Maximitzar alçada" + "value" : "Mostra colors" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Maximitzar alçada" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximalizovat výšku" + "value" : "Mostra colors" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Höhe maximieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Maximize Height" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximise Height" + "value" : "Farben einblenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar altura" + "value" : "Mostrar colores" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar altura" + "value" : "Mostrar colores" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Maximiser la hauteur" + "value" : "Afficher les couleurs" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimalkan Tinggi" + "value" : "Tampilkan Warna" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Massimizza altezza" + "value" : "Mostra colori" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "高さを最大化" + "value" : "カラーパネルを表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "높이 최대화" + "value" : "색상 보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimalus aukštis" + "value" : "Rodyti spalvas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimer høgda" + "value" : "Vis farger" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Maximaliseer hoogte" + "value" : "Toon kleuren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimer høgda" + "value" : "Vis fargar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Maksymalna wysokość" + "value" : "Pokaż kolory" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar altura" + "value" : "Mostrar Cores" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar Altura" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizează Înalțimea" + "value" : "Mostrar Cores" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Максимизировать высоту" + "value" : "Показать цвета" } }, - "sk" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Maximalizovať výšku" + "value" : "Visa färger" } }, - "sv-SE" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Maximera höjden" + "value" : "Hiện màu" } }, - "tr" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Azami Yükseklik" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Максимізувати висоту" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phóng to tối đa chiều cao" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大化高度" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "將高度放到最大" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "將高度放到最大" + "value" : "显示颜色" } } } }, - "6e0-ji-qXw.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Todo app width\"; ObjectID = \"6e0-ji-qXw\";", - "extractionState" : "stale", + "bib-Uj-vzu.title" : { + "comment" : "Class = \"NSMenu\"; title = \"File\"; ObjectID = \"bib-Uj-vzu\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "عرض تطبيق Todo" + "value" : "ملف" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Amplada de l'aplicació Todo" + "value" : "Fitxer" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Amplada de l'aplicació Todo" + "value" : "Fitxer" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Šířka Todo aplikace" + "value" : "Soubor" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fensterbreite der To-do-Anwendung" + "value" : "Datei" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Todo app width" + "value" : "File" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ancho de la aplicación 'Todo'" + "value" : "Archivo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ancho de la aplicación 'Todo'" + "value" : "Archivo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Largeur de l’application Todo" + "value" : "Fichier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Lebar aplikasi Todo" + "value" : "Berkas" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Larghezza applicazione in evidenza" + "value" : "File" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ToDoアプリケーションのウインドウ幅" + "value" : "ファイル" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Todo 앱 폭" + "value" : "파일" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Todo programos lango plotis" + "value" : "Failas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gjerøliste-bredde" + "value" : "Arkiv" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Todo application width" + "value" : "Bestand" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Gjereliste-breidde" + "value" : "Arkiv" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Todo application width" + "value" : "Plik" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Todo application width" + "value" : "Arquivo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Todo application width" + "value" : "Ficheiro" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Lățimea aplicației Todo" + "value" : "Fișier" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Ширина окна Todo приложения" + "value" : "Файл" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Šírka Todo aplikácie" + "value" : "Súbor" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Att göra-applikationsbredd" + "value" : "Arkiv" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Todo uygulamasının genişliği" + "value" : "File" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ширина вікна Завдань" + "value" : "Файл" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chiều rộng của ứng dụng Todo" + "value" : "Tệp" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "待办应用程序宽度" + "value" : "文件" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "待辦應用程式寬度" + "value" : "檔案" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "待辦應用程式寬度" + "value" : "檔案" + } + } + } + }, + "Blur appearance" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blur appearance" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ぼかしの外観" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊外观" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊外觀" + } + } + } + }, + "Blur preview" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blur preview" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ぼかしプレビュー" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊预览" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "模糊預覽" } } } }, - "6HX-rn-VIp.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Fourth\"; ObjectID = \"6HX-rn-VIp\";", - "extractionState" : "stale", + "BOF-NM-1cW.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Preferences…\"; ObjectID = \"BOF-NM-1cW\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الرابع الأخير" + "value" : "التفضيلات ..." } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Darrer quart" + "value" : "Preferències…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Darrer quart" + "value" : "Preferències…" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Poslední čtvrtina" + "value" : "Předvolby…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Viertes Viertel" + "value" : "Einstellungen…" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Last Fourth" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Last Quarter" + "value" : "Preferences…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Cuarto cuarto" + "value" : "Preferencias…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cuarto cuarto" + "value" : "Preferencias…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Dernier quart" + "value" : "Préférences…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Seperempat Terakhir" + "value" : "Preferensi…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ultimo quarto" + "value" : "Preferenze…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "左から4番目" + "value" : "環境設定…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "네번째 1/4" + "value" : "환경설정…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Paskutinė ketvirtis" + "value" : "Nustatymai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Siste fjerdedel" + "value" : "Innstillinger…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Laatste kwart" + "value" : "Voorkeuren…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Siste fjerdedel" + "value" : "Innstillingar…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ostatnia ćwiartka" + "value" : "Preferencje…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Último quarto" + "value" : "Preferências…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Último Quarto" + "value" : "Preferências…" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ultimul Sfert" + "value" : "Preferințe…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Последняя четверть" + "value" : "Настройки…" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Posledná štvrtina" + "value" : "Predvoľby…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Sista fjärde" + "value" : "Inställningar…" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Son Çeyrek" + "value" : "Tercihler…" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Останній чверть" + "value" : "Налаштування…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/4 cuối" + "value" : "Cài đặt…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "右首1/4" + "value" : "偏好设置…" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "右首1/4" + "value" : "偏好設定⋯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "右首1/4" + "value" : "偏好設定⋯" } } } }, - "6ma-hP-5xX.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Left\"; ObjectID = \"6ma-hP-5xX\";", - "extractionState" : "stale", + "buJ-ug-pKt.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Use Selection for Find\"; ObjectID = \"buJ-ug-pKt\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أسفل اليسار" + "value" : "استخدم التحديد للبحث" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Inferior esquerra" + "value" : "Utilitzeu la selecció per a la cerca" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Inferior esquerra" + "value" : "Utilitzeu la selecció per a la cerca" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Vlevo dole" + "value" : "Hledat výběr" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Unten links" + "value" : "Auswahl für Suche übernehmen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Bottom Left" + "value" : "Use Selection for Find" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Abajo a la izquierda" + "value" : "Usar la selección para buscar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Abajo a la izquierda" + "value" : "Usar la selección para buscar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "En bas à gauche" + "value" : "Utiliser la sélection pour la recherche" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kiri Bawah" + "value" : "Gunakan Pilihan untuk Temukan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "In basso a sinistra" + "value" : "Usa selezione per trovare" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "左下" + "value" : "選択部分を検索に使用" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "왼쪽 아래" + "value" : "선택 부분으로 찾기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Apačioje kairėje" + "value" : "Naudoti pasirinktą paieškai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nedre venstre" + "value" : "Bruk markert tekst for å finne" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Linksonder" + "value" : "Gebruik selectie voor zoeken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Nedre venstre" + "value" : "Bruk markert tekst for å finna" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Lewy dolny róg" + "value" : "Użyj wyboru, aby znaleźć" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Inferior esquerdo" + "value" : "Usar seleção para buscar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Inferior Esquerda" + "value" : "Usar seleção para procurar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Stânga Jos" + "value" : "Folosește Selecția pentru Căutare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Внизу слева" + "value" : "Использовать выбранное для поиска" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vľavo dole" + "value" : "Použiť výber pri hľadaní" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Nedre vänstra" + "value" : "Använd markerad för att söka" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sol Alt" + "value" : "Use Selection for Find" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Нижній лівий кут" + "value" : "Використовувати виділення для пошуку" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Góc dưới bên trái" + "value" : "Dùng lựa chọn để tìm kiếm" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "左下" + "value" : "查找所选内容" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "左下" + "value" : "使用所選範圍尋找" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "左下" + "value" : "使用所選範圍尋找" } } } }, - "7YK-9Z-lzw.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Center Third\"; ObjectID = \"7YK-9Z-lzw\";", - "extractionState" : "stale", + "Bw7-FT-i3A.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Save As…\"; ObjectID = \"Bw7-FT-i3A\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "المركز الثالث" + "value" : "حفظ باسم ..." } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Tercer central" + "value" : "Anomena i desa…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Tercer central" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prostřední třetina" + "value" : "Anomena i desa…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Mittleres Drittel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Center Third" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Centre Third" + "value" : "Speichern unter…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tercio central" + "value" : "Guardar como…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tercio central" + "value" : "Guardar como…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers central" + "value" : "Enregistrer sous…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tengah Ketiga" + "value" : "Simpan Sebagai…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Terzo centrale" + "value" : "Salva con nome…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "1/3にして中央に表示" + "value" : "名前を付けて保存…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "가운데 1/3" + "value" : "다른 이름으로 저장…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Centrinė trečioji" + "value" : "Išsaugoti kaip…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedel i midten" + "value" : "Lagre som…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Middelste derde" + "value" : "Opslaan als…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedel i midten" + "value" : "Lagre som…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jedna trzecia na środku" + "value" : "Zapisz jako…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Terço central" + "value" : "Salvar como…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Terço Central" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Treimea din Mijloc" + "value" : "Guardar como…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Центральная треть" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prostredná tretina" + "value" : "Сохранить как…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Mitten tredje" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Orta üçte bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Центральна третина" + "value" : "Spara som…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/3 giữa" + "value" : "Lưu dưới dạng…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "中间1/3" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "中央1/3" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "中央1/3" + "value" : "存储为…" } } } }, - "7yS-wj-uWD.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Show Todo Mode in menu\"; ObjectID = \"7yS-wj-uWD\";", - "extractionState" : "stale", + "c8a-y6-VQd.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Transformations\"; ObjectID = \"c8a-y6-VQd\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إظهار وضع Todo في القائمة" + "value" : "التحولات" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra el mode Todo en el menú" + "value" : "Transformacions" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra el mode Todo en el menú" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazit Todo mód v menu" + "value" : "Transformacions" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "To-do-Modus in Menü anzeigen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Show Todo Mode in menu" + "value" : "Transformationen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar el modo 'Todo' en el menú" + "value" : "Transformaciones" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar el modo 'Todo' en el menú" + "value" : "Transformaciones" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Afficher le mode Todo dans le menu" + "value" : "Transformations" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tampilkan Mode Todo di menu" + "value" : "Transformasi" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra modalità In evidenza nel menu" + "value" : "Trasformazioni" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ToDoモードをメニューに表示" + "value" : "変換" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "메뉴에서 Todo 모드 보기" + "value" : "변형" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rodyti Todo režimą meniu" + "value" : "Transformacijos" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vis Gjøreliste-modus i menyen" + "value" : "Endre bokstavtype" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Show Todo Mode in menu" + "value" : "Transformaties" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Vis Gjereliste-modus i menyen" + "value" : "Endra bokstavtype" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Show Todo Mode in menu" + "value" : "Przekształcenia" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar Todo Mode no menu" + "value" : "Transformações" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Show Todo Mode in menu" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arată Modul Todo în meniu" + "value" : "Transformações" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Показывать Todo режим в меню" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobraziť Todo režim v menu" + "value" : "Преобразования" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Visa Att göra-läge i menyn" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Menüde Todo Modunu göster" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Показувати режим Завдань в меню" + "value" : "Transformationer" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Hiển thị chế độ Todo trên menu" + "value" : "Chuyển đổi" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "在菜单中显示待办模式" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "在選單中顯示待辦模式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "在選單中顯示待辦模式" + "value" : "转换" } } } }, - "8Bg-SZ-hDO.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Move to Center\"; ObjectID = \"8Bg-SZ-hDO\";", - "extractionState" : "stale", + "cBj-76-2E7.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Not Authorized to Control Your Computer\"; ObjectID = \"cBj-76-2E7\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { - "state" : "needs_review", - "value" : "مركز" + "state" : "translated", + "value" : "غير مصرح له بالتحكم في جهاز الكمبيوتر الخاص بك" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centre" + "state" : "translated", + "value" : "No està autoritzat per controlar el vostre ordinador" } }, "ca-ES" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centre" + "state" : "translated", + "value" : "No està autoritzat per controlar el vostre ordinador" } }, "cs" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Vycentrovat" + "state" : "translated", + "value" : "Ovládání počítače neautorizováno" } }, "de" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Zentrieren" + "state" : "translated", + "value" : "Nicht berechtigt, Deinen Computer zu steuern" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Move to Center" + "value" : "Not Authorized to Control Your Computer" } }, "en-GB" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centre" + "state" : "translated", + "value" : "Not Authorised to Control Your Computer" } }, "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centrar" + "state" : "translated", + "value" : "No está autorizado para controlar su computadora" } }, "es-419" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centrar" + "state" : "translated", + "value" : "No está autorizado para controlar su computadora" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centrer" + "state" : "translated", + "value" : "Non autorisé à contrôler votre ordinateur" } }, "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Tengah" + "state" : "translated", + "value" : "Tidak Berwenang untuk Mengontrol Komputer Anda" } }, "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centro" + "state" : "translated", + "value" : "Non autorizzato a controllare il tuo computer" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "中央に表示" + "state" : "translated", + "value" : "コンピューターを制御する権限がありません" } }, "ko" : { "stringUnit" : { - "state" : "needs_review", - "value" : "가운데" + "state" : "translated", + "value" : "컴퓨터를 제어할 권한이 없습니다" } }, "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Į centrą" + "state" : "translated", + "value" : "Neautorizuotas kompiuterio valdymui" } }, "nb" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Midten" + "state" : "translated", + "value" : "Ikke løyve til å styre datamaskina di" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centreer" + "state" : "translated", + "value" : "Niet bevoegd om uw computer te besturen" } }, "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Midten" + "state" : "translated", + "value" : "Ikkje løyve til å styra datamaskina di" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Środek" + "state" : "translated", + "value" : "Brak autoryzacji do kontroli komputera" } }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centro" + "state" : "translated", + "value" : "Não autorizado para controlar seu computador" } }, "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centro" + "state" : "translated", + "value" : "Não autorizado a controlar o seu computador" } }, "ro" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centru" + "state" : "translated", + "value" : "Neautorizat pentru a Controla Dispozitivul Tău" } }, "ru" : { "stringUnit" : { - "state" : "needs_review", - "value" : "В центр" + "state" : "translated", + "value" : "Не авторизован для управления компьютером" } }, "sk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Vycentrovať" + "state" : "translated", + "value" : "Nemá oprávnenie ovládať tvoj počítač" } }, "sv-SE" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitten" + "state" : "translated", + "value" : "Inte behörig att styra din dator" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Orta" + "state" : "translated", + "value" : "Bilgisayarınızı kontrol etme yetkisi yok" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Центр" + "state" : "translated", + "value" : "Не авторизовано для керування вашим комп’ютером" } }, "vi" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Căn giữa" + "state" : "translated", + "value" : "Không đủ quyền để diều khiển máy tính của bạn" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", - "value" : "中间" + "state" : "translated", + "value" : "未获授权控制您的电脑" } }, "zh-Hant" : { "stringUnit" : { - "state" : "needs_review", - "value" : "中央" + "state" : "translated", + "value" : "未被授權來控制您的電腦" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "needs_review", - "value" : "中央" + "state" : "translated", + "value" : "未被授權來控制你的電腦" } } } }, - "8dv-v2-SPu.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"3. In the Rectangle menu, enable Todo Mode.\"; ObjectID = \"8dv-v2-SPu\";", - "extractionState" : "stale", + "cDB-IK-hbR.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"cDB-IK-hbR\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "3. في قائمة Rectangle ، قم بتمكين Todo Mode" + "value" : "استخدام لا شيء" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "3. Al menú Rectangle, habilita el mode Todo." + "value" : "Utilitzar cap" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "3. Al menú Rectangle, habilita el mode Todo." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "3. Zapněte Todo mód v Rectangle menu." + "value" : "Utilitzar cap" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "3. Aktiviere den To-do-Modus im Rectangle-Menü." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "3. In the Rectangle menu, enable Todo Mode." + "value" : "Keine verwenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "3. En el menú de Rectangle, activa el modo Todo." + "value" : "Usar ninguno" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "3. En el menú de Rectangle, activa el modo Todo." + "value" : "Usar ninguno" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "3. Dans le menu de Rectangle, activer le mode Todo." + "value" : "Ne rien utiliser" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "3. Di Menu Rectangle, Aktifkan mode Todo." + "value" : "Tidak Gunakan Apapun" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "3. Nel menu di Rectangle, attiva modalità In evidenza" + "value" : "Non usare" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3. RectangleのメニューからToDoモードを有効にします。" + "value" : "使用しない" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "3. Rectangle 메뉴에서, Todo 모드를 켭니다" + "value" : "사용하지 않음" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "3. „Rectangle“ meniu įjunkite Todo režimą." + "value" : "Nenaudoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "3. I Rectangle-menyen: aktiver Gjøreliste-modus." + "value" : "Bruk ingen" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "3. In the Rectangle menu, enable Todo Mode." + "value" : "Gebruik geen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "3. I Rectangle-menyen: aktiver Gjereliste-modus." + "value" : "Bruk ingen" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "3. In the Rectangle menu, enable Todo Mode." + "value" : "Nie używaj żadnego" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "3. No menu do Rectangle, habilite o Todo Mode." + "value" : "Usar nenhum" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "3. In the Rectangle menu, enable Todo Mode." + "value" : "Nenhum" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "3. Activează modul Todo în meniul Rectangle." + "value" : "Не использовать" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "3. В меню Rectangle включите Todo режим." + "value" : "Använd ingen" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "3. Zapni Todo režim v Rectangle menu." + "value" : "Không sử dụng" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "3. I Rectangle-menyn, aktivera Att göra-läge." + "value" : "都不使用" } - }, - "tr" : { + } + } + }, + "Conflict with macOS tiling" : { + "extractionState" : "manual", + "localizations" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "3. Rectangle menüsünde, Todo Modunu aktif edin." + "value" : "Konflikt mit macOS Fenstermanagement" } }, - "uk" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3. В меню Rectangle увімкніть режим Завдань." + "value" : "macOS のタイル表示機能との競合" } }, - "vi" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "3. Trên menu của Rectangle, bật chế độ Todo." + "value" : "macOS 타일 정리 기능과 충돌" } }, - "zh-Hans" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "⒊在 Rectangle 菜单中,启用待办模式" + "value" : "Konflikt s umiestnením dlaždíc v macOS" } }, - "zh-Hant" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "⒊ 在 Rectangle 選單中,啟用待辦模式。" + "value" : "Xung đột với ô xếp macOS" } }, - "zh-Hant-HK" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "⒊在Rectangle選單中,啟用待辦模式。" + "value" : "与 macOS 窗口平铺功能冲突" } } } }, - "8mr-sm-Yjd.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Writing Direction\"; ObjectID = \"8mr-sm-Yjd\";", - "extractionState" : "manual", + "Corners" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اتجاه الكتابة" + "value" : "Coins" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Direcció d'escriptura" + "value" : "Racons" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Direcció d'escriptura" + "value" : "Racons" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rohy" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Schreibrichtung" + "value" : "Ecken" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Dirección de escritura" + "value" : "Esquinas" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Dirección de escritura" + "value" : "Esquinas" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sens d'écriture" + "value" : "Coins" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Arah Penulisan" + "value" : "Sudur" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Direzione di scrittura" + "value" : "Angoli" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "文字の向き" + "value" : "画面端" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "작성 방향" + "value" : "모서리" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rašymo kryptis" + "value" : "Kampai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Skriveretning" + "value" : "Hjørne" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Schrijfrichting" + "value" : "Corners" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Skriveretning" + "value" : "Hjørne" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Kierunek pisania" + "value" : "Narożniki" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Direção de escrita" + "value" : "Cantos" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Direção de Escrita" + "value" : "Cantos" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Направление записи" + "value" : "Углы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rohy" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Skrivriktning" + "value" : "Hörn" } }, - "vi" : { + "tr" : { "stringUnit" : { "state" : "translated", - "value" : "8mr-sm-Yjd.title" + "value" : "Köşeler" } }, - "zh-Hans" : { + "uk" : { "stringUnit" : { "state" : "translated", - "value" : "书写方向" + "value" : "Кути" } - } - } - }, - "8oe-J2-oUU.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Maximize\"; ObjectID = \"8oe-J2-oUU\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { + }, + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "تحقيق أقصى قدر" + "value" : "Các góc" } }, - "ca" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Maximitzar" + "value" : "角落" } }, - "ca-ES" : { + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Maximitzar" + "value" : "角落" } }, - "cs" : { + "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "Maximalizovat" + "value" : "角落" + } + } + } + }, + "cqv-fj-IhA.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Selection\"; ObjectID = \"cqv-fj-IhA\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختيار" } }, - "de" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Maximieren" + "value" : "Selecció" } }, - "en" : { + "ca-ES" : { "stringUnit" : { - "state" : "new", - "value" : "Maximize" + "state" : "translated", + "value" : "Selecció" } }, - "en-GB" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Maximise" + "value" : "Auswahl" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar" + "value" : "Selección" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar" + "value" : "Selección" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Maximiser" + "value" : "Sélection" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimalkan" + "value" : "Pilihan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Massimizza" + "value" : "Selezione" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "最大化" + "value" : "選択" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "최대화" + "value" : "선택 부분" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimizuoti" + "value" : "Pasirinkimas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimer" + "value" : "Utvalg" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Maximaliseer" + "value" : "Selectie" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Maksimer" + "value" : "Utval" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Maksymalizuj" + "value" : "Wybór" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar" + "value" : "Seleção" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Maximizar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizează" + "value" : "Seleção" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Максимизировать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximalizovať" + "value" : "Выбор" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Maximera" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tamamını kapla" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Максимізувати" + "value" : "Markerade" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Phóng to tối đa" + "value" : "Lựa chọn" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "最大化" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "放到最大" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "放到最大" + "value" : "所选内容" } } } }, - "08q-Ce-1QL.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Two Thirds\"; ObjectID = \"08q-Ce-1QL\";", - "extractionState" : "stale", + "cwL-P1-jid.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Smart Links\"; ObjectID = \"cwL-P1-jid\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الثلثين الأخيرين" + "value" : "روابط ذكية" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Últims dos terços" + "value" : "Enllaços intel·ligents" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Últims dos terços" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poslední dvě třetiny" + "value" : "Enllaços intel·ligents" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zwei Drittel rechts" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Last Two Thirds" + "value" : "Intelligente Web- und E-Mail-Links" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Últimos dos tercios" + "value" : "Enlaces inteligentes" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Últimos dos tercios" + "value" : "Enlaces inteligentes" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Deux tiers du bas" + "value" : "Liens intelligents" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Dua Pertiga Terakhir" + "value" : "Tautan Pintar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ultimi due terzi" + "value" : "Link intelligenti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "2/3にして右寄せ" + "value" : "スマートリンク" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "마지막 2/3" + "value" : "스마트 링크" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Dešinės dvi trečiosios" + "value" : "Intelektualios nuorodos" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Siste to tredjedeler" + "value" : "Smarte lenker" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Laatste tweederde deel" + "value" : "Slimme links" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Siste to tredjedelar" + "value" : "Smarte lenkar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Dwie trzecie z prawej" + "value" : "Inteligentne łącza" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Últimos dois terços" + "value" : "Links Inteligentes" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Últimos dois terços" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ultimele Două Treimi" + "value" : "Links Inteligentes" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Последние две трети" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Posledné dve tretiny" + "value" : "Интеллектуальные ссылки" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Sista två tredjedelar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Son iki üçte bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Останні дві третини" + "value" : "Smarta länkar" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "2/3 cuối" + "value" : "Liên kết thông minh" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "右侧2/3" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右側2/3" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右側2/3" + "value" : "智能链接" } } } }, - "9ic-FL-obx.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Substitutions\"; ObjectID = \"9ic-FL-obx\";", + "d9c-me-L2H.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Text\"; ObjectID = \"d9c-me-L2H\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "البدائل" + "value" : "نص" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Sustitucions" + "value" : "Text" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Sustitucions" + "value" : "Text" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ersetzungen" + "value" : "Text" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Sustituciones" + "value" : "Texto" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Sustituciones" + "value" : "Texto" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Remplacements" + "value" : "Texte" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pergantian" + "value" : "Teks" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sostituzioni" + "value" : "Testo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "自動置換" + "value" : "テキスト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "대체" + "value" : "텍스트" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pakeitimai" + "value" : "Tekstas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Erstatninger" + "value" : "Tekst" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vervangingen" + "value" : "Tekst" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Erstatningar" + "value" : "Tekst" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zamienniki" + "value" : "Tekst" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Substituições" + "value" : "Texto" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Substituições" + "value" : "Texto" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Замены" + "value" : "Текст" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Substitutioner" + "value" : "Text" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sự thay thế" + "value" : "Chữ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "替换" + "value" : "文本" } } } }, - "9JD-tZ-7jf.title" : { - "comment" : "Class = \"NSWindow\"; title = \"Authorize Rectangle\"; ObjectID = \"9JD-tZ-7jf\";", - "extractionState" : "stale", + "d9M-CD-aMd.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Make Lower Case\"; ObjectID = \"d9M-CD-aMd\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تخويل المستطيل" + "value" : "جعل الأحرف الصغيرة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Autoritzar el Rectangle" + "value" : "Converteix a minúscules" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Autoritzar el Rectangle" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizovat Rectangle" + "value" : "Converteix a minúscules" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle autorisieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Authorize Rectangle" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Authorise Rectangle" + "value" : "Kleinschreiben" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Autorizar Rectangle" + "value" : "Convertir a minúsculas" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Autorizar Rectangle" + "value" : "Convertir a minúsculas" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Autoriser Rectangle" + "value" : "Passer en minuscules" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Izinkan Rectangle" + "value" : "Buat Huruf Kecil" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Autorizza Rectangle" + "value" : "Rendi minuscolo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangleを許可" + "value" : "小文字にする" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle 승인" + "value" : "소문자로 만들기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Leisti Rectangle" + "value" : "Vesti į mažąjį registrą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Autoriser Rectangle" + "value" : "Bruk små bokstaver" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle toestemming geven" + "value" : "Maak kleine letters" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Autoriser Rectangle" + "value" : "Bruk små bokstavar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Autoryzuj Rectangle" + "value" : "Zmień na małe litery" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Autorizar Rectangle" + "value" : "Converter em Minúsculas" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Autorizar Rectangle" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizează Rectangle" + "value" : "Minúsculas" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Разрешить Rectangle" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Povoliť Rectangle" + "value" : "Привести к нижнему регистру" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Auktorisera Rectangle" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle'ı Yetkilendir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Авторизувати Rectangle" + "value" : "Ändra till gemener" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cấp phép cho Rectangle" + "value" : "Viết chữ thường" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "授权 Rectangle" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "授權 Rectangle" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "授權Rectangle" + "value" : "变为小写" } } } }, - "9XM-Zb-HEb.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"If the checkbox is disabled, click the padlock and enter your password\"; ObjectID = \"9XM-Zb-HEb\";", - "extractionState" : "stale", + "D99-0O-MB6.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Ignore frontmost.app\"; ObjectID = \"D99-0O-MB6\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إذا تم تعطيل مربع الاختيار ، فانقر فوق القفل وأدخل كلمة المرور الخاصة بك" + "value" : "تجاهل frontmost.app" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Si la casella de selecció està desactivada, feu clic al cadenat i introduïu la vostra contrasenya." + "value" : "Ignora frontmost.app" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Si la casella de selecció està desactivada, feu clic al cadenat i introduïu la vostra contrasenya." + "value" : "Ignora frontmost.app" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Pokud je zaškrtávací políčko vypnuto, tak klikněte na zámek a zadejte vaše heslo" + "value" : "Ignorovat frontmost.app" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wenn das Kontrollkästchen deaktiviert ist, klicke auf das Vorhängeschloss und gib dein Passwort ein." + "value" : "frontmost.app ignorieren" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "If the checkbox is disabled, click the padlock and enter your password" + "value" : "Ignore frontmost.app" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Si la casilla de verificación está desactivada, haga clic en el candado e introduzca su contraseña." + "value" : "Ignorar frontmost.app" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Si la casilla de verificación está desactivada, haga clic en el candado e introduzca su contraseña." + "value" : "Ignorar frontmost.app" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Si la case est décochée, cliquez sur le cadenas et entrez votre mot de passe." + "value" : "Ignorer frontmost.app" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jika kotak centang dinonaktifkan, klik gembok dan masukkan kata sandi Anda" + "value" : "Abaikan frontmost.app" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Se la casella di controllo è disattivata, fai clic sul lucchetto e inserisci la password" + "value" : "Ignora frontmost.app" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "チェックボックスが無効になっている場合は、カギをクリックしてパスワードを入力してください" + "value" : "frontmost.appを無視" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "확인란이 비활성화되어 있으면, 자물쇠를 클릭하고 암호를 입력하세요" + "value" : "frontmost.app 무시" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jei žymėjimas yra išjungtas, spustelėkite užraktą ir įveskite savo slaptažodį" + "value" : "Ignoruoti frontmost.app" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Om avkryssingsboksen er inaktiv, klikker du på hengelåsen og skriver inn passordet ditt." + "value" : "Ignorer frontmost.app" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Als het selectievakje is uitgeschakeld, klik dan op het hangslot en voer uw wachtwoord in." + "value" : "Negeer frontmost.app" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Om avkryssingsboksen er inaktiv, klikkar du på hengelåsen og skriv inn passordet ditt." + "value" : "Ignorer frontmost.app" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeśli pole wyboru nie jest zaznaczone, kliknij kłódkę i wpisz hasło." + "value" : "Ignoruj frontmost.app" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Se a seleção estiver desativada, clique no cadeado e insira sua senha" + "value" : "Ignorar frontmost.app" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Se a caixa de verificação estiver desactivada, clique no cadeado e introduza a sua palavra-passe" + "value" : "Ignorar frontmost.app" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Dacă checkbox-ul este dezactivat, apăsați pe lacăt și introduceți parola" + "value" : "Ignoră frontmost.app" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Если флажок отключен, щелкните на замок и введите свой пароль" + "value" : "Игнорировать frontmost.app" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Ak je zaškrtávacie políčko vypnuté, klikni na zámok a zadaj svoje heslo" + "value" : "Ignorovať frontmost.app" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Om kryssrutan är inaktiverad klickar du på hänglåset och anger ditt lösenord." + "value" : "Ignorera frontmost.app" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Eğer işaret kutusu devre dışı ise, kilit simgesine tıklayıp şifrenizi girin" + "value" : "frontmost.app uygulamasını yoksay" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Якщо галочка вимкнена, натисніть на замок і введіть пароль" + "value" : "Ігнорувати frontmost.app" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Nếu hộp kiểm bị tắt, hãy nhấp vào ổ khóa và nhập mật khẩu của bạn" + "value" : "Bỏ qua frontmost.app" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "如果复选框已禁用,点按锁型图标,然后输入您的密码" + "value" : "忽略 frontmost.app" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如果註記框已停用,按一下鎖頭圖示,然後輸入您的密碼" + "value" : "忽略 frontmost.app" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "如果剔選框已停用,按一下掛鎖圖像,然後輸入你的密碼" + "value" : "忽略frontmost.app" } } } }, - "9yt-4B-nSM.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Smart Copy/Paste\"; ObjectID = \"9yt-4B-nSM\";", + "Dark" : { "extractionState" : "manual", "localizations" : { - "ar" : { + "en" : { "stringUnit" : { "state" : "translated", - "value" : "نسخ / لصق ذكي" + "value" : "Dark" } }, - "ca" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Copia/enganxa intel·ligent" + "value" : "ダーク" } }, - "ca-ES" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Copia/enganxa intel·ligent" + "value" : "深色" } }, - "de" : { + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Intelligentes Kopieren/Einfügen" + "value" : "深色" } - }, - "es" : { + } + } + }, + "Direct resize" : { + "extractionState" : "manual", + "localizations" : { + "en" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar y pegar de forma inteligente" + "value" : "Direct resize" } }, - "es-419" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar y pegar de forma inteligente" + "value" : "ウインドウを直接リサイズ" } }, - "fr" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Copier/coller intelligent" + "value" : "直接缩放窗口" } }, - "id" : { + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Salin/Tempel Pintar" + "value" : "直接縮放視窗" } - }, - "it" : { + } + } + }, + "Disable in macOS" : { + "extractionState" : "manual", + "localizations" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Copia/incolla intelligente" + "value" : "In Systemeinstellungen deaktivieren" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スマートコピー/ペースト" + "value" : "macOS 側を無効化" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "스마트 복사하기/붙여넣기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Protingas kopijavimas/įterpimas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smart kopier/lim inn" + "value" : "macOS의 기능 끄기" } }, - "nl" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Slim kopiëren/plakken" + "value" : "Vypnúť v macOS" } }, - "nn" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Smart kopier/lim inn" + "value" : "Vô hiệu hóa trong macOS" } }, - "pl" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Inteligentne kopiowanie/wklejanie" + "value" : "在 macOS 里禁用" } - }, - "pt-BR" : { + } + } + }, + "Disable in Rectangle" : { + "extractionState" : "manual", + "localizations" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar/Colar Inteligente" + "value" : "In Rectangle deaktivieren" } }, - "pt-PT" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar/Colar Inteligente" + "value" : "Rectangle 側を無効化" } }, - "ru" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Умное копирование/вставка" + "value" : "Rectangle의 기능 끄기" } }, - "sv-SE" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Smart kopiera/klistra in" + "value" : "Vypnúť v Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sao chép/Dán thông minh" + "value" : "Vô hiệu hóa trong Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "智能拷贝/粘贴" + "value" : "在 Rectangle 里禁用" } } } }, - "46P-cB-AYj.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Tighten\"; ObjectID = \"46P-cB-AYj\";", + "Dismiss" : { "extractionState" : "manual", "localizations" : { - "ar" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "شد" + "value" : "Abbrechen" } }, - "ca" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Estirar" + "value" : "無視" } }, - "ca-ES" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Estirar" + "value" : "무시" } }, - "de" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Enger" + "value" : "Zatvoriť" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Huỷ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略" + } + } + } + }, + "Display" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moniteur" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pantalla" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Displej" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildschirm" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ajustar" + "value" : "Pantalla" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ajustar" + "value" : "Pantalla" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Reserrer" + "value" : "Moniteur" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kencangkan" + "value" : "Tampilan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Stringi" + "value" : "Schermo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "きつく" + "value" : "ディスプレイ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "좁게" + "value" : "디스플레이" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Tempkite" + "value" : "Ekranas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Stram inn" + "value" : "Skjerm" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aanhalen" + "value" : "Display" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Stram inn" + "value" : "Skjerm" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ściśnij" + "value" : "Ekran" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Apertar" + "value" : "Tela" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Apertar" + "value" : "Ecrã" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Затяните" + "value" : "Дисплей" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Displej" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Dra åt" + "value" : "Skärm" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekran" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дисплей" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Siết chặt" + "value" : "Hiển thị" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "紧排" + "value" : "显示器" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示器" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示器" } } } }, - "74m-kw-w1f.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Check for Updates…\"; ObjectID = \"74m-kw-w1f\";", - "extractionState" : "stale", + "dMs-cI-mzQ.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"File\"; ObjectID = \"dMs-cI-mzQ\";", + "extractionState" : "extracted_with_value", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ملف" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fitxer" + } + }, + "ca-ES" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fitxer" + } + }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Zkontrolovat aktualizace…" + "value" : "Soubor" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nach Updates suchen…" + "value" : "Datei" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Check for Updates…" + "value" : "File" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Buscar actualizaciones…" + "value" : "Archivo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Buscar actualizaciones…" + "value" : "Archivo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Mettre à jour…" + "value" : "Fichier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Periksa Pembaruan…" + "value" : "Berkas" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Controlla aggiornamenti…" + "value" : "File" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "アップデートを確認…" + "value" : "ファイル" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "업데이트 확인…" + "value" : "파일" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Tikrinti atnaujinimus…" + "value" : "Failas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Se etter oppdateringer…" + "value" : "Arkiv" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kijk of er updates zijn…" + "value" : "Bestand" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Sjå etter oppdateringar…" + "value" : "Arkiv" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Sprawdź aktualizacje…" + "value" : "Plik" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Procurar por atualizações..." + "value" : "Arquivo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Verifique se há atualizações…" + "value" : "Ficheiro" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Verificare Actualizări…" + "value" : "Fișier" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Проверить обновления…" + "value" : "Файл" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Skontrolovať aktualizácie…" + "value" : "Súbor" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Sök efter uppdateringar…" + "value" : "Arkiv" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Güncellemeleri kontrol et…" + "value" : "Dosya" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Перевірити оновлення…" + "value" : "Файл" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Kiểm tra các bản cập nhật…" + "value" : "Tệp" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "检查更新…" + "value" : "文件" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "檢查更新項目⋯" + "value" : "檔案" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "檢查更新項目⋯" + "value" : "檔案" } } } }, - "78Y-hA-62v.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Correct Spelling Automatically\"; ObjectID = \"78Y-hA-62v\";", + "Drag to screen edge tiling is enabled in both Rectangle and macOS." : { "extractionState" : "manual", "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "التصحيح الإملائي تلقائيًا" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corregir l'ortografia automàticament" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corregir l'ortografia automàticament" - } - }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rechtschreibung automatisch korrigieren" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corrección ortográfica automática" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corrección ortográfica automática" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corriger l'orthographe automatiquement" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Benarkan Ejaan Secara Otomatis" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Correggi automaticamente ortografia" + "value" : "Das Ziehen zum Bildschirmrand für das Anordnen von Fenstern ist sowohl in Rectangle als auch in den macOS Systemeinstellungen aktiviert." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スペルを自動的に修正" + "value" : "\"画面の端にドラッグしてタイル表示\"が、Ractangle と macOS の両方で有効になっています。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "맞춤법 자동 수정" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Automatiškai taisyti rašybą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Automatisk stavekontrollretting" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corrigeer spelling automatisch" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Automatisk stavekontrollretting" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Popraw pisownię automatycznie" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Correção ortográfica automática" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Correção ortográfica automátic" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Автоматически исправлять орфографию" + "value" : "화면 가장자리로 드래그해 타일을 정렬하는 기능이 Rectangle과 macOS 설정에서 모두 켜져 있습니다." } }, - "sv-SE" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Automatiskt rättstavning" + "value" : "Potiahnutie na okraj obrazovky je zapnuté v Rectangle aj macOS." } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tự động sửa lỗi chính tả" + "value" : "Tính năng kéo để ghép cạnh màn hình được bật trong cả Rectangle và macOS." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自动纠正拼写" + "value" : "在 Rectangle 和 macOS 中都启用了拖移窗口至屏幕边缘实现平铺" } } } }, - "A66-A4-cGD.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Quit Rectangle\"; ObjectID = \"A66-A4-cGD\";", + "dRJ-4n-Yzg.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Undo\"; ObjectID = \"dRJ-4n-Yzg\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "قم بإنهاء المستطيل" + "value" : "الغاء التحميل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Sortir de Rectangle" + "value" : "Desfés" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Sortir de Rectangle" + "value" : "Desfés" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Ukončit Rectangle" + "value" : "Zpět" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle beenden" + "value" : "Widerrufen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Quit Rectangle" + "value" : "Undo" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Salir de Rectangle" + "value" : "Deshacer" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Salir de Rectangle" + "value" : "Deshacer" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Quitter Rectangle" + "value" : "Annuler" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Keluar Rectangle" + "value" : "Balik" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Esci da Rectangle" + "value" : "Annulla" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangleを終了" + "value" : "元に戻す" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle 종료" + "value" : "실행 취소" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Išeiti iš Rectangle" + "value" : "Atšaukti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Avslutt Rectangle" + "value" : "Angre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle stoppen" + "value" : "Ongedaan maken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Avslutt Rectangle" + "value" : "Angra" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wyjdź z Rectangle" + "value" : "Cofnij" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Fechar Rectangle" + "value" : "Desfazer" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Sair do Rectangle" + "value" : "Desfazer" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Închide Rectangle" + "value" : "Anulează Ultima Modificare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Выход из Rectangle" + "value" : "Отменить" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Ukončiť Rectangle" + "value" : "Späť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Avsluta Rectangle" + "value" : "Ångra" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle'dan Çık" + "value" : "Geri Al" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Вийти з Rectangle" + "value" : "Відмінити" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Thoát Rectangle" + "value" : "Hoàn tác" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "退出 Rectangle" + "value" : "撤销" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "結束 Rectangle" + "value" : "還原" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "結束Rectangle" + "value" : "還原" } } } }, - "adp-cN-qkh.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Left\"; ObjectID = \"adp-cN-qkh\";", - "extractionState" : "stale", + "Dv1-io-Yv7.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Spelling and Grammar\"; ObjectID = \"Dv1-io-Yv7\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أعلى اليسار" + "value" : "التهجئة والقواعد اللغوية" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Superior esquerra" + "value" : "Ortografia i gramàtica" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Superior esquerra" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vlevo nahoře" + "value" : "Ortografia i gramàtica" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Oben links" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Top Left" + "value" : "Rechtschreibung und Grammatik" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Arriba a la izquierda" + "value" : "Ortografía y gramática" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Arriba a la izquierda" + "value" : "Ortografía y gramática" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "En haut à gauche" + "value" : "Orthographe et grammaire" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kiri Atas" + "value" : "Ejaan dan Tata Bahasa" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "In alto a sinistra" + "value" : "Ortografia e grammatica" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "左上" + "value" : "スペルと文法" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "왼쪽 위" + "value" : "맞춤법 및 문법" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kairėje viršuje" + "value" : "Rašyba ir gramatika" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Øvre venstre" + "value" : "Stavekontroll og grammatikk" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Linksboven" + "value" : "Spelling en grammatica" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Øvre venstre" + "value" : "Stavekontroll og grammatikk" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Lewy górny róg" + "value" : "Pisownia i gramatyka" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Topo esquerdo" + "value" : "Ortografia e gramática" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Topo Esquerdo" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stânga Sus" + "value" : "Ortografia e Gramática" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Слева вверху" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vľavo hore" + "value" : "Правописание и грамматика" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Övre vänstra" + "value" : "Stavning och grammatik" } }, - "tr" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sol Üst" + "value" : "Chính tả và Ngữ pháp" } }, - "uk" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Верхній лівий кут" + "value" : "拼写和语法" } - }, - "vi" : { + } + } + }, + "DVo-aG-piG.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Close\"; ObjectID = \"DVo-aG-piG\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Góc trên bên trái" + "value" : "يغلق" } }, - "zh-Hans" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "左上" + "value" : "Tanca" } }, - "zh-Hant" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "左上" + "value" : "Tanca" } }, - "zh-Hant-HK" : { + "cs" : { "stringUnit" : { "state" : "translated", - "value" : "左上" + "value" : "Zavřít" } - } - } - }, - "AEr-NX-9wW.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"190 px\"; ObjectID = \"AEr-NX-9wW\";", - "extractionState" : "stale", - "localizations" : { + }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Schließen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "190 px" + "value" : "Close" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Cerrar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Cerrar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Fermer" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Tutup" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Chiudi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "閉じる" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "닫기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Uždaryti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Lukk" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Sluiten" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Lat att" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Zamknij" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Fechar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Fechar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Închide" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Закрыть" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Zavrieť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Stäng" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Kapat" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "190 пкс" + "value" : "Закрити" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "Đóng" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "关闭" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "關閉" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "190 px" + "value" : "關閉" } } } }, - "agt-UL-0e3.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"agt-UL-0e3\";", - "extractionState" : "manual", + "Eighths" : { "localizations" : { - "ar" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "استخدم الافتراضي" + "value" : "1/8" } }, - "ca" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Ús per defecte" + "value" : "Thứ tám" } - }, - "ca-ES" : { + } + } + }, + "Extra Shortcuts" : { + "extractionState" : "manual", + "localizations" : { + "en" : { "stringUnit" : { - "state" : "translated", - "value" : "Ús per defecte" + "state" : "new", + "value" : "Extra Shortcuts" } }, - "de" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Standard verwenden" + "value" : "추가 단축키" } }, - "es" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Uso predeterminado" + "value" : "Дополнительные горячие клавиши" } }, - "es-419" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Uso predeterminado" + "value" : "Phím tắt bổ sung" } - }, - "fr" : { + } + } + }, + "F2S-fz-NVQ.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Help\"; ObjectID = \"F2S-fz-NVQ\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser la valeur par défaut" + "value" : "يساعد" } }, - "id" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Gunakan Bawaan" + "value" : "Ajuda" } }, - "it" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Usa predefinito" + "value" : "Ajuda" } }, - "ja" : { + "cs" : { "stringUnit" : { "state" : "translated", - "value" : "デフォルトを使用" + "value" : "Nápověda" } }, - "ko" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "기본값 사용" + "value" : "Hilfe" } }, - "lt" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Help" + } + }, + "es" : { "stringUnit" : { "state" : "translated", - "value" : "Naudoti pagal nutylėjimą" + "value" : "Ayuda" } }, - "nb" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk standard" + "value" : "Ayuda" } }, - "nl" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruik standaard" + "value" : "Aide" } }, - "nn" : { + "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk standard" + "value" : "Bantuan" } }, - "pl" : { + "it" : { "stringUnit" : { "state" : "translated", - "value" : "Użyj domyślnych" + "value" : "Aiuto" } }, - "pt-BR" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Usar Padrão" + "value" : "ヘルプ" } }, - "pt-PT" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Usar Padrão" + "value" : "도움말" } }, - "ru" : { + "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Использовать по умолчанию" + "value" : "Pagalba" } }, - "sv-SE" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Använd standard" + "value" : "Hjelp" } }, - "vi" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sử dụng mặc định" + "value" : "Hulp" } }, - "zh-Hans" : { + "nn" : { "stringUnit" : { "state" : "translated", - "value" : "使用默认" + "value" : "Hjelp" } - } - } - }, - "AgV-lP-6XB.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"%\"; ObjectID = \"AgV-lP-6XB\";", - "extractionState" : "stale", - "localizations" : { - "en" : { + }, + "pl" : { "stringUnit" : { - "state" : "new", - "value" : "%" + "state" : "translated", + "value" : "Pomoc" } }, - "ko" : { + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "%" + "value" : "Ajuda" } }, - "vi" : { + "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "%" + "value" : "Ajuda" } - } - } - }, - "ani-win-cell.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Animate windows (experimental)\"; ObjectID = \"ani-win-cell\";", - "extractionState" : "stale", - "localizations" : { - "en" : { + }, + "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Animate windows (experimental)" + "value" : "Ajutor" } }, - "ja" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウをアニメーション表示(実験的)" + "value" : "Помощь" } }, - "zh-Hans" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "窗口动画(实验性)" + "value" : "Pomocník" } }, - "zh-Hant" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "視窗動畫(實驗性)" + "value" : "Hjälp" } - } - } - }, - "Animation style" : { - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Animation style" + "value" : "Yardım" } }, - "ja" : { + "uk" : { "stringUnit" : { "state" : "translated", - "value" : "アニメーションの種類" + "value" : "Довідка" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trợ giúp" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "动画样式" + "value" : "帮助" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "動畫樣式" + "value" : "輔助說明" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "輔助說明" } } } }, - "aTl-1u-JFS.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Print…\"; ObjectID = \"aTl-1u-JFS\";", + "Fal-I4-PZk.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Text\"; ObjectID = \"Fal-I4-PZk\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مطبعة…" + "value" : "نص" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimeix…" + "value" : "Text" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimeix…" + "value" : "Text" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Drucken…" + "value" : "Text" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimir…" + "value" : "Texto" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimir…" + "value" : "Texto" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimer…" + "value" : "Texte" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Cetak…" + "value" : "Teks" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Stampa…" + "value" : "Testo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "プリント…" + "value" : "テキスト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "프린트…" + "value" : "텍스트" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Spausdinti…" + "value" : "Tekstas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv ut…" + "value" : "Tekst" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Afdrukken…" + "value" : "Tekst" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv ut…" + "value" : "Tekst" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Drukuj…" + "value" : "Tekst" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimir…" + "value" : "Texto" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Imprimir…" + "value" : "Texto" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Печать…" + "value" : "Текст" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv ut…" + "value" : "Text" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "In…" + "value" : "Chữ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "打印…" + "value" : "文本" } } } }, - "aUF-d1-5bR.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Window\"; ObjectID = \"aUF-d1-5bR\";", - "extractionState" : "extracted_with_value", + "FeM-D8-WVr.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Substitutions\"; ObjectID = \"FeM-D8-WVr\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نافذة او شباك" + "value" : "البدائل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Finestra" + "value" : "Substitucions" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Finestra" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Okno" + "value" : "Substitucions" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fenster" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Window" + "value" : "Ersetzungen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ventana" + "value" : "Sustituciones" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ventana" + "value" : "Sustituciones" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Fenêtre" + "value" : "Remplacements" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jendela" + "value" : "Penggantian" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Finestra" + "value" : "Sostituzioni" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウ" + "value" : "置換" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "창" + "value" : "대체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Langas" + "value" : "Pakeitimai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vindu" + "value" : "Erstatninger" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Venster" + "value" : "Vervangingen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Vindauge" + "value" : "Erstatningar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Okno" + "value" : "Zamienniki" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Janela" + "value" : "Substituições" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Janela" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fereastră" + "value" : "Substituições" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Окно" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Okno" + "value" : "Замены" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Fönster" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pencere" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вікно" + "value" : "Substitutioner" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cửa sổ" + "value" : "Sự thay thế" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "窗口" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "視窗" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "視窗" + "value" : "显示替换" } } } }, - "aXa-aM-Jaq.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Font\"; ObjectID = \"aXa-aM-Jaq\";", - "extractionState" : "manual", + "FKE-Sm-Kum.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Rectangle Help\"; ObjectID = \"FKE-Sm-Kum\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الخط" + "value" : "تعليمات المستطيل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Tipus de lletra" + "value" : "Ajuda de Rectangle" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Tipus de lletra" + "value" : "Ajuda de Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle nápověda" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Schrift" + "value" : "Rectangle-Hilfe" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Rectangle Help" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de letra" + "value" : "Ayuda de Rectangle" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de letra" + "value" : "Ayuda de Rectangle" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Police" + "value" : "Aide Rectangle" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jenis Huruf" + "value" : "Bantuan Rectangle" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Carattere" + "value" : "Aiuto su Rectangle" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "フォント" + "value" : "Rectangleヘルプ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "서체" + "value" : "Rectangle 도움말" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Šriftas" + "value" : "Rectangle Pagalba" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Font" + "value" : "Rectangle-hjelp" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lettertype" + "value" : "Rectangle hulp" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Font" + "value" : "Rectangle-hjelp" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Czcionka" + "value" : "Pomoc Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Fonte" + "value" : "Ajuda do Rectangle" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Tipo de letra" + "value" : "Ajuda do Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajutor Rectangle" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Шрифт" + "value" : "Rectangle Справка" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomocník pre Rectangle" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Typsnitt" + "value" : "Rectangle-hjälp" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle Yardım" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Довідка по Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Phông" + "value" : "Trợ giúp của Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "字体" + "value" : "Rectangle 帮助" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle 輔助說明" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle輔助說明" } } } }, - "AYu-sK-qS6.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Main Menu\"; ObjectID = \"AYu-sK-qS6\";", - "extractionState" : "extracted_with_value", + "Follow System" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Follow System" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "システムに合わせる" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "跟随系统" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "跟隨系統" + } + } + } + }, + "Fourths" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "القائمة الرئيسية" + "value" : "Quarts" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Menú principal" + "value" : "Quartes" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Menú principal" + "value" : "Quartes" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Hlavní menu" + "value" : "Čtvrtiny" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Hauptmenü" + "value" : "Viertel" } }, - "en" : { + "en-GB" : { "stringUnit" : { - "state" : "new", - "value" : "Main Menu" + "state" : "translated", + "value" : "Quarters" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Menú principal" + "value" : "Cuartos" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Menú principal" + "value" : "Cuartos" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Menu principal" + "value" : "Quarts" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Menu Utama" + "value" : "Seperempat" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Menu principale" + "value" : "Quarti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "メインメニュー" + "value" : "4分割" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "메인 메뉴" + "value" : "4등분" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pagrindinis meniu" + "value" : "Ketvirtys" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Hovedmeny" + "value" : "Fjerdedeler" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hoofdmenu" + "value" : "Kwarten" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Hovudmeny" + "value" : "Fjerdedelar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Menu główne" + "value" : "Ćwiartki" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Menu Principal" + "value" : "Quartos" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Menu principal" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Meniu Principal" + "value" : "Quartos" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Главное меню" + "value" : "Четверти" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Hlavné menu" + "value" : "Štvrtiny" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Huvudmeny" + "value" : "Fjärdedelar" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Ana Menü" + "value" : "Çeyrek" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Головне меню" + "value" : "Четверини" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Menu chính" + "value" : "Phần tư" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "主菜单" + "value" : "四等分" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "主選單" + "value" : "四等分" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "主選單" + "value" : "四等分" } } } }, - "ayu-YO-10p.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Stage Manager recent apps area\"; ObjectID = \"ayu-YO-10p\";", - "extractionState" : "stale", + "GB9-OM-e27.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Bold\"; ObjectID = \"GB9-OM-e27\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "منطقة تطبيقات مدير المرحلة الأخيرة" + "value" : "عريض" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Àrea d'aplicacions recents de Stage Manager" + "value" : "Negreta" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Àrea d'aplicacions recents de Stage Manager" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stage Manager oblast posledních aplikací" + "value" : "Negreta" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager Bereich für zuletzt verwendete Programme" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Stage Manager recent apps area" + "value" : "Fett" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "área para aplicaciones recientes en el State Manager" + "value" : "Negrita" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "área para aplicaciones recientes en el State Manager" + "value" : "Negrita" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Zone des applications récentes de Stage Manager" + "value" : "Gras" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "Cetak Tebal" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Area app recenti in Stage Manager" + "value" : "Grassetto" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ステージマネージャの最近使ったアプリケーションエリア" + "value" : "ボールド" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "스테이지 매니저 최근 앱 영역" + "value" : "볼드체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Scenos valdytojas paskutinių programų sritys" + "value" : "Paryškintas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Område for siste brukte i Stage Manager" + "value" : "Halvfeit" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "Vet" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Område for siste brukte i Stage Manager" + "value" : "Halvfeit" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "Pogrubienie" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "Negrito" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "Negrito" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "Полужирный" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager область последних приложений" + "value" : "Fetstil" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager oblasť posledných aplikácií" + "value" : "In đậm" } }, - "sv-SE" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "粗体" + } + } + } + }, + "GEO-Iw-cKr.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Format\"; ObjectID = \"GEO-Iw-cKr\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager recent apps area" + "value" : "شكل" } }, - "tr" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Stage Manager son uygulamalar alanı" + "value" : "Format" } }, - "uk" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Область недавніх застосунків Stage Manager" + "value" : "Format" } }, - "vi" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Vùng hiển thị ứng dụng hiện tại của Stage Manager" + "value" : "Format" } }, - "zh-Hans" : { + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Formato" + } + }, + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "“台前调度”最近使用的应用程序区域" + "value" : "Formato" } }, - "zh-Hant" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "「幕前調度」最近使用過的應用程式區域" + "value" : "Format" } }, - "zh-Hant-HK" : { + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Format" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Formato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "フォーマット" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "포맷" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Formatas" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Format" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Formaat" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Format" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Format" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Formato" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Formato" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Формат" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Format" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Định dạng" + } + }, + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "「幕前管理」最近使用過的應用程式區域" + "value" : "格式" } } } }, - "bg9-nw-YvU.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Gaps between windows\"; ObjectID = \"bg9-nw-YvU\";", - "extractionState" : "stale", + "gFy-Zj-RGl.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"About\"; ObjectID = \"gFy-Zj-RGl\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "فجوات بين النوافذ" + "value" : "عن" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Espai entre finestres" + "value" : "Quant a" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Espai entre finestres" + "value" : "Quant a" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Mezery mezi okny" + "value" : "O aplikaci" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Abstände zwischen Fenstern" + "value" : "Über" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Gaps between windows" + "value" : "About" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Espacio entre ventanas" + "value" : "Acerca de" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Espacio entre ventanas" + "value" : "Acerca de" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Écart entre fenêtres" + "value" : "À propos" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jarak Antar Jendela" + "value" : "Tentang" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Spazio tra le finestre" + "value" : "Informazioni" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウの間隔" + "value" : "Rectangleについて" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "창 사이 간격" + "value" : "정보" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Tarpai tarp langų" + "value" : "Apie programą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Mellomrom mellom vinduene" + "value" : "Om" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gaps between windows" + "value" : "Over" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Mellomrom mellom vindaugo" + "value" : "Om" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przestrzeń między oknami" + "value" : "O Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Espaço entre janelas" + "value" : "Sobre" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Espaços entre janelas" + "value" : "Sobre" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Goluri între ferestre" + "value" : "Despre" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Промежутки между окнами" + "value" : "О программе" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Medzery medzi oknami" + "value" : "O aplikácii" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Mellanrum mellan fönsterna" + "value" : "Om" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Pencereler arası boşluk" + "value" : "Hakkında" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Відступи між вікнами" + "value" : "Про програму" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Khoảng cách giữa các cửa sổ" + "value" : "Giới thiệu" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "窗口间空隙" + "value" : "关于" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "視窗間空隙" + "value" : "關於" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "視窗間空隙" + "value" : "關於" } } } }, - "BgM-ve-c93.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"BgM-ve-c93\";", + "Gi5-1S-RQB.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Font\"; ObjectID = \"Gi5-1S-RQB\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : " t من اليسار إلى اليمين" + "value" : "الخط" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "\tEsquerra a dreta" + "value" : "Tipus de lletra" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "\tEsquerra a dreta" + "value" : "Tipus de lletra" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "\tVon links nach rechts" + "value" : "Schrift" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "\tIzquierda a derecha" + "value" : "Tipo de letra" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "\tIzquierda a derecha" + "value" : "Tipo de letra" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "\tDe gauche à droite" + "value" : "Police" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "\tKiri ke Kanan" + "value" : "Jenis Huruf" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "\tDa sinistra a destra" + "value" : "Font" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "\t左から右" + "value" : "フォント" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "\t좌에서 우로" + "value" : "서체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "\tIš kairės į dešinę" + "value" : "Šriftas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "\tVenstre til høgre" + "value" : "Skrift" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "\tVan links naar rechts" + "value" : "Lettertype" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "\tVenstre til høgre" + "value" : "Skrift" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "\tOd lewej do prawej" + "value" : "Czcionka" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "\tDa esquerda para a direita" + "value" : "Fonte" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "\tDa esquerda para a direita" + "value" : "Tipo de letra" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "\tСлева направо" + "value" : "Шрифт" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "\tVänster till höger" + "value" : "Typsnitt" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Trái sang phải" + "value" : "Phông chữ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "\\tLeft to Right" + "value" : "字体" } } } }, - "bgn-CT-cEk.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show Colors\"; ObjectID = \"bgn-CT-cEk\";", + "GUa-eO-cwY.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"GUa-eO-cwY\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إظهار الألوان" + "value" : "استخدم الافتراضي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra colors" + "value" : "Ús predeterminat" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra colors" + "value" : "Ús predeterminat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Farben einblenden" + "value" : "Standard verwenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar colores" + "value" : "Uso predeterminado" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar colores" + "value" : "Uso predeterminado" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Afficher les couleurs" + "value" : "Utiliser la valeur par défaut" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tampilkan Warna" + "value" : "Gunakan Bawaan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra colori" + "value" : "Usa predefinito" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "カラーパネルを表示" + "value" : "デフォルトを使用" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "색상 보기" + "value" : "기본값 사용" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rodyti spalvas" + "value" : "Naudoti pagal nutylėjimą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vis farger" + "value" : "Bruk standard" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Toon kleuren" + "value" : "Gebruik standaard" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Vis fargar" + "value" : "Bruk standard" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pokaż kolory" + "value" : "Użyj domyślnych" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar Cores" + "value" : "Usar Padrão" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar Cores" + "value" : "Usar Padrão" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Показать цвета" + "value" : "Использовать по умолчанию" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Visa färger" + "value" : "Använd standard" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Hiện màu" + "value" : "Sử dụng mặc định" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "显示颜色" + "value" : "使用默认" } } } }, - "bib-Uj-vzu.title" : { - "comment" : "Class = \"NSMenu\"; title = \"File\"; ObjectID = \"bib-Uj-vzu\";", + "gVA-U4-sdL.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Paste\"; ObjectID = \"gVA-U4-sdL\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "ملف" + "value" : "معجون" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Fitxer" + "value" : "Enganxa" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Fitxer" + "value" : "Enganxa" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Soubor" + "value" : "Vložit" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Datei" + "value" : "Einfügen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "File" + "value" : "Paste" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Archivo" + "value" : "Pegar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Archivo" + "value" : "Pegar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Fichier" + "value" : "Coller" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Berkas" + "value" : "Tempel" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "File" + "value" : "Incolla" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ファイル" + "value" : "ペースト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "파일" + "value" : "붙여넣기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Failas" + "value" : "Įterpimas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Arkiv" + "value" : "Lim inn" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bestand" + "value" : "Plakken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Arkiv" + "value" : "Lim inn" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Plik" + "value" : "Wklej" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Arquivo" + "value" : "Colar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Ficheiro" + "value" : "Colar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Fișier" + "value" : "Lipește" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Файл" + "value" : "Вставка" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Súbor" + "value" : "Vložiť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Arkiv" + "value" : "Klistra in" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "File" + "value" : "Yapıştır" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Файл" + "value" : "Вставити" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tệp" + "value" : "Dán" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "文件" + "value" : "粘贴" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "檔案" + "value" : "貼上" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "檔案" + "value" : "貼上" } } } }, - "Blur appearance" : { + "H1b-Si-o9J.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Writing Direction\"; ObjectID = \"H1b-Si-o9J\";", "extractionState" : "manual", "localizations" : { - "en" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Blur appearance" + "value" : "اتجاه الكتابة" } }, - "ja" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "ぼかしの外観" + "value" : "Direcció d'escriptura" } }, - "zh-Hans" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "模糊外观" + "value" : "Direcció d'escriptura" } }, - "zh-Hant" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "模糊外觀" + "value" : "Schreibrichtung" } - } - } - }, - "Blur preview" : { - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "es" : { "stringUnit" : { "state" : "translated", - "value" : "Blur preview" + "value" : "Dirección de escritura" } }, - "ja" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "ぼかしプレビュー" + "value" : "Dirección de escritura" } }, - "zh-Hans" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "模糊预览" + "value" : "Sens d'écriture" } }, - "zh-Hant" : { + "id" : { "stringUnit" : { "state" : "translated", - "value" : "模糊預覽" + "value" : "Arah Penulisan" } - } - } - }, - "blur-preview-cell.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Blur footprint\"; ObjectID = \"blur-preview-cell\";", - "extractionState" : "stale", - "localizations" : { - "en" : { + }, + "it" : { "stringUnit" : { "state" : "translated", - "value" : "Blur footprint" + "value" : "Direzione di scrittura" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "プレビューの背景をぼかす" + "value" : "文字の向き" } }, - "zh-Hans" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "模糊预览背景" + "value" : "작성 방향" } }, - "zh-Hant" : { + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rašymo kryptis" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriveretning" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schrijfrichting" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriveretning" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kierunek pisania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Direção de Escrita" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Direção de Escrita" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Направление письма" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skrivriktning" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hướng viết" + } + }, + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "模糊預覽背景" + "value" : "书写方向" } } } }, - "BOF-NM-1cW.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Preferences…\"; ObjectID = \"BOF-NM-1cW\";", + "H8h-7b-M4v.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"View\"; ObjectID = \"H8h-7b-M4v\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "التفضيلات ..." + "value" : "منظر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Preferències…" + "value" : "Visualitza" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Preferències…" + "value" : "Visualitza" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Předvolby…" + "value" : "Zobrazit" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Einstellungen…" + "value" : "Darstellung" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Preferences…" + "value" : "View" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Preferencias…" + "value" : "Ver" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Preferencias…" + "value" : "Ver" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Préférences…" + "value" : "Afficher" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Preferensi…" + "value" : "Tampilan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Preferenze…" + "value" : "Vista" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "環境設定…" + "value" : "表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "환경설정…" + "value" : "보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nustatymai" + "value" : "Peržiūra" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Innstillinger…" + "value" : "Vis" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Voorkeuren…" + "value" : "Bekijk" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Innstillingar…" + "value" : "Vis" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Preferencje…" + "value" : "Widok" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Preferências…" + "value" : "Visualizar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Preferências…" + "value" : "Ver" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Preferințe…" + "value" : "Vizualizează" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Настройки…" + "value" : "Просмотр" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Predvoľby…" + "value" : "Zobraziť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Inställningar…" + "value" : "Visa" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Tercihler…" + "value" : "Görünüm" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Налаштування…" + "value" : "Вигляд" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cài đặt…" + "value" : "Xem" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "偏好设置…" + "value" : "显示" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "偏好設定⋯" + "value" : "顯示方式" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "偏好設定⋯" + "value" : "顯示方式" } } } }, - "Bottom Center Left Eighth" : { - "extractionState" : "stale", + "HFo-cy-zxI.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show Spelling and Grammar\"; ObjectID = \"HFo-cy-zxI\";", + "extractionState" : "manual", "localizations" : { - "ko" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "아래 가운데 왼쪽 1/8" + "value" : "إظهار التدقيق الإملائي والنحوي" } }, - "vi" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Dưới cùng Trung tâm Bên trái Thứ tám" - } - } - } - }, - "Bottom Center Right Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 가운데 오른쪽 1/8" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dưới cùng Trung tâm Bên phải Thứ tám" - } - } - } - }, - "Bottom eighths from corners; thirds" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래쪽 1/8, 모서리에서 3등분" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phần tám dưới cùng từ các góc; phần ba" - } - } - } - }, - "Bottom Left Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 왼쪽 1/8" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dưới cùng bên trái thứ tám" - } - } - } - }, - "Bottom Right Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 오른쪽 1/8" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dưới cùng bên phải thứ tám" - } - } - } - }, - "Bottom sixths from corners; thirds" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sixièmes bas à partir des coins ; tiers" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bottom sixths from corners; thirds" + "value" : "Mostrar ortografia i gramàtica" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodní šestiny z rohů; třetiny" + "value" : "Mostrar ortografia i gramàtica" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Untere Sechstel beim Ziehen aus den Ecken; Drittel" + "value" : "Rechtschreibung und Grammatik einblenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos inferiores de las esquinas; tercios" + "value" : "Mostrar ortografía y gramática" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos inferiores de las esquinas; tercios" + "value" : "Mostrar ortografía y gramática" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sixièmes bas à partir des coins ; tiers" + "value" : "Afficher l'orthographe et la grammaire" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" + "value" : "Tampilkan Ejaan dan Tata Bahasa" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sesti inferiori dagli angoli; terzi" + "value" : "Mostra ortografia e grammatica" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : " 3分割(画面端にドラッグで下側6分割)" + "value" : "スペルと文法を表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "아래쪽 1/6, 모서리에서 3등분" + "value" : "맞춤법 및 문법 보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Apatinės šeštosios nuo kampų; trečdalys" + "value" : "Rodyti rašybą ir gramatiką" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nederste sjettedel fra hjørne; tredjedeler" + "value" : "Vis stavekontroll og grammatikk" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" + "value" : "Toon spelling en grammatica" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Nedste sjettedel frå hjørne; tredjedelar" + "value" : "Vis stavekontroll og grammatikk" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" + "value" : "Pokaż pisownię i gramatykę" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" + "value" : "Mostrar ortografia e gramática" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bottom sixths from corners; thirds" + "value" : "Mostrar Ortografia e Gramática" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Нижние шестые от углов; трети" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodné šestiny z rohov; tretiny" + "value" : "Показать правописание и грамматику" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Bottom sixths from corners; thirds" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Üçte bir (köşelere yaklaşıldığında ise altıda bir)" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижні шості від кутів; третини" + "value" : "Visa stavning och grammatik" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/6 phía dưới ngay góc; 1/3" + "value" : "Hiển thị Chính tả và Ngữ pháp" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自角落则底部⅙;⅓" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "自角落則底部⅙;⅓" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "自角落則底部⅙;⅓" - } - } - } - }, - "Bottom Third" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 1/3" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ ba dưới cùng" - } - } - } - }, - "Bottom Two Thirds" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 2/3" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai phần ba dưới cùng" + "value" : "显示拼写和语法" } } } }, - "bRX-dV-iAR.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Center\"; ObjectID = \"bRX-dV-iAR\";", - "extractionState" : "stale", + "HFQ-gK-NFA.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Text Replacement\"; ObjectID = \"HFQ-gK-NFA\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { - "state" : "needs_review", - "value" : "نصف المركز" + "state" : "translated", + "value" : "استبدال النص" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat central" + "state" : "translated", + "value" : "Substitució de text" } }, "ca-ES" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat central" - } - }, - "cs" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Vycentrovat polovinu" + "state" : "translated", + "value" : "Substitució de text" } }, "de" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mittlere Hälfte" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Center" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Centre Section" + "state" : "translated", + "value" : "Text ersetzen" } }, "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad central" + "state" : "translated", + "value" : "Reemplazo de texto" } }, "es-419" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad central" + "state" : "translated", + "value" : "Reemplazo de texto" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Moitié centrale" + "state" : "translated", + "value" : "Remplacement de texte" } }, "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Separuh Tengah" + "state" : "translated", + "value" : "Penggantian Teks" } }, "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metà centrale" + "state" : "translated", + "value" : "Sostituzione testo" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "半分にして中央に表示" + "state" : "translated", + "value" : "テキストの置き換え" } }, "ko" : { "stringUnit" : { - "state" : "needs_review", - "value" : "가운데 절반" + "state" : "translated", + "value" : "삽입" } }, "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Centrinė pusė" + "state" : "translated", + "value" : "Teksto pakeitimas" } }, "nb" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Midtre halvdel" + "state" : "translated", + "value" : "Teksterstatninger" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Middelste helft" + "state" : "translated", + "value" : "Tekstvervanging" } }, "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Midtre halvdel" + "state" : "translated", + "value" : "Teksterstatningar" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Połowa na środku" + "state" : "translated", + "value" : "Zamiana tekstu" } }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metade central" + "state" : "translated", + "value" : "Substituição de Texto" } }, "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metade Central" - } - }, - "ro" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Jumătatea Centrală" + "state" : "translated", + "value" : "Substituição de Texto" } }, "ru" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Центральная половина" - } - }, - "sk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Vycentrovať polovicu" + "state" : "translated", + "value" : "Замена текста" } }, "sv-SE" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitthalvan" - } - }, - "tr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Orta Yarım" - } - }, - "uk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Центральна половина" + "state" : "translated", + "value" : "Textbyte" } }, "vi" : { "stringUnit" : { - "state" : "needs_review", - "value" : "1/2 giữa" + "state" : "translated", + "value" : "Thay thế văn bản" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", - "value" : "中间半屏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "中半" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "中半" + "state" : "translated", + "value" : "文本替换" } } } }, - "buJ-ug-pKt.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Use Selection for Find\"; ObjectID = \"buJ-ug-pKt\";", + "HIK-3r-i7E.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Check for Updates…\"; ObjectID = \"HIK-3r-i7E\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "استخدم التحديد للبحث" + "value" : "تحقق من وجود تحديثات…" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Utilitzeu la selecció per a la cerca" + "value" : "Cerca actualitzacions…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Utilitzeu la selecció per a la cerca" + "value" : "Cerca actualitzacions…" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Hledat výběr" + "value" : "Zkontrolovat aktualizace…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Auswahl für Suche übernehmen" + "value" : "Nach Updates suchen…" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Use Selection for Find" + "value" : "Check for Updates…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Usar la selección para buscar" + "value" : "Buscar actualizaciones…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Usar la selección para buscar" + "value" : "Buscar actualizaciones…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser la sélection pour la recherche" + "value" : "Mettre à jour…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gunakan Pilihan untuk Temukan" + "value" : "Periksa Pembaruan…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Usa selezione per trovare" + "value" : "Controlla aggiornamenti…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "選択部分を検索に使用" + "value" : "アップデートを確認…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "선택 부분으로 찾기" + "value" : "업데이트 확인…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Naudoti pasirinktą paieškai" + "value" : "Tikrinti atnaujinimus…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk markert tekst for å finne" + "value" : "Se etter oppdateringer…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruik selectie voor zoeken" + "value" : "Kijk of er updates zijn…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk markert tekst for å finna" + "value" : "Sjå etter oppdateringar…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Użyj wyboru, aby znaleźć" + "value" : "Sprawdź aktualizacje…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Usar seleção para buscar" + "value" : "Procurar por atualizações…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Usar seleção para procurar" + "value" : "Verifique se há atualizações…" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Folosește Selecția pentru Căutare" + "value" : "Verifică Actualizări…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Использовать выбранное для поиска" + "value" : "Проверить обновления…" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Použiť výber pri hľadaní" + "value" : "Skontrolovať aktualizácie…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Använd markerad för att söka" + "value" : "Sök efter uppdateringar…" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Use Selection for Find" + "value" : "Güncellemeleri kontrol et…" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Використовувати виділення для пошуку" + "value" : "Перевірити оновлення…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Dùng lựa chọn để tìm kiếm" + "value" : "Kiểm tra các bản cập nhật…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "查找所选内容" + "value" : "检查更新…" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "使用所選範圍尋找" + "value" : "檢查更新⋯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "使用所選範圍尋找" + "value" : "檢查更新項目⋯" } } } }, - "Bw7-FT-i3A.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Save As…\"; ObjectID = \"Bw7-FT-i3A\";", + "hQb-2v-fYv.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Smart Quotes\"; ObjectID = \"hQb-2v-fYv\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حفظ باسم ..." + "value" : "اقتباسات ذكية" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Anomena i desa…" + "value" : "Cites intel·ligents" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Anomena i desa…" + "value" : "Cites intel·ligents" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Speichern unter…" + "value" : "Intelligente Anführungszeichen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Guardar como…" + "value" : "Citas inteligentes" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Guardar como…" + "value" : "Citas inteligentes" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Enregistrer sous…" + "value" : "Citations intelligentes" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Simpan Sebagai…" + "value" : "Kutipan Pintar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Salva con nome…" + "value" : "Virgolette intelligenti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "名前を付けて保存…" + "value" : "スマート引用符" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "다른 이름으로 저장…" + "value" : "스마트 인용" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Išsaugoti kaip…" + "value" : "Intelektualios kabutės" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lagre som…" + "value" : "Smarte hermetegn" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Opslaan als…" + "value" : "Slimme aanhalingstekens" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Lagre som…" + "value" : "Smarte hermeteikn" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zapisz jako…" + "value" : "Inteligentne cudzysłowy" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Salvar como…" + "value" : "Citações Inteligentes" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Guardar como…" + "value" : "Citações Inteligentes" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Сохранить как…" + "value" : "Интеллектуальные кавычки" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Spara som…" + "value" : "Smarta citat" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Lưu dưới dạng…" + "value" : "Trích dẫn thông minh" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "存储为…" + "value" : "智能引号" } } } }, - "c8a-y6-VQd.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Transformations\"; ObjectID = \"c8a-y6-VQd\";", - "extractionState" : "manual", + "HyV-fh-RgO.title" : { + "comment" : "Class = \"NSMenu\"; title = \"View\"; ObjectID = \"HyV-fh-RgO\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "التحولات" + "value" : "منظر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Transformacions" + "value" : "Visualitza" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Transformacions" + "value" : "Visualitza" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobrazit" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Transformationen" + "value" : "Darstellung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "View" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Transformaciones" + "value" : "Ver" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Transformaciones" + "value" : "Ver" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Transformations" + "value" : "Afficher" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Transformasi" + "value" : "Tampilan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Trasformazioni" + "value" : "Vista" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "変換" + "value" : "表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "변형" + "value" : "보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Transformacijos" + "value" : "Peržiūra" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Endre bokstavtype" + "value" : "Vis" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Transformaties" + "value" : "Bekijk" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Endra bokstavtype" + "value" : "Vis" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przekształcenia" + "value" : "Widok" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Transformações" + "value" : "Visualizar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Transformações" + "value" : "Ver" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vizualizează" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Преобразования" + "value" : "Просмотр" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobraziť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Transformationer" + "value" : "Visa" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Görünüm" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вигляд" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chuyển đổi" + "value" : "Xem" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "转换" + "value" : "显示" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示方式" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "顯示方式" } } } }, - "C9v-g0-DH8.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Restore\"; ObjectID = \"C9v-g0-DH8\";", - "extractionState" : "stale", + "hz2-CU-CR7.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Check Document Now\"; ObjectID = \"hz2-CU-CR7\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يعيد" + "value" : "تحقق من المستند الآن" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Restaura" + "value" : "Comproveu ara el document" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Restaura" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obnovit" + "value" : "Comproveu ara el document" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wiederherstellen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Restore" + "value" : "Dokument jetzt prüfen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar" + "value" : "Verificar documento ahora" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar" + "value" : "Verificar documento ahora" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurer" + "value" : "Vérifier le document maintenant" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pulihkan" + "value" : "Periksa Dokumen Sekarang" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ripristina" + "value" : "Controlla documento ora" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "元に戻す" + "value" : "書類を今すぐチェック" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "복원" + "value" : "지금 문서 검사" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Atkurti" + "value" : "Patikrinkite dokumentą dabar" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tilbakestill" + "value" : "Kontroller dokumentet nå" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Herstel" + "value" : "Controleer nu het document" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tilbakestill" + "value" : "Kontroller dokumentet no" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przywróć" + "value" : "Sprawdź dokument teraz" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar" + "value" : "Verificar documento agora" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar" + "value" : "Verificar documento agora" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Restabilire" + "value" : "Проверьте документ сейчас" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Восстановить" + "value" : "Kontrollera dokument nu" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Obnoviť" + "value" : "Kiểm tra tài liệu ngay" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Återställ" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Önceki Boyuta Getir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Відновити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khôi phục" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "恢复" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "復原" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "回復" + "value" : "立即检查文稿" } } } }, - "Cancel" : { - "extractionState" : "stale", + "hz9-B4-Xy5.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Services\"; ObjectID = \"hz9-B4-Xy5\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Annuler" + "value" : "خدمات" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel·la" + "value" : "Serveis" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel·la" + "value" : "Serveis" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Služby" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Abbrechen" + "value" : "Dienste" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Services" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Cancelar" + "value" : "Servicios" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cancelar" + "value" : "Servicios" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Annuler" + "value" : "Services" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Batal" + "value" : "Layanan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Annulla" + "value" : "Servizi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "キャンセル" + "value" : "サービス" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "취소" + "value" : "서비스" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Atšaukti" + "value" : "Paslaugos" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Avbryt" + "value" : "Tjenester" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel" + "value" : "Diensten" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Avbryt" + "value" : "Tenester" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel" + "value" : "Usługi" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Cancelar" + "value" : "Serviços" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel" + "value" : "Serviços" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicii" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Отмена" + "value" : "Службы" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Zrušiť" + "value" : "Služby" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Avbryt" + "value" : "Tjänster" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servisler" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Скасувати" + "value" : "Сервіси" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Huỷ" + "value" : "Dịch vụ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "取消" + "value" : "服务" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "取消" + "value" : "服務" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "取消" + "value" : "服務" } } } }, - "cBj-76-2E7.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Not Authorized to Control Your Computer\"; ObjectID = \"cBj-76-2E7\";", - "extractionState" : "extracted_with_value", + "I0S-gh-46l.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Subscript\"; ObjectID = \"I0S-gh-46l\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "غير مصرح له بالتحكم في جهاز الكمبيوتر الخاص بك" + "value" : "مخطوطة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "No està autoritzat per controlar el vostre ordinador" + "value" : "Subíndex" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "No està autoritzat per controlar el vostre ordinador" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ovládání počítače neautorizováno" + "value" : "Subíndex" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nicht berechtigt, Deinen Computer zu steuern" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Not Authorized to Control Your Computer" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not Authorised to Control Your Computer" + "value" : "Tiefgestellt" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "No está autorizado para controlar su computadora" + "value" : "Subíndice" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No está autorizado para controlar su computadora" + "value" : "Subíndice" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Non autorisé à contrôler votre ordinateur" + "value" : "Indice" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tidak Berwenang untuk Mengontrol Komputer Anda" + "value" : "Tulisan di Bawah Garis" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Non autorizzato a controllare il tuo computer" + "value" : "Pedice" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "コンピューターを制御する権限がありません" + "value" : "添字" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "컴퓨터를 제어할 권한이 없습니다" + "value" : "아래 첨자" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Neautorizuotas kompiuterio valdymui" + "value" : "Prenumeratorius" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke løyve til å styre datamaskina di" + "value" : "Senka" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Niet bevoegd om uw computer te besturen" + "value" : "Subscript" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Ikkje løyve til å styra datamaskina di" + "value" : "Senka" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Brak autoryzacji do kontroli komputera" + "value" : "Subskrybuj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Não autorizado para controlar seu computador" + "value" : "Subscrito" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Não autorizado a controlar o seu computador" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neautorizat pentru a Controla Dispozitivul Tău" + "value" : "Subscrito" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не авторизован для управления компьютером" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nemá oprávnenie ovládať tvoj počítač" + "value" : "Подписчик" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Inte behörig att styra din dator" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bilgisayarınızı kontrol etme yetkisi yok" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Не авторизовано для керування вашим комп’ютером" + "value" : "Index" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Không đủ quyền để diều khiển máy tính của bạn" + "value" : "Chỉ số dưới" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "未获授权控制您的电脑" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "未被授權來控制您的電腦" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "未被授權來控制你的電腦" + "value" : "下标" } } } }, - "cDB-IK-hbR.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"cDB-IK-hbR\";", + "i1d-Er-qST.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Smaller\"; ObjectID = \"i1d-Er-qST\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "استخدام لا شيء" + "value" : "الأصغر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Utilitzar cap" + "value" : "Més petit" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Utilitzar cap" + "value" : "Més petit" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Keine verwenden" + "value" : "Kleiner" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Usar ninguno" + "value" : "Más pequeño" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Usar ninguno" + "value" : "Más pequeño" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ne rien utiliser" + "value" : "Plus petit" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tidak Gunakan Apapun" + "value" : "Lebih Kecil" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Non usare" + "value" : "Più piccolo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "使用しない" + "value" : "小さく" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "사용하지 않음" + "value" : "작게" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Nenaudoti" + "value" : "Mažiau" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk ingen" + "value" : "Mindre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruik geen" + "value" : "Kleiner" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk ingen" + "value" : "Mindre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie używaj żadnego" + "value" : "Mniejszy" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Usar nenhum" + "value" : "Menor" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Nenhum" + "value" : "Menor" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не использовать" + "value" : "Меньше" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Använd ingen" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không sử dụng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "都不使用" - } - } - } - }, - "Conflict with macOS tiling" : { - "extractionState" : "manual", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Konflikt mit macOS Fenstermanagement" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "macOS のタイル表示機能との競合" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "macOS 타일 정리 기능과 충돌" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Konflikt s umiestnením dlaždíc v macOS" + "value" : "Mindre" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Xung đột với ô xếp macOS" + "value" : "Nhỏ hơn" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "与 macOS 窗口平铺功能冲突" + "value" : "较小" } } } }, - "Conflict with system setting" : { - "extractionState" : "stale", + "IAo-SY-fd9.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Open…\"; ObjectID = \"IAo-SY-fd9\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Conflit avec le paramètre système" + "value" : "يفتح…" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Obre…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Obre…" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Otevřít…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Konflikt mit Systemeinstellung" + "value" : "Öffnen…" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Open…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Conflicto con los ajustes del sistema" + "value" : "Abrir…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Conflicto con los ajustes del sistema" + "value" : "Abrir…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Conflit avec le paramètre système" + "value" : "Ouvrir…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Buka…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Conflitto con Impostazioni di Sistema" + "value" : "Apri…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "システム設定との競合" + "value" : "開く…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "시스템 설정과 충돌" + "value" : "열기…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Konfliktas su sistemos nustatymu" + "value" : "Atidaryti…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Konflikt med systeminnstillingene" + "value" : "Åpne…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Open…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Konflikt med systeminnstillingane" + "value" : "Opne…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Otwórz…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Conflito com as configurações do sistema" + "value" : "Abrir…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Abrir…" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Deschide…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Конфликт с системными настройками" + "value" : "Открыть…" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Konflikt so systémovým nastavením" + "value" : "Otvoriť…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Öppna…" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sistem ayarlarıyla çakışma" + "value" : "Aç…" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "Відкрити…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Xung đội với cài đặt hệ thống" + "value" : "Mở…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "与系统设置冲突" + "value" : "打开…" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "與系統設定衝突" + "value" : "打開⋯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "Conflict with system setting" + "value" : "開啟⋯" } } } }, - "Corners" : { + "ijk-EB-dga.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Baseline\"; ObjectID = \"ijk-EB-dga\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Coins" + "value" : "حدود" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Racons" + "value" : "Línia de base" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Racons" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rohy" + "value" : "Línia de base" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ecken" + "value" : "Schriftlinie" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Esquinas" + "value" : "Línea de base" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Esquinas" + "value" : "Línea de base" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Coins" + "value" : "Ligne de base" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sudur" + "value" : "Garis Dasar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Angoli" + "value" : "Linea base" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "画面端" + "value" : "ベースライン" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "모서리" + "value" : "기준선" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kampai" + "value" : "Pagrindinis rodiklis" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Hjørne" + "value" : "Skriftlinje" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Corners" + "value" : "Basislijn" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Hjørne" + "value" : "Skriftline" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Narożniki" + "value" : "Poziom bazowy" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Cantos" + "value" : "Linha de base" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Cantos" + "value" : "Base de referência" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Углы" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rohy" + "value" : "Базовый показатель" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Hörn" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Köşeler" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Кути" + "value" : "Baslinje" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Các góc" + "value" : "Đường cơ sở" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "角落" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "角落" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "角落" + "value" : "基线" } } } }, - "cqv-fj-IhA.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Selection\"; ObjectID = \"cqv-fj-IhA\";", + "J5U-5w-g23.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Justify\"; ObjectID = \"J5U-5w-g23\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اختيار" + "value" : "يبرر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Selecció" + "value" : "Justificar" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Selecció" + "value" : "Justificar" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Auswahl" + "value" : "Blocksatz" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Selección" + "value" : "Justificar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Selección" + "value" : "Justificar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sélection" + "value" : "Justifier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pilihan" + "value" : "Rata Kanan Kiri" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Selezione" + "value" : "Giustifica" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "選択" + "value" : "両端揃え" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "선택 부분" + "value" : "좌우 정렬" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pasirinkimas" + "value" : "Lygiuoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Utvalg" + "value" : "Juster" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Selectie" + "value" : "Uitlijnen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Utval" + "value" : "Juster" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wybór" + "value" : "Wyjustuj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Seleção" + "value" : "Justificar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Seleção" + "value" : "Justificar" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Выбор" + "value" : "Выровнять" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Markerade" + "value" : "Justera" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Lựa chọn" + "value" : "Căn chỉnh" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "所选内容" + "value" : "两端对齐" } } } }, - "cRm-wn-Yv6.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Third\"; ObjectID = \"cRm-wn-Yv6\";", - "extractionState" : "stale", + "J7y-lM-qPV.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"J7y-lM-qPV\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الثلث الأخير" + "value" : "استخدام لا شيء" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Últim terç" + "value" : "Utilitzar cap" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Últim terç" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poslední třetina" + "value" : "Utilitzar cap" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Letztes Drittel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Last Third" + "value" : "Nicht verwenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Último tercio" + "value" : "Usar ninguno" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Último tercio" + "value" : "Usar ninguno" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers du bas" + "value" : "Ne rien utiliser" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sepertiga Terakhir" + "value" : "Tidak Gunakan Apapun" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ultimo terzo" + "value" : "Non usare" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "1/3にして右寄せ" + "value" : "使用しない" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "마지막 1/3" + "value" : "사용하지 않음" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Paskutinis trečdalis" + "value" : "Nenaudoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Siste tredjedel" + "value" : "Bruk ingen" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Laatste derde" + "value" : "Gebruik geen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Siste tredjedel" + "value" : "Bruk ingen" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jedna trzecia z prawej" + "value" : "Nie używaj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Último terço" + "value" : "Usar nenhum" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Último Terço" + "value" : "Nenhum" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Ultima Treime" + "value" : "Не использовать" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Последняя треть" + "value" : "Använd ingen" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Posledná tretina" + "value" : "Không sử dụng" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Sista tredje" + "value" : "都不使用" } - }, - "tr" : { + } + } + }, + "jBQ-r6-VK2.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Kern\"; ObjectID = \"jBQ-r6-VK2\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Son üçte bir" + "value" : "كيرن" } }, - "uk" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Остання третина" + "value" : "Kern" } }, - "vi" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "1/3 cuối" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右首1/3" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右首1/3" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右1/3" - } - } - } - }, - "CUR-SD-CEL.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Use cursor position for screen detection\"; ObjectID = \"CUR-SD-CEL\";", - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Use cursor position for screen detection" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "화면 감지에 커서 위치 사용" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sử dụng vị trí con trỏ để nhận diện màn hình" - } - } - } - }, - "Currently using: " : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configuration actuelle : " - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "S'utilitza actualment: " - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "S'utilitza actualment: " + "value" : "Kern" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Aktuell verwendet: " + "value" : "Zeichenabstand" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Usando actualmente: " + "value" : "Kern" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Usando actualmente: " + "value" : "Kern" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Configuration actuelle : " + "value" : "Kern" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Currently using: " + "value" : "Kern" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Attualmente in uso: " + "value" : "Kern" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "現在の設定: " + "value" : "カーニング" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "현재 사용 중인 단축키: " + "value" : "자간" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Dabar naudojama: " + "value" : "Kernas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruker nå: " + "value" : "Kniping" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Currently using: " + "value" : "Kern" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruker no: " + "value" : "Kniping" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Currently using: " + "value" : "Kern" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Usando atualmente:" + "value" : "Kern" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Currently using: " + "value" : "Kern" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Сейчас используется: " - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Momentálne používané:" + "value" : "Керн" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Använder för närvarande: " - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Використовується: " + "value" : "Kerning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Hiện đang sử dụng:" + "value" : "Điều chỉnh khoảng cách giữa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前使用中:" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "目前正在使用:" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "目前正在使用:" + "value" : "字距调整" } } } }, - "cwL-P1-jid.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Smart Links\"; ObjectID = \"cwL-P1-jid\";", + "jFq-tB-4Kx.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"jFq-tB-4Kx\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "روابط ذكية" + "value" : " t من اليمين إلى اليسار" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Enllaços intel·ligents" + "value" : "\tDreta a esquerra" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Enllaços intel·ligents" + "value" : "\tDreta a esquerra" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Intelligente Web- und E-Mail-Links" + "value" : "\tVon rechts nach links" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Enlaces inteligentes" + "value" : "\tDerecha a izquierda" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Enlaces inteligentes" + "value" : "\tDerecha a izquierda" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Liens intelligents" + "value" : "\tDe droite à gauche" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tautan Pintar" + "value" : "\tKanan ke Kiri" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Link intelligenti" + "value" : "\tDa destra a sinistra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スマートリンク" + "value" : "\t右から左" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "스마트 링크" + "value" : "\t오른쪽에서 왼쪽" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Intelektualios nuorodos" + "value" : "\tIš dešinės į kairę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Smarte lenker" + "value" : "\tHøgre til venstre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slimme links" + "value" : "\tVan rechts naar links" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Smarte lenkar" + "value" : "\tHøgre til venstre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Inteligentne łącza" + "value" : "\tZ prawej strony do lewej" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Links Inteligentes" + "value" : "\tDa direita para a esquerda" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Links Inteligentes" + "value" : "\tDa direita para a esquerda" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Интеллектуальные ссылки" + "value" : "\tСправа налево" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Smarta länkar" + "value" : "\tHöger till vänster" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Liên kết thông minh" + "value" : "\\tPhải sang trái" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "智能链接" + "value" : "\\tRight to Left" } } } }, - "d7y-s8-7GE.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Top\"; ObjectID = \"d7y-s8-7GE\";", - "extractionState" : "stale", + "jxe-nr-LDQ.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"About\"; ObjectID = \"jxe-nr-LDQ\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { - "state" : "needs_review", - "value" : "النصف العلوي" + "state" : "translated", + "value" : "عن" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat superior" + "state" : "translated", + "value" : "Quant a" } }, "ca-ES" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat superior" + "state" : "translated", + "value" : "Quant a" } }, "cs" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Horní polovina" + "state" : "translated", + "value" : "O aplikaci" } }, "de" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Obere Hälfte" + "state" : "translated", + "value" : "Über" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Top" + "value" : "About" } }, "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad superior" + "state" : "translated", + "value" : "Acerca de" } }, "es-419" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad superior" + "state" : "translated", + "value" : "Acerca de" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Moitié du haut" + "state" : "translated", + "value" : "À propos" } }, "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Setengah Atas" + "state" : "translated", + "value" : "Tentang" } }, "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metà superiore" + "state" : "translated", + "value" : "Informazioni" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "上半分" + "state" : "translated", + "value" : "Rectangleについて" } }, "ko" : { "stringUnit" : { - "state" : "needs_review", - "value" : "위쪽 절반" + "state" : "translated", + "value" : "정보" } }, "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Viršutinė pusė" + "state" : "translated", + "value" : "Apie Rectangle" } }, "nb" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Øverste halvdel" + "state" : "translated", + "value" : "Om" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Bovenste helft" + "state" : "translated", + "value" : "Over" } }, "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Øvste halvdel" + "state" : "translated", + "value" : "Om" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Górna połowa" + "state" : "translated", + "value" : "O Rectangle" } }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metade superior" + "state" : "translated", + "value" : "Sobre" } }, "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metade superior" + "state" : "translated", + "value" : "Sobre" } }, "ro" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Jumătatea de Sus" + "state" : "translated", + "value" : "Despre" } }, "ru" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Верхняя половина" + "state" : "translated", + "value" : "О Rectangle" } }, "sk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Horná polovica" + "state" : "translated", + "value" : "O aplikácii" } }, "sv-SE" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Övre halvan" + "state" : "translated", + "value" : "Om" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Üst Yarım" + "state" : "translated", + "value" : "Hakkında" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Верхня половина" + "state" : "translated", + "value" : "Про програму" } }, "vi" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Nửa trên" + "state" : "translated", + "value" : "Giới thiệu" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", - "value" : "上半屏" + "state" : "translated", + "value" : "关于" } }, "zh-Hant" : { "stringUnit" : { - "state" : "needs_review", - "value" : "上半" + "state" : "translated", + "value" : "關於" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "needs_review", - "value" : "上半" + "state" : "translated", + "value" : "關於" } } } }, - "d9c-me-L2H.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Text\"; ObjectID = \"d9c-me-L2H\";", + "jxT-CU-nIS.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Format\"; ObjectID = \"jxT-CU-nIS\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نص" + "value" : "شكل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Text" + "value" : "Format" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Text" + "value" : "Format" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Text" + "value" : "Format" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Texto" + "value" : "Formato" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Texto" + "value" : "Formato" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Texte" + "value" : "Format" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Teks" + "value" : "Format" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Testo" + "value" : "Formato" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "テキスト" + "value" : "フォーマット" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "텍스트" + "value" : "포맷" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Tekstas" + "value" : "Formatas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tekst" + "value" : "Format" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tekst" + "value" : "Formaat" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tekst" + "value" : "Format" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Tekst" + "value" : "Format" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Texto" + "value" : "Formato" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Texto" + "value" : "Formato" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Текст" + "value" : "Формат" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Text" + "value" : "Format" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chữ" + "value" : "Định dạng" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "文本" + "value" : "格式" } } } }, - "d9M-CD-aMd.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Make Lower Case\"; ObjectID = \"d9M-CD-aMd\";", + "KaW-ft-85H.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Revert to Saved\"; ObjectID = \"KaW-ft-85H\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "جعل الأحرف الصغيرة" + "value" : "العودة إلى المحفوظات" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Converteix a minúscules" + "value" : "Torna al desat" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Converteix a minúscules" + "value" : "Torna al desat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Kleinschreiben" + "value" : "Änderungen zurücksetzen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Convertir a minúsculas" + "value" : "Volver a Guardado" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Convertir a minúsculas" + "value" : "Volver a Guardado" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Passer en minuscules" + "value" : "Revenir au dernier enregistrement" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Buat Huruf Kecil" + "value" : "Kembali ke Simpanan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Rendi minuscolo" + "value" : "Ritorna a stato salvato" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "小文字にする" + "value" : "保存済みに戻す" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "소문자로 만들기" + "value" : "다음으로 복귀" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Vesti į mažąjį registrą" + "value" : "Grąžinti į išsaugotą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk små bokstaver" + "value" : "Gå tilbake til lagra" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Maak kleine letters" + "value" : "Terug naar opgeslagen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk små bokstavar" + "value" : "Gå attende til lagra" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zmień na małe litery" + "value" : "Przywróć do zapisanego" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Converter em Minúsculas" + "value" : "Descartar alterações" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Minúsculas" + "value" : "Reverter para Guardado" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Привести к нижнему регистру" + "value" : "Вернуть к сохранённому" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ändra till gemener" + "value" : "Återgå till sparad" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Viết chữ thường" + "value" : "Quay lại mục đã lưu" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "变为小写" + "value" : "复原到已存储版本" } } } }, - "D99-0O-MB6.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Ignore frontmost.app\"; ObjectID = \"D99-0O-MB6\";", + "Kd2-mp-pUS.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show All\"; ObjectID = \"Kd2-mp-pUS\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تجاهل frontmost.app" + "value" : "عرض الكل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Ignora frontmost.app" + "value" : "Mostra-ho tot" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Ignora frontmost.app" + "value" : "Mostra-ho tot" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorovat frontmost.app" + "value" : "Zobrazit vše" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "frontmost.app ignorieren" + "value" : "Alle einblenden" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Ignore frontmost.app" + "value" : "Show All" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorar frontmost.app" + "value" : "Mostrar todo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorar frontmost.app" + "value" : "Mostrar todo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorer frontmost.app" + "value" : "Tout afficher" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Abaikan frontmost.app" + "value" : "Tampilan Semua" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ignora frontmost.app" + "value" : "Mostra tutti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "frontmost.appを無視" + "value" : "すべて表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "frontmost.app 무시" + "value" : "모두 보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ignoruoti frontmost.app" + "value" : "Rodyti viską" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorer frontmost.app" + "value" : "Vis alle" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Negeer frontmost.app" + "value" : "Toon alle" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorer frontmost.app" + "value" : "Vis alle" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ignoruj frontmost.app" + "value" : "Pokaż wszystko" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorar frontmost.app" + "value" : "Mostrar todos" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorar frontmost.app" + "value" : "Mostrar todos" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ignoră frontmost.app" + "value" : "Arată Toate" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Игнорировать frontmost.app" + "value" : "Показать всё" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorovať frontmost.app" + "value" : "Zobraziť všetko" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ignorera frontmost.app" + "value" : "Visa allt" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "frontmost.app uygulamasını yoksay" + "value" : "Tümünü Göster" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ігнорувати frontmost.app" + "value" : "Показати все" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Bỏ qua frontmost.app" + "value" : "Hiển thị tất cả" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "忽略 frontmost.app" + "value" : "显示所有" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "忽略 frontmost.app" + "value" : "顯示所有" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "忽略frontmost.app" + "value" : "顯示所有" } } } }, - "Dark" : { + "kIP-vf-haE.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show Sidebar\"; ObjectID = \"kIP-vf-haE\";", "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dark" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ダーク" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "深色" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "深色" - } - } - } - }, - "Default Shortcuts" : { - "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Raccourcis par défaut" + "value" : "إظهار الشريط الجانبي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Dreceres predeterminades" + "value" : "Mostra barra lateral" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Dreceres predeterminades" + "value" : "Mostra barra lateral" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Standard-Tastaturkurzbefehle" + "value" : "Seitenleiste einblenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Atajos por defecto" + "value" : "Mostrar barra lateral" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Atajos por defecto" + "value" : "Mostrar barra lateral" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Raccourcis par défaut" + "value" : "Afficher la barre latérale" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pintasan Bawaan" + "value" : "Tampilkan Bilah Samping" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Abbreviazioni predefinite" + "value" : "Mostra barra laterale" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "デフォルトのショートカット" + "value" : "サイドバーを表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "기본 단축키 선택" + "value" : "사이드바 보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Numatytieji karštieji klavišai" + "value" : "Rodyti šoninį skydelį" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Standardsnarvegar" + "value" : "Vis sidefeltet" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Default Shortcuts" + "value" : "Toon zijbalk" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Standardsnarvegar" + "value" : "Vis sidefeltet" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Default Shortcuts" + "value" : "Pokaż pasek boczny" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Atalhos padrões" + "value" : "Mostrar barra lateral" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Default Shortcuts" + "value" : "Mostrar Barra lateral" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Горячие клавиши по-умолчанию" + "value" : "Показать боковую панель" } }, - "sk" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Predvolené skratky" + "value" : "Visa sidofältet" } }, - "sv-SE" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Standardgenvägar" + "value" : "Hiển thị thanh bên" } }, - "uk" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Типові комбінації клавіш" + "value" : "显示边栏" } - }, - "vi" : { + } + } + }, + "Larger Width" : { + "extractionState" : "manual", + "localizations" : { + "en" : { "stringUnit" : { - "state" : "translated", - "value" : "Shortcut mặc định" + "state" : "new", + "value" : "Larger Width" } }, - "zh-Hans" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "默认快捷键" + "value" : "너비 크게" } }, - "zh-Hant" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "預設快速鍵" + "value" : "Увеличить ширину" } }, - "zh-Hant-HK" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "預設快捷鍵" + "value" : "Chiều rộng lớn hơn" } } } }, - "DG2-BN-GPE.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Right\"; ObjectID = \"DG2-BN-GPE\";", - "extractionState" : "stale", + "Lbh-J2-qVU.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"Lbh-J2-qVU\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يمين" + "value" : " t من اليسار إلى اليمين" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Right" + "value" : "\tEsquerra a dreta" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Right" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right" + "value" : "\tEsquerra a dreta" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rechts" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Right" + "value" : "\tVon links nach rechts" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Derecha" + "value" : "\tIzquierda a derecha" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Derecha" + "value" : "\tIzquierda a derecha" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Droit" + "value" : "\tDe gauche à droite" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Right" + "value" : "\tKiri ke Kanan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Destra" + "value" : "\tDa sinistra a destra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "右" + "value" : "\t左から右" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "오른쪽" + "value" : "\t왼쪽에서 오른쪽" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Dešinė" + "value" : "\tIš kairės į dešinę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Høgre" + "value" : "\tVenstre til høgre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Right" + "value" : "\tVan links naar rechts" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Høgre" + "value" : "\tVenstre til høgre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Right" + "value" : "\tOd lewej do prawej" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Direita" + "value" : "\tDa esquerda para a direita" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Right" + "value" : "\tDa Esquerda para a Direita" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Right" + "value" : "\tСлева направо" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Справа" + "value" : "\tVänster till höger" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Vpravo" + "value" : "\\tTrái sáng phải" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Right" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sağ" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Правий" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右侧" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右側" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right" - } - } - } - }, - "DHt-cE-Bl0.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Toggle Todo\"; ObjectID = \"DHt-cE-Bl0\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تبديل Todo" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "To-do-Modus aktivieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Toggle Todo" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alternar modo 'Todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alternar modo 'Todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Activer/Désactiver Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Attiva/disattiva In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todoモードの切り替え" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 켜기/끄기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perjungti Todo" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slå av/på Gjøreliste" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slå av/på Gjereliste" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Включить режим Todo приложения" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prepnúť Todo" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo'yu etkinleştir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перемкнути Завдання" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật/tắt Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用/禁用待办模式" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "切換待辦模式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toggle Todo" - } - } - } - }, - "Direct resize" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direct resize" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ウインドウを直接リサイズ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "直接缩放窗口" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "直接縮放視窗" - } - } - } - }, - "Disable in macOS" : { - "extractionState" : "manual", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "In Systemeinstellungen deaktivieren" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "macOS 側を無効化" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "macOS의 기능 끄기" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vypnúť v macOS" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vô hiệu hóa trong macOS" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在 macOS 里禁用" - } - } - } - }, - "Disable in Rectangle" : { - "extractionState" : "manual", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "In Rectangle deaktivieren" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 側を無効化" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle의 기능 끄기" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vypnúť v Rectangle" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vô hiệu hóa trong Rectangle" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在 Rectangle 里禁用" - } - } - } - }, - "Dismiss" : { - "extractionState" : "manual", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abbrechen" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "無視" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "무시" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zatvoriť" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Huỷ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "忽略" - } - } - } - }, - "Display" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moniteur" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Displej" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bildschirm" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moniteur" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schermo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ディスプレイ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "디스플레이" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ekranas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skjerm" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Display" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skjerm" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ekran" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tela" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ecrã" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дисплей" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Displej" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skärm" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ekran" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дисплей" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示器" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示器" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示器" - } - } - } - }, - "dMs-cI-mzQ.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"File\"; ObjectID = \"dMs-cI-mzQ\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "ملف" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fitxer" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fitxer" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Soubor" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Datei" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "File" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Archivo" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Archivo" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fichier" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Berkas" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "File" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ファイル" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "파일" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Failas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arkiv" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bestand" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arkiv" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plik" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arquivo" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ficheiro" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fișier" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Файл" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Súbor" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arkiv" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dosya" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Файл" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tệp" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文件" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "檔案" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "檔案" - } - } - } - }, - "Drag to screen edge tiling is enabled in both Rectangle and macOS." : { - "extractionState" : "manual", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Das Ziehen zum Bildschirmrand für das Anordnen von Fenstern ist sowohl in Rectangle als auch in den macOS Systemeinstellungen aktiviert." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "\"画面の端にドラッグしてタイル表示\"が、Ractangle と macOS の両方で有効になっています。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "화면 가장자리로 드래그해 타일을 정렬하는 기능이 Rectangle과 macOS 설정에서 모두 켜져 있습니다." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Potiahnutie na okraj obrazovky je zapnuté v Rectangle aj macOS." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tính năng kéo để ghép cạnh màn hình được bật trong cả Rectangle và macOS." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在 Rectangle 和 macOS 中都启用了拖移窗口至屏幕边缘实现平铺" - } - } - } - }, - "dRJ-4n-Yzg.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Undo\"; ObjectID = \"dRJ-4n-Yzg\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الغاء التحميل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desfés" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desfés" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zpět" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Widerrufen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Undo" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deshacer" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deshacer" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annuler" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Balik" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annulla" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "元に戻す" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "실행 취소" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atšaukti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Angre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ongedaan maken" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Angra" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cofnij" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desfazer" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desfazer" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anulează Ultima Modificare" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отменить" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Späť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ångra" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Geri Al" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Відмінити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hoàn tác" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "撤销" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "還原" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "還原" - } - } - } - }, - "Dv1-io-Yv7.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Spelling and Grammar\"; ObjectID = \"Dv1-io-Yv7\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "التهجئة والقواعد اللغوية" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografia i gramàtica" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografia i gramàtica" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechtschreibung und Grammatik" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografía y gramática" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografía y gramática" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Orthographe et grammaire" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ejaan dan Tata Bahasa" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografia e grammatica" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "スペルと文法" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "맞춤법 및 문법" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rašyba ir gramatika" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stavekontroll og grammatikk" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spelling en grammatica" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stavekontroll og grammatikk" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pisownia i gramatyka" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografia e gramática" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ortografia e Gramática" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Правописание и грамматика" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stavning och grammatik" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chính tả và Ngữ pháp" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "拼写和语法" - } - } - } - }, - "DVo-aG-piG.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Close\"; ObjectID = \"DVo-aG-piG\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يغلق" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tanca" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tanca" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zavřít" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schließen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Close" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerrar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerrar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fermer" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tutup" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chiudi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "閉じる" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "닫기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uždaryti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lukk" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sluiten" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lat att" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zamknij" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fechar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fechar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Închide" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Закрыть" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zavrieť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stäng" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kapat" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Закрити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đóng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "關閉" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "關閉" - } - } - } - }, - "e9j-DR-MEH.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Launch on login\"; ObjectID = \"e9j-DR-MEH\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "ابدأ عند تسجيل الدخول" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Executa en l'inici de sessió" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Executa en l'inici de sessió" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spustit při přihlášení" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Beim Anmelden starten" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Launch on login" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Iniciar al iniciar sesión" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Iniciar al iniciar sesión" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Démarrer avec la session" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jalankan saat login" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Avvia al login" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ログイン時に起動" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "로그인 시 실행" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Paleisti prisijungus prie sistemos" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Start ved pålogging" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Starten bij het inloggen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Start ved pålogging" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uruchamiaj po zalogowaniu się" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Iniciar no login" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Iniciar no login" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pornește la login" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Запуск при входе в систему" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spustiť pri prihlásení" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Starta vid inloggning" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Başlangıçta çalıştır" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Запускати при вході в систему" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khởi động khi đăng nhập" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "登录时打开" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "在登入時打開" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "在登入時開啟" - } - } - } - }, - "e57-QJ-6bL.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Almost Maximize\"; ObjectID = \"e57-QJ-6bL\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تكبير تقريبا" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quasi maximitzar" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quasi maximitzar" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skoro maximalizovat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nahezu maximieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Almost Maximize" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Almost Maximise" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Casi maximizar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Casi maximizar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quasi maximiser" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hampir Perbesar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quasi massimizza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ほぼ最大化" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "거의 최대화" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Beveik maksimizuoti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nesten maksimert" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bijna maximaliseren" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nesten maksimert" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prawie zmaksymalizuj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quase maximizar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quase Maximizar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizează parțial" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Почти максимизировать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skoro maximalizovať" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nästan maximerad" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neredeyse tamamını kapla" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Майже максимізувати" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phóng to tương đối" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "接近最大化" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "近乎放到最大" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "幾乎放到最大" - } - } - } - }, - "Eah-KL-kbn.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Make Larger\"; ObjectID = \"Eah-KL-kbn\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "اجعله أكبر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fer més gran" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fer més gran" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zvětšit" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vergrößern" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Make Larger" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hacer más grande" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hacer más grande" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agrandir la taille" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buat Lebih Luas" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ingrandisci" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "拡大" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "크게" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Padidinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjør større" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Groter maken" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjer større" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Powiększ" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aumentar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aumentar o tamanho" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mărește" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Увеличить" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zväčšiť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gör större" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Büyüt" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Збільшити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tăng kích thước" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "放大" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "放大" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "放大" - } - } - } - }, - "EBt-5H-0z6.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"EBt-5H-0z6\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "ec4-FB-fMa.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom\"; ObjectID = \"ec4-FB-fMa\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "النصف الأسفل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat inferior" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat inferior" - } - }, - "cs" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Spodní polovina" - } - }, - "de" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Untere Hälfte" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Bottom" - } - }, - "es" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad inferior" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad inferior" - } - }, - "fr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Moitié du bas" - } - }, - "id" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Setengah Bawah" - } - }, - "it" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Metà inferiore" - } - }, - "ja" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "下半分" - } - }, - "ko" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "아래쪽 절반" - } - }, - "lt" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Apatinė pusė" - } - }, - "nb" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nederste halvdel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Onderste helft" - } - }, - "nn" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nedste halvdel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dolna połowa" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Metade inferior" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Metade inferior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Jumătatea de Jos" - } - }, - "ru" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Нижняя половина" - } - }, - "sk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Spodná polovica" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nedre halvan" - } - }, - "tr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Alt Yarım" - } - }, - "uk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Нижня половина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nửa dưới" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "下半屏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "下半" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "下半" - } - } - } - }, - "Eighths" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/8" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ tám" - } - } - } - }, - "Enable Todo Mode" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Activer le mode Todo" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Habilita mode Todo" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Habilita mode Todo" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "To-do-Modus aktivieren" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Habilitar el modo 'Todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Habilitar el modo 'Todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Activer le mode Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aktifkan Mode Todo" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Attiva modalità In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ToDoモードを有効にする" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 모드 활성화" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Įjungti Todo programos režimą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aktiver Gjøreliste-modus" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enable Todo Mode" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aktiver Gjereliste-modus" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enable Todo Mode" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Habilitar Todo Mode" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enable Todo Mode" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Включить режим Todo приложения" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zapnúť Todo režim" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aktivera Att göra-läge" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Увімкнути режим Завдань" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bật chế độ Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用待办模式" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "啟用待辦模式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "啟用待辦模式" - } - } - } - }, - "Ext-Set-Cel.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Extras\"; ObjectID = \"Ext-Set-Cel\";", - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Extras" - } - }, - "ko" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "⋯" - } - }, - "ru" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "⋯" - } - }, - "vi" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "⋯" - } - } - } - }, - "Extra Shortcuts" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Extra Shortcuts" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "추가 단축키" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дополнительные горячие клавиши" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phím tắt bổ sung" - } - } - } - }, - "F2S-fz-NVQ.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Help\"; ObjectID = \"F2S-fz-NVQ\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يساعد" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nápověda" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hilfe" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Help" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ayuda" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ayuda" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aide" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bantuan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aiuto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ヘルプ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "도움말" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pagalba" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hjelp" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hulp" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hjelp" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pomoc" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajutor" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Помощь" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pomocník" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hjälp" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Yardım" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Довідка" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trợ giúp" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "帮助" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "輔助說明" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "輔助說明" - } - } - } - }, - "f3Q-q7-Pcy.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Right Sixth\"; ObjectID = \"f3Q-q7-Pcy\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أعلى اليمين السادس" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè superior dreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè superior dreta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Horní pravá šestina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Oberes rechtes Sechstel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Top Right Sixth" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante arriba a la derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante arriba a la derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sixième haut droit" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperenam Kanan Atas" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sesto superiore destro" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "右上" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "위 오른쪽 1/6" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Viršutinė šeštoji dešinėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Øvre høgre sjettedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechtsboven zesde" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Øvre høgre sjettedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jedna szósta po prawej u góry" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto superior à direita" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto Direito Superior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șesimea din Dreapta Sus" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Верхняя шестая справа" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Horná pravá šestina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Övre högra sjätte" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sağ Üst Altıda bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Верхнія права шоста частина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/6 góc trên bên phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右上1/6" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右上1/6" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右上1/6" - } - } - } - }, - "F8S-GI-LiB.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Right\"; ObjectID = \"F8S-GI-LiB\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "النصف الأيمن" - } - }, - "ca" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat dreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat dreta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Pravá polovina" - } - }, - "de" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Rechte Hälfte" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Right" - } - }, - "es" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Moitié droite" - } - }, - "id" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Setengah Kanan" - } - }, - "it" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Metà destra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "右半分" - } - }, - "ko" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "오른쪽 절반" - } - }, - "lt" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dešinė pusė" - } - }, - "nb" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Høgre halvdel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Rechterhelft" - } - }, - "nn" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Høgre halvdel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Prawa połowa" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Metade direita" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Metade direita" - } - }, - "ro" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Jumătatea din Dreapta" - } - }, - "ru" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Правая половина" - } - }, - "sk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Pravá polovica" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Högra halvan" - } - }, - "tr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Sağ yarım" - } - }, - "uk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Права половина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "1/2 cuối" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "右半屏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "右半" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "右半" - } - } - } - }, - "F12-EV-Lfz.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"First Third\"; ObjectID = \"F12-EV-Lfz\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الاول الثالث" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer terç" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer terç" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "První třetina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erstes Drittel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "First Third" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer tercio" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer tercio" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tiers du haut" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sepertiga Pertama" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primo terzo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/3にして左寄せ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "처음 1/3" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pirmasis trečdalis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Første tredjedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eerste derde" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fyrste tredjedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jedna trzecia z lewej" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primeiro terço" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primeiro Terço" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prima Treime" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Первая треть" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prvá tretina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Första tredje" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "İlk üçte bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перша третина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/3 đầu" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左首1/3" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左側1/3" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左側1/3" - } - } - } - }, - "Fal-I4-PZk.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Text\"; ObjectID = \"Fal-I4-PZk\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "نص" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Text" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Text" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Text" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Texto" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Texto" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Texte" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Teks" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Testo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "テキスト" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "텍스트" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tekstas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tekst" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tekst" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tekst" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tekst" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Texto" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Texto" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Текст" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Text" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chữ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文本" - } - } - } - }, - "Fap-R2-Aj6.label" : { - "comment" : "Class = \"NSTabViewItem\"; label = \"Snap Areas\"; ObjectID = \"Fap-R2-Aj6\";", - "extractionState" : "stale", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schnappbereiche" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Snap Areas" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Áreas Snap" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Áreas Snap" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redimensionner areas" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Area jepret" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aree a scatto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "スナップ領域" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "스냅 영역" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Snap Areas" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redimensionar areas" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Encaixar areas" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zóny prichytenia" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tutturma Bölgeleri" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Зони прив’язки" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khu vực bố trí" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "吸附区域" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "貼齊區域" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "貼齊區域" - } - } - } - }, - "FCh-1Q-Xms.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Keep a chosen application visible on the right of your primary screen at all times\"; ObjectID = \"FCh-1Q-Xms\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "احتفظ بالتطبيق المختار مرئيًا على يمين شاشتك الأساسية في جميع الأوقات" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manté l'aplicació escollida visible a la dreta de la pantalla principal en tot moment" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manté l'aplicació escollida visible a la dreta de la pantalla principal en tot moment" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazí vybranou aplikaci vždy na pravé straně vaší hlavní obrazovky" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Halte eine ausgewählte Anwendung auf der rechten Seite des Hauptbildschirms im Vordergrund." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Keep a chosen application visible on the right of your primary screen at all times" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mantener la aplicación elegida visible a la derecha de la pantalla primaria en todo momento" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mantener la aplicación elegida visible a la derecha de la pantalla primaria en todo momento" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Garder une application visible à tout moment sur la droite de votre écran principal" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Biarkan aplikasi yang dipilih terlihat di sebelah kanan layar utama Anda setiap saat" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tieni l'applicazione scelta sempre visibile sulla destra del tuo schermo principale" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "メインディスプレイの右部分に、指定されたアプリケーションを常に表示します" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "선택한 응용 프로그램을 메인 화면 오른쪽에 항상 표시합니다" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Laikyti pasirinktą programą nuolat matomą dešinėje pagrindinio ekrano pusėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjør et valgt program synlig hele tida til høgre på hovedskjermen din" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right of your primary screen at all times" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjer eit valt program synleg heile tida til høgre på hovudskjermen din" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right of your primary screen at all times" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right of your primary screen at all times" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right of your primary screen at all times" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Păstrează tot timpul o aplicație la alegere vizibilă în dreapta ecranului principal" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Держать выбранное приложение постоянно видимым в правой части основного экрана" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ponechá zvolenú aplikáciu vždy zobrazenú na pravej strane hlavnej obrazovky" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Behåll en vald applikation hela tiden synlig till höger på din primära skärm" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seçtiğiniz bir uygulamayı ana ekranınızın sağında her zaman görüntümenizi sağlar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Залишати обраний додаток завжди видимим справа на головному екрані" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Luôn giữ ứng dụng được chọn hiển thị bên phải của màn hình chính" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使所选应用程序在主屏幕右侧始终保持可见" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "在主螢幕右側始終顯示所選擇的應用程式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "在主螢幕右側始終顯示所選擇的應用程式" - } - } - } - }, - "FeM-D8-WVr.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Substitutions\"; ObjectID = \"FeM-D8-WVr\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "البدائل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substitucions" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substitucions" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ersetzungen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sustituciones" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sustituciones" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remplacements" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Penggantian" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sostituzioni" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "置換" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "대체" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pakeitimai" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erstatninger" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vervangingen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erstatningar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zamienniki" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substituições" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substituições" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Замены" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substitutioner" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sự thay thế" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示替换" - } - } - } - }, - "FKE-Sm-Kum.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Rectangle Help\"; ObjectID = \"FKE-Sm-Kum\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تعليمات المستطيل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda de Rectangle" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda de Rectangle" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle nápověda" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle-Hilfe" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Rectangle Help" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ayuda de Rectangle" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ayuda de Rectangle" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aide Rectangle" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bantuan Rectangle" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aiuto su Rectangle" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleヘルプ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 도움말" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle Pagalba" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle-hjelp" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle hulp" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle-hjelp" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pomoc Rectangle" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda do Rectangle" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajuda do Rectangle" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ajutor Rectangle" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle Справка" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pomocník pre Rectangle" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle-hjälp" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle Yardım" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Довідка по Rectangle" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trợ giúp của Rectangle" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 帮助" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 輔助說明" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle輔助說明" - } - } - } - }, - "Fko-xs-gN5.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Second Fourth\"; ObjectID = \"Fko-xs-gN5\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الرابع الثاني" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Segon quart" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Segon quart" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Druhá čtvrtina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zweites Viertel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Second Fourth" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Second Quarter" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Segundo cuarto" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Segundo cuarto" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deuxième quart" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperempat Kedua" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondo quarto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左から2番目" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "두번째 1/4" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Antra ketvirtis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Andre fjerdedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tweede kwart" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Andre fjerdedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Druga ćwiartka" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Segundo quarto" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Segundo Quarto" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Al Doilea Sfert" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вторая четверть" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Druhá štvrtina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Andra fjärde" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "İkinci Çeyrek" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Друга чверть" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/4 thứ hai" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左二1/4" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左二1/4" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左二1/4" - } - } - } - }, - "fL5-gz-pOD.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"fL5-gz-pOD\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "FLh-CI-WNK.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"FLh-CI-WNK\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "Follow System" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Follow System" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "システムに合わせる" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "跟随系统" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "跟隨系統" - } - } - } - }, - "Fourths" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quarts" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quartes" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quartes" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Čtvrtiny" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Viertel" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quarters" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cuartos" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cuartos" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quarts" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperempat" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quarti" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "4分割" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "4등분" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ketvirtys" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjerdedeler" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kwarten" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjerdedelar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ćwiartki" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quartos" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quartos" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Четверти" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Štvrtiny" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjärdedelar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Çeyrek" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Четверини" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phần tư" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "四等分" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "四等分" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "四等分" - } - } - } - }, - "Fourths columns" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Colonnes de quarts" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Čtvrtiny - sloupce" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Viertel Spalten" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quarter columns" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Columnas cuartas" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Columnas cuartas" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Colonnes de quarts" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quarti in colonne" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "横向きに4分割" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/4 열" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ketvirtadaliai-stulpeliai" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjerdedelskolonner" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fjerdedelskolonner" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Четверти-колонны" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Štvrtiny stĺpce" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fourths columns" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Çeyrek" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Четвертини стовпців" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Các cột phần tư" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "四等分栏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "四等分直欄" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "四等分直欄" - } - } - } - }, - "Fx0-sm-DrT.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Reflow Todo\"; ObjectID = \"Fx0-sm-DrT\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إنحسر تودو" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Reflow Todo" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reajustar 'Todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reajustar 'Todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Repositionner Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Riorganizza In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todoモードを再設定" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 재배치" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perdėlioti Todo" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt om på Gjøreliste" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt om på Gjereliste" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Обновить положение Todo окна" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preusporiadať Todo" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo'yu Yeniden Ayarla" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Переформатувати вікна Завдань" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新排列待办" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新排列待辦" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - } - } - }, - "GB9-OM-e27.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Bold\"; ObjectID = \"GB9-OM-e27\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "عريض" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negreta" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fett" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negrita" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negrita" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gras" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cetak Tebal" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grassetto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ボールド" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "볼드체" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Paryškintas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Halvfeit" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vet" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Halvfeit" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pogrubienie" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negrito" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negrito" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Полужирный" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fetstil" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "In đậm" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "粗体" - } - } - } - }, - "gEd-S9-Cfp.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Please select your default shortcuts and behavior\"; ObjectID = \"gEd-S9-Cfp\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الرجاء تحديد الاختصارات والسلوك الافتراضي الخاص بك" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seleccioneu les dreceres i el vostre comportament per defecte" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seleccioneu les dreceres i el vostre comportament per defecte" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prosím vyberte vaše výchozí zkratky a chování" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bitte wähle die Standardeinstellungen für Kurzbefehe und deren Verhaltensweisen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Please select your default shortcuts and behavior" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please select your default shortcuts and behaviour" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor seleccione el comportamiento y atajos predeterminados" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor seleccione el comportamiento y atajos predeterminados" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Veuillez choisir vos raccourcis et comportements par défaut" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Silakan pilih pintasan dan perilaku default Anda" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seleziona le tue abbreviazioni predefinite e il comportamento" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "デフォルトのショートカットと動作を選択してください" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "기본값의 단축키와 작업을 선택하십시오" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prašome pasirinkti karštuosius klavišus ir numatytąjį elgesį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Velg standardsnarveger og oppførsel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please select your default shortcuts and behavior" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vel standardsnarvegar og oppførsel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wybierz domyślne skróty oraz zachowanie" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Selecione seus atalhos e comportamento padrão" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor, selecione so seus atalhos e comportamento padrão" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Selectează scurtăturile și modurile de funcționare predefinite" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Пожалуйста, выберите горячие клавиши и поведение по умолчанию" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prosím, vyber svoje predvolené skratky a správanie" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Välj dina standardgenvägar och beteende" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lütfen varsayılan kısayol ve tercihlerinizi seçiniz" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Будь ласка, виберіть ваші типові комбінації клавіш та поведінку" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hãy chọn phím tắt và hành vi mặc định bạn mong muốn" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请选择您的默认快捷键与行为" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "請選擇您的預設快速鍵與行為" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "請選擇你的預設快捷鍵與行為" - } - } - } - }, - "GEO-Iw-cKr.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Format\"; ObjectID = \"GEO-Iw-cKr\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "شكل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "フォーマット" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "포맷" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formatas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formaat" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Формат" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "格式" - } - } - } - }, - "gFy-Zj-RGl.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"About\"; ObjectID = \"gFy-Zj-RGl\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "عن" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant a" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant a" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "O aplikaci" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Über" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "About" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca de" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca de" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "À propos" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tentang" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Informazioni" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleについて" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "정보" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apie programą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Over" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Rectangle" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sobre" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sobre" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Despre" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "О программе" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "O aplikácii" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hakkında" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Про програму" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giới thiệu" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关于" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於" - } - } - } - }, - "gHH-BV-5kP.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"cycle sizes on side actions\"; ObjectID = \"gHH-BV-5kP\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "دورة ½ و ⅔ و على نصف الإجراءات" - } - }, - "ca" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "cicle ½, ⅔, i ⅓ a mitges accions" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "cicle ½, ⅔, i ⅓ a mitges accions" - } - }, - "cs" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "změnit šířku oken na ½, ⅔, a ⅓ u polovičních akcí" - } - }, - "de" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Wechsle zwischen verschiedenen Größen bei Aktionen für halbe Bildschirme" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "cycle sizes on side actions" - } - }, - "es" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "bucle de ½, ⅔, y ⅓ en acciones de mitad" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "", - "value" : "bucle de ½, ⅔, y ⅓ en acciones de mitad" - } - }, - "fr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "alterner entre ½, ⅔ et ⅓ lors des actions de moitié d’écran" - } - }, - "id" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "siklus ½, ⅔ dan ⅓ pada setengah tindakan" - } - }, - "it" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "scorri tra ½, ⅔, e ⅓ con le azioni di mezzi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "サイズを半分にするのを繰り返す" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "절반 동작시 창 크기 순환" - } - }, - "lt" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "perjungti tarp ½, ⅔ ir ⅓ pusėms" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "bytt mellom størrelser for halv-handlinger" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "byt mellom storleikar for halv-handlingar" - } - }, - "ru" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "переключаться между ½, ⅔ и ⅓ для половин" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "meniť veľkosť pri použití skratiek polovice na:" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "växla mellan storlek på halva åtgärder" - } - }, - "tr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "yarım seçenekleri yinelenirse ½, ⅔, ve ⅓ oranlarında geçiş yap" - } - }, - "uk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "перемикати ½, ⅔, and ⅓ при діях з половиною" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "thay đổi tuần hoàn ½, ⅔, và ⅓ kích thước" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "半屏操作循环½、⅔、⅓" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "一半動作循環½、⅔和⅓" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "一半動作循環½、⅔和⅓" - } - } - } - }, - "Gi5-1S-RQB.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Font\"; ObjectID = \"Gi5-1S-RQB\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الخط" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tipus de lletra" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tipus de lletra" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schrift" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tipo de letra" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tipo de letra" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Police" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jenis Huruf" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Font" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "フォント" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "서체" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Šriftas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skrift" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lettertype" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skrift" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Czcionka" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fonte" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tipo de letra" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Шрифт" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Typsnitt" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phông chữ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字体" - } - } - } - }, - "Go to System Settings → Privacy & Security → Accessibility" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aller dans Réglages Système → Confidentialité et sécurité → Accessibilité" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gehe zu Systemeinstellungen → Datenschutz & Sicherheit → Bedienungshilfen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vaya a ajustes de sistema → Privacidad y Seguridad → Accesibilidad" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vaya a ajustes de sistema → Privacidad y Seguridad → Accesibilidad" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aller dans Réglages Système → Confidentialité et sécurité → Accessibilité" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vai a Impostazioni di Sistema → Privacy e sicurezza → Accessibilità" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "システム設定→プライバシーとセキュリティ→アクセシビリティを選択します" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eikite į Sistemos nuostatas → Privatumas ir saugumas → Privatumas → Universalus prieinamumas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå til Systeminnstillinger → Personvern og sikkerhet → Tilgjengelighet" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå til Systeminnstillingar → Personvern og tryggleik → Tilgjengelegheit" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vá em Preferências do Sistema → Segurança e Privacidade → Privacidade → Acessibilidade" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перейдите в Системные настройки → Конфиденциальность и безопасность → Конфиденциальность → Универсальный доступ" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prejdi do Systémové nastavenia → Súkromie a bezpečnosť → Prístupnosť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Accessibility" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sistem Ayarları → Gizlilik ve Güvenlik → Erişikebilirlik menüsüne gidin" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перейти до Налаштування системи → Конфіденційність та безпека → Доступність" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi đến Cài đặt hệ thống → Quyền riêng tư & Bảo mật → Trợ năng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系统设置 → 安全性与隐私 → 辅助功能" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系統設定 → 隱私權與安全性 → 輔助使用" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系統設定 → 保安與私隱 → 輔助使用" - } - } - } - }, - "Go to System Settings → Privacy & Security → Device Control and Data Access" : { - "comment" : "macOS 27 and later permission pane name.", - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Go to System Settings → Privacy & Security → Device Control and Data Access" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "システム設定→プライバシーとセキュリティ→デバイスの制御とデータへのアクセスを選択します" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系统设置 → 隐私与安全性 → 设备控制和数据访问" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系統設定 → 隱私權與安全性 → 裝置控制和資料取用" - } - } - } - }, - "Grid Positions" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "그리드 위치" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vị trí lưới" - } - } - } - }, - "gtf-PD-IHm.label" : { - "comment" : "Class = \"NSTabViewItem\"; label = \"General\"; ObjectID = \"gtf-PD-IHm\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Réglages" - } - }, - "ca" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Configuració" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Configuració" - } - }, - "cs" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nastavení" - } - }, - "de" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Einstellungen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "General" - } - }, - "es" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Ajustes" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Ajustes" - } - }, - "fr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Réglages" - } - }, - "id" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Pengaturan" - } - }, - "it" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Impostazioni" - } - }, - "ja" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "設定" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "일반" - } - }, - "lt" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nustatymai" - } - }, - "nb" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Innstillinger" - } - }, - "nl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Settings" - } - }, - "nn" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Innstillingar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Ustawienia" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Configurações" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Definições" - } - }, - "ro" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Setări" - } - }, - "ru" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Настройки" - } - }, - "sk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Nastavenia" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Inställningar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Genel Ayarlar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Налаштування" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tổng quan" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "设置" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "設定" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "設定" - } - } - } - }, - "GUa-eO-cwY.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"GUa-eO-cwY\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "استخدم الافتراضي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ús predeterminat" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ús predeterminat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Standard verwenden" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uso predeterminado" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uso predeterminado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Utiliser la valeur par défaut" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gunakan Bawaan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usa predefinito" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "デフォルトを使用" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "기본값 사용" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Naudoti pagal nutylėjimą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bruk standard" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gebruik standaard" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bruk standard" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Użyj domyślnych" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usar Padrão" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usar Padrão" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Использовать по умолчанию" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Använd standard" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sử dụng mặc định" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用默认" - } - } - } - }, - "gVA-U4-sdL.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Paste\"; ObjectID = \"gVA-U4-sdL\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "معجون" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enganxa" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enganxa" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vložit" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Einfügen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Paste" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pegar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pegar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Coller" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tempel" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Incolla" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ペースト" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "붙여넣기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Įterpimas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lim inn" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plakken" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lim inn" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wklej" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Colar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Colar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lipește" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вставка" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vložiť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Klistra in" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Yapıştır" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вставити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dán" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "粘贴" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "貼上" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "貼上" - } - } - } - }, - "gyg-xl-dPn.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Rectangle needs your permission to control your window positions.\"; ObjectID = \"gyg-xl-dPn\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يحتاج المستطيل إلى إذنك للتحكم في مواضع النافذة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle necessita el vostre permís per controlar les posicions de les finestres." - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle necessita el vostre permís per controlar les posicions de les finestres." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle potřebuje vaše povolení, aby mohl ovládat pozice oken." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle benötigt deine Erlaubnis, um Fensterpositionen zu steuern." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Rectangle needs your permission to control your window positions." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle necesita su permiso para controlar la posición de las ventanas." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle necesita su permiso para controlar la posición de las ventanas." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle requiert votre permission pour contrôler la position de vos fenêtres." - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle memerlukan izin anda untuk mengatur posisi jendela." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle ha bisogno del tuo permesso per controllare le posizioni delle tue finestre." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleがウインドウの位置を制御するには許可が必要です。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle은 창 위치를 제어하기 위해 권한이 필요합니다." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle reikia jūsų leidimo valdyti langų padėtį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle trenger lov av deg for å kontrollere vindusposisjonene." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle heeft uw toestemming nodig om uw vensterposities te kunnen aanpassen." - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle treng lov av deg for å kontrollera vindaugsposisjonane." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle potrzebuje twojego pozwolenia, aby móc sterować pozycjami okna." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Rectangle precisa de sua permissão para controlar a posição das janelas." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Rectangle precisa da sua permissão para controlar as posições das janelas." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle are nevoie de permisiunea ta pentru a controla poziția ferestrelor tale." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle необходимо ваше разрешение для управления положением окон" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle potrebuje povolenie na ovládanie umiestnenia tvojich okien." - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle behöver ditt tillstånd för att kontrollera dina fönsterpositioner." - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle'ın pencere konumlarını değiştirebilmek için izninize ihtiyacı var." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle потребує вашого дозволу для керування позиціями ваших вікон." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle cần sự cho phép của bạn để điều khỉển vị trí cửa sổ." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 需要您的允许以控制窗口位置。" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 需要您的許可來控制視窗位置。" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle需要你的允許以控制視窗位置。" - } - } - } - }, - "H1b-Si-o9J.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Writing Direction\"; ObjectID = \"H1b-Si-o9J\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "اتجاه الكتابة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direcció d'escriptura" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direcció d'escriptura" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schreibrichtung" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dirección de escritura" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dirección de escritura" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sens d'écriture" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arah Penulisan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direzione di scrittura" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "文字の向き" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "작성 방향" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rašymo kryptis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skriveretning" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schrijfrichting" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skriveretning" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kierunek pisania" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direção de Escrita" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direção de Escrita" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Направление письма" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skrivriktning" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hướng viết" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "书写方向" - } - } - } - }, - "H8h-7b-M4v.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"View\"; ObjectID = \"H8h-7b-M4v\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "منظر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualitza" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualitza" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazit" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Darstellung" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "View" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afficher" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vista" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "보기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Peržiūra" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bekijk" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Widok" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualizar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vizualizează" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Просмотр" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobraziť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Görünüm" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вигляд" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示方式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示方式" - } - } - } - }, - "heT-W6-Fyf.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Double-click window title bar to maximize/restore\"; ObjectID = \"heT-W6-Fyf\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "انقر نقرًا مزدوجًا فوق شريط عنوان النافذة لتكبير / استعادة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Doppelklick auf die Titelleiste des Fensters zum Maximieren/Wiederherstellen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximise/restore" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Haz click dos veces en la barra de título de la ventana para maximizar/restaurar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Haz click dos veces en la barra de título de la ventana para maximizar/restaurar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-cliquer sur la barre de titre d'une fenêtre pour maximiser/restaurer" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fai doppio clic sul titolo della finestra per massimizzare/ripristinare" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ウインドウのタイトルバーをダブルクリックすることで、最大化/最大化解除を行う" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "윈도우 제목 막대를 두 번 클릭해 확대/축소" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spustelėkite du kartus lango antraštės juostą, kad padidintumėte/atstatytumėte" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dobbeltklikk vindustittel for å maksimere eller tilbakestille" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dobbeltklikk vindaugstittel for å maksimera eller tilbakestilla" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Duplo clique no title bar da janela para maximizar/restaurar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дважды щелкните по заголовку окна, чтобы увеличить/уменьшить его размер" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dvojitým kliknutím na lištu s názvom maximalizovať/obnoviť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Büyütmek/Yeniden yüklemek için üst pencere çubuğuna çift tıklayın." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấp đúp trên thanh tiêu đề để phóng to/khôi phục" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连按窗口标题以缩放/恢复" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "連按兩下視窗標題列來最大化/復原" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Double-click window title bar to maximize/restore" - } - } - } - }, - "HFo-cy-zxI.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show Spelling and Grammar\"; ObjectID = \"HFo-cy-zxI\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إظهار التدقيق الإملائي والنحوي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar ortografia i gramàtica" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar ortografia i gramàtica" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechtschreibung und Grammatik einblenden" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar ortografía y gramática" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar ortografía y gramática" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afficher l'orthographe et la grammaire" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilkan Ejaan dan Tata Bahasa" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra ortografia e grammatica" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "スペルと文法を表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "맞춤법 및 문법 보기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rodyti rašybą ir gramatiką" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis stavekontroll og grammatikk" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toon spelling en grammatica" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis stavekontroll og grammatikk" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pokaż pisownię i gramatykę" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar ortografia e gramática" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar Ortografia e Gramática" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Показать правописание и грамматику" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa stavning och grammatik" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị Chính tả và Ngữ pháp" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示拼写和语法" - } - } - } - }, - "HFQ-gK-NFA.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Text Replacement\"; ObjectID = \"HFQ-gK-NFA\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "استبدال النص" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substitució de text" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substitució de text" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Text ersetzen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reemplazo de texto" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reemplazo de texto" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remplacement de texte" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Penggantian Teks" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sostituzione testo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "テキストの置き換え" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "삽입" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Teksto pakeitimas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Teksterstatninger" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tekstvervanging" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Teksterstatningar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zamiana tekstu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substituição de Texto" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Substituição de Texto" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Замена текста" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Textbyte" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thay thế văn bản" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文本替换" - } - } - } - }, - "HIK-3r-i7E.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Check for Updates…\"; ObjectID = \"HIK-3r-i7E\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تحقق من وجود تحديثات…" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerca actualitzacions…" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerca actualitzacions…" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zkontrolovat aktualizace…" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nach Updates suchen…" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Check for Updates…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar actualizaciones…" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar actualizaciones…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mettre à jour…" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Periksa Pembaruan…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Controlla aggiornamenti…" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "アップデートを確認…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "업데이트 확인…" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tikrinti atnaujinimus…" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Se etter oppdateringer…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kijk of er updates zijn…" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sjå etter oppdateringar…" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sprawdź aktualizacje…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Procurar por atualizações…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verifique se há atualizações…" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verifică Actualizări…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Проверить обновления…" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skontrolovať aktualizácie…" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sök efter uppdateringar…" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Güncellemeleri kontrol et…" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перевірити оновлення…" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra các bản cập nhật…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "检查更新…" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "檢查更新⋯" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "檢查更新項目⋯" - } - } - } - }, - "HOm-BV-2jc.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Up\"; ObjectID = \"HOm-BV-2jc\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تحرك" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mou amunt" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mou amunt" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Přesunout nahoru" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nach oben bewegen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Move Up" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover hasta arriba" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover hasta arriba" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Déplacer vers le haut" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Naikkan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sposta su" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "上に移動" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "위로 이동" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aukštyn" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt opp" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Naar boven" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt opp" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przesuń w górę" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover para cima" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover para cima" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mută Sus" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вверх" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Presunúť hore" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytta upp" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Yukarı kenar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перемістити вгору" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi lên" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "向上移动" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "上移" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "上移" - } - } - } - }, - "HOp-Kd-vhY.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Recommended\"; ObjectID = \"HOp-Kd-vhY\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مُستَحسَن" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomanat" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomanat" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Doporučené" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Empfohlen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Recommended" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomendado" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomendado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recommandé" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Direkomendasikan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Consigliate" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "推奨設定" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "권장 설정" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rekomenduojama" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anbefalt" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recommended" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tilrådd" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rekomendowane" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomendado" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomendado" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recomandat" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Рекомендуемые" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odporúčané" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rekommenderas" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Önerilen" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Рекомендовано" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gợi ý" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "推荐" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "建議" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "建議" - } - } - } - }, - "Horizontal (L/R, %)" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "수평 (좌/우, %)" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ngang (trái/phải, %)" - } - } - } - }, - "hQb-2v-fYv.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Smart Quotes\"; ObjectID = \"hQb-2v-fYv\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "اقتباسات ذكية" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cites intel·ligents" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cites intel·ligents" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Intelligente Anführungszeichen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Citas inteligentes" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Citas inteligentes" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Citations intelligentes" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kutipan Pintar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Virgolette intelligenti" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "スマート引用符" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "스마트 인용" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Intelektualios kabutės" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smarte hermetegn" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slimme aanhalingstekens" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smarte hermeteikn" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inteligentne cudzysłowy" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Citações Inteligentes" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Citações Inteligentes" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Интеллектуальные кавычки" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smarta citat" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trích dẫn thông minh" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "智能引号" - } - } - } - }, - "HtH-yF-lBR.title" : { - "comment" : "Class = \"NSWindow\"; title = \"Welcome!\"; ObjectID = \"HtH-yF-lBR\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مرحباً" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Benvingut!" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Benvingut!" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vítejte!" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Willkommen!" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Welcome!" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Bienvenido!" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Bienvenido!" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bienvenue !" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Selamat Datang!" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ti diamo il benvenuto!" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ようこそ!" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "환영합니다!" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sveiki!" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Velkommen!" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Welcome!" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Velkomen!" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Witaj!" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bem vindo!" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bem-vindo!" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bine ai venit!" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Добро пожаловать!" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vitaj!" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Välkommen!" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hoşgeldiniz!" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ласкаво просимо!" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xin chào!" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "欢迎!" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "歡迎!" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "歡迎!" - } - } - } - }, - "HyV-fh-RgO.title" : { - "comment" : "Class = \"NSMenu\"; title = \"View\"; ObjectID = \"HyV-fh-RgO\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "منظر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualitza" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualitza" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazit" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Darstellung" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "View" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afficher" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vista" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "보기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Peržiūra" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bekijk" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Widok" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualizar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vizualizează" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Просмотр" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobraziť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Görünüm" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вигляд" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示方式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示方式" - } - } - } - }, - "hz2-CU-CR7.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Check Document Now\"; ObjectID = \"hz2-CU-CR7\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تحقق من المستند الآن" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comproveu ara el document" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comproveu ara el document" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dokument jetzt prüfen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar documento ahora" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar documento ahora" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vérifier le document maintenant" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Periksa Dokumen Sekarang" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Controlla documento ora" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "書類を今すぐチェック" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "지금 문서 검사" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Patikrinkite dokumentą dabar" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontroller dokumentet nå" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Controleer nu het document" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontroller dokumentet no" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sprawdź dokument teraz" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar documento agora" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar documento agora" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Проверьте документ сейчас" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontrollera dokument nu" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra tài liệu ngay" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "立即检查文稿" - } - } - } - }, - "hz9-B4-Xy5.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Services\"; ObjectID = \"hz9-B4-Xy5\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "خدمات" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serveis" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serveis" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Služby" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dienste" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Services" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servicios" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servicios" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Services" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Layanan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servizi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "サービス" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "서비스" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Paslaugos" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tjenester" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diensten" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tenester" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usługi" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serviços" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serviços" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servicii" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Службы" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Služby" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tjänster" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servisler" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Сервіси" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dịch vụ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "服务" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "服務" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "服務" - } - } - } - }, - "I0S-gh-46l.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Subscript\"; ObjectID = \"I0S-gh-46l\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مخطوطة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subíndex" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subíndex" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tiefgestellt" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subíndice" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subíndice" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Indice" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tulisan di Bawah Garis" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pedice" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "添字" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 첨자" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prenumeratorius" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Senka" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subscript" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Senka" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subskrybuj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subscrito" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Subscrito" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Подписчик" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Index" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chỉ số dưới" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下标" - } - } - } - }, - "i1d-Er-qST.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Smaller\"; ObjectID = \"i1d-Er-qST\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الأصغر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Més petit" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Més petit" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kleiner" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Más pequeño" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Más pequeño" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plus petit" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lebih Kecil" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Più piccolo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "小さく" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "작게" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mažiau" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mindre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kleiner" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mindre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mniejszy" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Menor" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Menor" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Меньше" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mindre" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhỏ hơn" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "较小" - } - } - } - }, - "I97-ob-ue4.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"I97-ob-ue4\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "IAo-SY-fd9.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Open…\"; ObjectID = \"IAo-SY-fd9\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يفتح…" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obre…" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obre…" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otevřít…" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Öffnen…" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Open…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir…" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ouvrir…" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buka…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apri…" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "開く…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "열기…" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atidaryti…" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Åpne…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open…" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opne…" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otwórz…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir…" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deschide…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Открыть…" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otvoriť…" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Öppna…" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aç…" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Відкрити…" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开…" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "打開⋯" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "開啟⋯" - } - } - } - }, - "ijk-EB-dga.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Baseline\"; ObjectID = \"ijk-EB-dga\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حدود" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línia de base" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línia de base" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schriftlinie" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línea de base" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línea de base" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligne de base" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Garis Dasar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linea base" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ベースライン" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "기준선" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pagrindinis rodiklis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skriftlinje" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Basislijn" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skriftline" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poziom bazowy" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linha de base" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Base de referência" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Базовый показатель" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Baslinje" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đường cơ sở" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "基线" - } - } - } - }, - "IO3-Hi-7gC.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Export\"; ObjectID = \"IO3-Hi-7gC\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يصدّر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exporta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exporta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportovat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Export" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exporter" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Expor" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Esporta" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "エクスポート" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "내보내기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eksportuoti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eksporter" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eksporter" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportă" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Экспорт" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportovať" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Exportera" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dışa Aktar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Експортувати" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xuất" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导出" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "輸出" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "輸出" - } - } - } - }, - "iOQ-1e-esP.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Center Sixth\"; ObjectID = \"iOQ-1e-esP\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مركز القاع السادس" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè inferior centre" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè inferior centre" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodní prostřední šestina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unteres mittleres Sechstel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Bottom Center Sixth" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bottom Centre Sixth" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante abajo centrado" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante abajo centrado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sixième bas centre" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperenam Tengah Bawah" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sesto inferiore centrale" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "中央下" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 가운데 1/6" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apatinė šeštoji centre" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre midtre sjettedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Middenonder zesde" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre midtre sjettedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jedna szósta na środku u dołu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto inferior central" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto Central Inferior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șesimea din Centru Jos" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижняя шестая по центру" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodná prostredná šestina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre mitten sjätte" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alt Orta Altıda bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижня центральна шоста частина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/6 ở giữa bên dưới" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中下1/6" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "中下1/6" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "中下1/6" - } - } - } - }, - "iWV-c2-BJD.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Open System Preferences\"; ObjectID = \"iWV-c2-BJD\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "افتح تفضيلات النظام" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obrir preferències del sistema" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obrir preferències del sistema" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otevřít systémové předvolby" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Systemeinstellungen öffnen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Open System Preferences" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir preferencias del sistema" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir preferencias del sistema" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ouvrir les Préférences Système" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buka Preferensi Sistem" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apri Preferenze di Sistema" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "システム環境設定を開く" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "시스템 환경설정 열기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atidaryti sistemos nustatymus" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Åpne systeminnstllingene" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open Systeemvoorkeuren" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opna systeminnstllingane" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otwórz ustawienia systemowe" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir Ajustes do Sistema" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir Preferências de Sistema" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deschide Preferințele de Sistem" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Открыть Cистемные настройки" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otvoriť systémové nastavenia" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Öppna systeminställningar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sistem Tercihlerini Aç" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Відкрити Налаштування системи" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở cài đặt hệ thống" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开系统偏好设置" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "打開系統偏好設定" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "開啟系統偏好設定" - } - } - } - }, - "iXo-XL-T6q.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Authorize Rectangle\"; ObjectID = \"iXo-XL-T6q\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تخويل المستطيل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoritza Rectangle" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoritza Rectangle" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizovat Rectangle" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle autorisieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Authorize Rectangle" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Authorise Rectangle" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizar Rectangle" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizar Rectangle" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoriser Rectangle" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Izinkan Rectangle" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizza Rectangle" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleを許可" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 승인" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suteikti Rectangle prieigą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoriser Rectangle" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle toestemming geven" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoriser Rectangle" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoryzacja Rectangle" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizar Rectangle" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizar Rectangle" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizare Rectangle" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дать Rectangle доступ" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Povoliť Rectangle" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Auktorisera Rectangle" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle'ı Yetkilendir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Авторизувати Rectangle" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cấp phép cho Rectangle" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "授权Rectangle" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "授權 Rectangle" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "授權Rectangle" - } - } - } - }, - "J5U-5w-g23.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Justify\"; ObjectID = \"J5U-5w-g23\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يبرر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justificar" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justificar" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Blocksatz" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justificar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justificar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justifier" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rata Kanan Kiri" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giustifica" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "両端揃え" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "좌우 정렬" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lygiuoti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Juster" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uitlijnen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Juster" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wyjustuj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justificar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justificar" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Выровнять" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Justera" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Căn chỉnh" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "两端对齐" - } - } - } - }, - "J6t-sg-Wwz.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Right\"; ObjectID = \"J6t-sg-Wwz\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أسفل اليمين" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inferior dreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inferior dreta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vpravo dole" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unten rechts" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Bottom Right" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abajo a la derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abajo a la derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "En bas à droite" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kanan Bawah" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "In basso a destra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "오른쪽 아래" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apačioje dešinėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre høgre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechtsonder" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre høgre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prawy dolny róg" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inferior direito" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inferior Direita" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dreapta Jos" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Внизу справа" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vpravo dole" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre högra" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sağ Alt" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижній правий кут" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Góc dưới bên phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下" - } - } - } - }, - "J7y-lM-qPV.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"J7y-lM-qPV\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "استخدام لا شيء" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Utilitzar cap" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Utilitzar cap" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nicht verwenden" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usar ninguno" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usar ninguno" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ne rien utiliser" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tidak Gunakan Apapun" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Non usare" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用しない" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "사용하지 않음" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nenaudoti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bruk ingen" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gebruik geen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bruk ingen" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nie używaj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usar nenhum" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nenhum" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Не использовать" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Använd ingen" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không sử dụng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "都不使用" - } - } - } - }, - "jBQ-r6-VK2.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Kern\"; ObjectID = \"jBQ-r6-VK2\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "كيرن" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zeichenabstand" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "カーニング" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "자간" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kernas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kniping" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kniping" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kern" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Керн" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kerning" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Điều chỉnh khoảng cách giữa" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "字距调整" - } - } - } - }, - "jFq-tB-4Kx.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"jFq-tB-4Kx\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : " t من اليمين إلى اليسار" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDreta a esquerra" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDreta a esquerra" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVon rechts nach links" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDerecha a izquierda" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDerecha a izquierda" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDe droite à gauche" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tKanan ke Kiri" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa destra a sinistra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t右から左" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t오른쪽에서 왼쪽" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tIš dešinės į kairę" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tHøgre til venstre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVan rechts naar links" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tHøgre til venstre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tZ prawej strony do lewej" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa direita para a esquerda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa direita para a esquerda" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tСправа налево" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tHöger till vänster" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tPhải sang trái" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tRight to Left" - } - } - } - }, - "Jnd-Lc-nlh.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Next Display\"; ObjectID = \"Jnd-Lc-nlh\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "العرض التالي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Següent pantalla" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Següent pantalla" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Následující displej" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nächster Bildschirm" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Next Display" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siguiente Pantalla" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siguiente Pantalla" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moniteur suivant" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilan Berikutnya" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schermo successivo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "次のディスプレイ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "다음 디스플레이" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kitas ekranas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neste skjerm" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Volgende scherm" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neste skjerm" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Następny ekran" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Próxima tela" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ecrã seguinte" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ecranul Următor" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Следующий экран" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nasledujúci displej" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nästa skärm" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sonraki Ekran" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Наступний екран" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Màn hình kế tiếp" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "下一个显示器" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "下一個顯示器" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "下一個顯示器" - } - } - } - }, - "JSl-FY-MF0.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"JSl-FY-MF0\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "jww-Ju-S3d.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"do nothing\"; ObjectID = \"jww-Ju-S3d\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لا تفعل شيئا" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "no fer res" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "no fer res" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "nic nedělat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nichts tun" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "do nothing" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "no hacer nada" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "no hacer nada" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "ne rien faire" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "tidak melakukan apapun" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "nessuna azione" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "何もしない" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아무것도 하지 않음" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "nieko nedaryti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "gjør ingenting" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "do nothing" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "gjer ingenting" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "do nothing" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "do nothing" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "do nothing" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "nu face nimic" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "ничего не делать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "nič nerobiť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "gör ingenting" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "hiçbir şey yapma" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "не робити нічого" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Không làm gì" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不执行任何操作" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "不執行任何動作" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "不執行任何操作" - } - } - } - }, - "jxe-nr-LDQ.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"About\"; ObjectID = \"jxe-nr-LDQ\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "عن" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant a" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant a" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "O aplikaci" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Über" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "About" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca de" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca de" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "À propos" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tentang" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Informazioni" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleについて" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "정보" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apie Rectangle" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Over" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Rectangle" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sobre" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sobre" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Despre" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "О Rectangle" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "O aplikácii" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hakkında" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Про програму" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giới thiệu" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关于" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於" - } - } - } - }, - "jxT-CU-nIS.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Format\"; ObjectID = \"jxT-CU-nIS\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "شكل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "フォーマット" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "포맷" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formatas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formaat" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Formato" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Формат" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Format" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Định dạng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "格式" - } - } - } - }, - "KaW-ft-85H.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Revert to Saved\"; ObjectID = \"KaW-ft-85H\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "العودة إلى المحفوظات" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Torna al desat" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Torna al desat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Änderungen zurücksetzen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Volver a Guardado" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Volver a Guardado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revenir au dernier enregistrement" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kembali ke Simpanan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ritorna a stato salvato" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存済みに戻す" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "다음으로 복귀" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grąžinti į išsaugotą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå tilbake til lagra" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terug naar opgeslagen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå attende til lagra" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przywróć do zapisanego" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Descartar alterações" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reverter para Guardado" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вернуть к сохранённому" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Återgå till sparad" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quay lại mục đã lưu" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "复原到已存储版本" - } - } - } - }, - "Kd2-mp-pUS.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show All\"; ObjectID = \"Kd2-mp-pUS\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "عرض الكل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra-ho tot" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra-ho tot" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazit vše" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alle einblenden" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Show All" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar todo" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar todo" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tout afficher" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilan Semua" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra tutti" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "すべて表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "모두 보기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rodyti viską" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis alle" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toon alle" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis alle" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pokaż wszystko" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar todos" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar todos" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arată Toate" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Показать всё" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobraziť všetko" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa allt" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tümünü Göster" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Показати все" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị tất cả" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示所有" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示所有" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "顯示所有" - } - } - } - }, - "KfQ-dw-3jk.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"KfQ-dw-3jk\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "kIP-vf-haE.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show Sidebar\"; ObjectID = \"kIP-vf-haE\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إظهار الشريط الجانبي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra barra lateral" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra barra lateral" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seitenleiste einblenden" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar barra lateral" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar barra lateral" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afficher la barre latérale" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilkan Bilah Samping" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra barra laterale" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "サイドバーを表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "사이드바 보기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rodyti šoninį skydelį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis sidefeltet" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toon zijbalk" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis sidefeltet" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pokaż pasek boczny" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar barra lateral" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar Barra lateral" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Показать боковую панель" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa sidofältet" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị thanh bên" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示边栏" - } - } - } - }, - "kx2-tZ-lk8.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Animate footprint\"; ObjectID = \"kx2-tZ-lk8\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تحريك البصمة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fußabdruck animieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Animate footprint" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animar la huella de ventana" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animar la huella de ventana" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animer l'empreinte" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animazione ridimensionamento" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "軌跡のアニメーション" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "부드러운 스냅 예시 애니메이션" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animuoti seką" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animer fotavtrykk" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animer fotavtrykk" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Анимировать след" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animovať stopu" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Анімувати відбиток" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị vết bố trí" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "吸附动画" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "動畫" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Animate footprint" - } - } - } - }, - "kXi-dT-zSF.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Spectacle shortcuts are more likely to conflict with other shortcuts\"; ObjectID = \"kXi-dT-zSF\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "من المرجح أن تتعارض اختصارات النظارات مع الاختصارات الأخرى" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "És probable que les dreceres de Spectable entren en conflicte amb altres dreceres" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "És probable que les dreceres de Spectable entren en conflicte amb altres dreceres" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "U Spectacle zkratek je větší pravděpodobnost konfliktu s jinými zkratkami" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle-Tastaturkurzbefehle stehen eher mit anderen Tastaturkurzbefehlen in Konflikt" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Spectacle shortcuts are more likely to conflict with other shortcuts" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Los atajos de Spectacle tienen más probabilidades de entrar en conflicto con otros atajos" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Los atajos de Spectacle tienen más probabilidades de entrar en conflicto con otros atajos" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Les raccourcis de Spectacle ont plus de chance d'être en conflit avec d'autres raccourcis" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pintasan Spectacle lebih cenderung bertentangan dengan pintasan lainnya" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Le abbreviazioni Spectacle hanno maggiori probabilità di conflitto con altre abbreviazioni" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacleを使用すると、ショートカットがほかのショートカットと競合する可能性が高まります" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle 단축키는 다른 키 조합과 충돌할 가능성이 있습니다" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle karštieji klavišai tikriausiai sukels konfliktų su kitais karštaisiais klavišais" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle-snarveger kommer mer sannsynleg i konflikt med andre snarveger" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle shortcuts are more likely to conflict with other shortcuts" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle-snarvegar kjem meir sannsynleg i konflikt med andre snarvegar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skróty Spectacle są bardziej podatne na konflikt z innymi skrótami" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atalhos Spectacle tem mais chance de causar conflitos com outros atalhos" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Os atalhos de Spectacle têm maior probabilidade de entrar em conflito com outros atalhos" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scurtăturile Spectacle sunt mai predispuse să se suprapună cu alte scurtături" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Горячие клавиши Spectacle с большой вероятностью будут конфликтовать с другими горячими клавишами" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle skratky majú vyššiu pravdepodobnosť konfliktu s inými skratkami" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle-genvägar är mer benägna att komma i konflikt med andra genvägar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle kısayollarının diğer kısayollarla çakışması daha muhtemeldir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Комбінації клавіш Spectacle більш ймовірно конфліктують з іншими комбінаціями клавіш" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phím tắt của Spectacle có nhiều khả năng xung đột với những phím tắt khác" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle 快捷键更有可能与其他快捷键冲突" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle 快速鍵更可能與其他快速鍵相衝突" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle快捷鍵更可能與其他快捷鍵衝突" - } - } - } - }, - "kYm-Ye-gOR.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Welcome to Rectangle!\"; ObjectID = \"kYm-Ye-gOR\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مرحبًا بك في المستطيل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Benvingut a Rectangle!" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Benvingut a Rectangle!" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vítejte do Rectangle!" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Willkommen bei Rectangle!" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Welcome to Rectangle!" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Bienvenido a Rectangle!" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Bienvenido a Rectangle!" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bienvenue dans Rectangle !" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Selamat Datang di Rectangle!" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle ti dà il benvenuto!" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleへようこそ!" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle에 오신 것을 환영합니다!" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sveiki atvykę į Rectangle!" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Velkommen til Rectangle!" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Welcome to Rectangle!" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Velkomen til Rectangle!" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Witaj w Rectangle!" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bem vindo ao Rectangle!" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bem-vindo ao Rectangle!" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bine ai venit în Rectangle!" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Добро пожаловать в Rectangle!" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Víta Ťa Rectangle!" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Välkommen till Rectangle!" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle'a Hoşgeldiniz!" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ласкаво просимо до Rectangle!" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chào mừng đến với Rectangle!" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "欢迎使用 Rectangle!" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "歡迎使用 Rectangle!" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "歡迎使用Rectangle!" - } - } - } - }, - "Larger Width" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Larger Width" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "너비 크게" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Увеличить ширину" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chiều rộng lớn hơn" - } - } - } - }, - "Lbh-J2-qVU.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"Lbh-J2-qVU\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : " t من اليسار إلى اليمين" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tEsquerra a dreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tEsquerra a dreta" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVon links nach rechts" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tIzquierda a derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tIzquierda a derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDe gauche à droite" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tKiri ke Kanan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa sinistra a destra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t左から右" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t왼쪽에서 오른쪽" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tIš kairės į dešinę" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVenstre til høgre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVan links naar rechts" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVenstre til høgre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tOd lewej do prawej" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa esquerda para a direita" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa Esquerda para a Direita" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tСлева направо" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVänster till höger" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tTrái sáng phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tLeft to Right" - } - } - } - }, - "LE2-aR-0XJ.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Bring All to Front\"; ObjectID = \"LE2-aR-0XJ\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إحضار الكل إلى المقدمة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Porta tot al davant" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Porta tot al davant" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alle nach vorne bringen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Traer a todos al frente" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Traer a todos al frente" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tout ramener au premier plan" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bawa Semua ke Depan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Porta tutti in primo piano" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "すべてを手前に移動" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "모두 앞으로 가져오기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Iškelti viską į priekį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Legg alle øverst" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Breng alles naar voren" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Legg alle øvst" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Umieść wszystko na wierzchu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trazer tudo para a frente" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trazer tudo para a frente" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вынести всё вперёд" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ta fram allt" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đưa tất cả ra phía trước" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "前置全部窗口" - } - } - } - }, - "Left or right side" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moitié gauche ou droite" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Levá nebo pravá polovina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linke oder Rechte Hälfte" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitad izquierda o derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitad izquierda o derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moitié gauche ou droite" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Metà destra o sinistra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半分または右半分" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "왼쪽 또는 오른쪽 반" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kairė arba dešinė pusė" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Venstre eller høgre halvdel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Venstre eller høgre halvdel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Metade esquerda ou direita" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Левая или правая половина" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ľavá alebo pravá polovica" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left or right side" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sol veya sağ yarım" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ліва або права половина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nửa trái hoặc phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半屏或右半屏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半或右半" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半或右半" - } - } - } - }, - "Left side, top/bottom side near corners" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moitié gauche, moitié du haut/bas près des coins" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Levá polovina, horní/spodní polovina blízko rohů" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linke Hälfte, Obere/Untere Hälfte in der Nähe der Ecken" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitad izquierda, mitad superior/inferior cerca de las esquinas" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitad izquierda, mitad superior/inferior cerca de las esquinas" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moitié gauche, moitié du haut/bas près des coins" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Metà sinistra, metà superiore/inferiore vicino gli angoli" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半分、画面端付近の上半分・下半分" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "왼쪽 반, 위/아래 반에 근접한 모서리" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kairė pusė, viršutinė/apačioje pusė šalia kampų" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Venstre halvdel, øverste/nederste halvdel nære hjørne" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Venstre halvdel, øvste/nedste halvdel nære hjørne" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Metade esquerda, metade de cima/baixo próximo das bordas" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Левая половина, верхняя/нижняя половина возле углов" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ľavá polovica, horná/spodná polovica blízko rohov" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left side, top/bottom side near corners" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sol yarım (köşelere yaklaşıldığında ise üst/alt yarım)" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ліва половина, верхня/нижня половина близько кутів" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nửa trái, nửa trên/dưới nếu ngay góc" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半屏,靠近角落则上/下半屏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半,靠近角落則上半/下半" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左半,靠近角落則上半/下半" - } - } - } - }, - "lgE-cR-cQ5.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Go to System Preferences → Security & Privacy → Privacy → Accessibility\"; ObjectID = \"lgE-cR-cQ5\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "انتقل إلى تفضيلات النظام ← الأمان والخصوصية ← الخصوصية ← إمكانية الوصول" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anar a Preferències del sistema → Seguretat i privacitat → Privacitat → Accesibilitat" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anar a Preferències del sistema → Seguretat i privacitat → Privacitat → Accesibilitat" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jděte do Předvolby systému -> Zabezpečení a soukromí -> Soukromí -> Zpřístupnění" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gehe zu Systemeinstellungen → Sicherheit & Datenschutz → Datenschutz → Bedienungshilfen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Go to System Preferences → Security & Privacy → Privacy → Accessibility" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vaya a Preferencias del sistema → Seguridad y privacidad → Privacidad → Accesibilidad" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vaya a Preferencias del sistema → Seguridad y privacidad → Privacidad → Accesibilidad" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Allez dans Préférences Système → Sécurité et confidentialité → Confidentialité → Accessibilité" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buka Preferensi Sistem → Keamanan & Privasi → Privasi → Aksesibilitas" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vai a Preferenze di Sistema → Sicurezza e privacy → Privacy → Accessibilità" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "システム環境設定→セキュリティとプライバシー→プライバシー→アクセシビリティに移動してください" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "시스템 환경설정 → 보안 및 개인 정보 보호 → 개인 정보 보호 → 손쉬운 사용으로 이동하십시오" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eikite į Sistemos nustatymus → Apsauga ir saugumas → Privatumas → Universalusis prieinamumas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå til Systeminnstillinger → Personvern og sikkerhet → Personvern → Tilgjengelighet" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ga naar Systeemvoorkeuren → Beveiliging en privacy → Privacy → Toegankelijkheid" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå til Systeminnstillingar → Personvern og tryggleik → Personvern → Tilgjengelegheit" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przejdź do Preferencji systemowych → Ochrona i prywatność → Prywatność → Dostępność" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vá em Preferências do Sistema → Segurança e Privacidade → Privacidade → Acessibilidade" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aceda a Preferências do Sistema → Segurança e Privacidade → Privacidade → Privacidade → Acessibilidade" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deschide System Preferences → Security & Privacy → Privacy → Accesibilitate" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перейдите в Системные настройки → Защита и безопасность → Конфиденциальность → Универсальный доступ" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prejdi do Systémové nastavenia -> Súkromie a bezpečnosť -> Súkromie -> Prístupnosť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gå till Systeminställningar → Säkerhet och sekretess → Sekretess → Tillgänglighet" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sistem Tercihleri -> Güvenlik & Gizlilik > Güvenlik > Erişilebilirlik menüsüne gidin." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перейдіть до Налаштування системи → Безпека та конфіденційність → Конфіденційність → Доступність" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi đến Cài đặt hệ thống → Quyền riêng tư & Bảo mật → Trợ năng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系統偏好設定 → 安全性與隱私權 → 隱私權 → 輔助使用" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "前往 系統設定 → 保安與私隱 → 私隱 → 輔助使用" - } - } - } - }, - "Light" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Light" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ライト" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "浅色" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "淺色" - } - } - } - }, - "LqQ-pM-jRN.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Left Sixth\"; ObjectID = \"LqQ-pM-jRN\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أسفل اليسار السادس" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè inferior esquerre" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè inferior esquerre" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodní levá šestina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unteres linkes Sechstel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Bottom Left Sixth" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante abajo a la izquierda" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante abajo a la izquierda" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sixième bas gauche" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperenam Kiri Bawah" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sesto inferiore sinistro" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左下" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 왼쪽 1/6" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apatinė šeštoji kairėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre venstre sjettedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linksonder zesde" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre venstre sjettedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jedna szósta po lewej u dołu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto inferior à esquerda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto Esquerdo Inferior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șesimea din Stânga Jos" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижняя шестая слева" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodná ľavá šestina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre vänstra sjätte" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sol Alt Altıda bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижня ліва шоста частина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/6 góc dưới bên trái" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左下1/6" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左下1/6" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左下1/6" - } - } - } - }, - "ltc-mf-BHr.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"When the menu bar icon is hidden, relaunch Rectangle from Finder to open\"; ObjectID = \"ltc-mf-BHr\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "عندما تكون أيقونة شريط القائمة مخفية ، أعد تشغيل المستطيل من Finder لفتح القائمة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quan la icona de la barra de menús estigui amagada, torneu a iniciar Rectangle des del Finder per obrir el menú." - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quan la icona de la barra de menús estigui amagada, torneu a iniciar Rectangle des del Finder per obrir el menú." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pokud je ikona skrytá v řádku nabídek, tak znovu spusťte Rectangle přes Finder" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wenn das Menüleistensymbol ausgeblendet ist, starte Rectangle im Finder neu, um die Rectangle-Einstellungen zu öffnen." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "When the menu bar icon is hidden, relaunch Rectangle from Finder to open" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cuando el icono de la barra de menús esté oculto, vuelva a iniciar Rectangle desde el Finder para abrir el menú." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cuando el icono de la barra de menús esté oculto, vuelva a iniciar Rectangle desde el Finder para abrir el menú." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lorsque l'icône de la barre des menus est masquée, relancez Rectangle depuis le Finder pour ouvrir le menu." - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saat ikon bilah menu disembunyikan, luncurkan kembali Rectangle dari Finder untuk membuka menu." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quando l'icona dalla barra dei menu è nascosta, rilancia Rectangle dal Finder per aprire il menu." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "メニューバーのアイコンが非表示の場合にメニューを開くには、FinderからRectangleを再起動してください。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "메뉴 막대 아이콘이 숨겨져 있을 경우, Finder에서 Rectangle를 다시 시작하여 메뉴를 여십시오." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jei meniu juostos piktograma yra paslėpta, paleiskite Rectangle programą iš Finder, kad atidarytumėte meniu." - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Når menyradikonet er skjult kan du starte Rectangle fra Finder for å åpne menyen." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Als het menubalk-pictogram verborgen is, start u Rectangle opnieuw vanuit Finder om het menu te openen." - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Når menyradikonet er gøymd kan du starta Rectangle frå Finder for å opna menyen." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gdy ikona paska menu jest ukryta, ponownie uruchom Rectangle z Findera, aby otworzyć menu." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quando o ícone da barra de menus estiver oculto, reinicie o Rectangle pelo Finder para abrir o menu." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quando o ícone da barra de menus estiver oculto, reinicie o Rectangle do Finder para abrir o menu." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dacă iconița din bara de meniu este ascunsă, repornește Rectangle din Finder" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Если значок строки меню скрыт, перезапустите программу Rectangle из Finder, чтобы открыть меню." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ak je ikona v lište skrytá, znovu spusti Rectangle z Findera" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "När menyradens ikon är dold, starta då Rectangle från Finder för att öppna menyn." - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Menü simgesi gizlendiğinde, menüyü açmak için Rectangle'ı Finder ile yeniden açın." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Коли піктограма у рядку меню прихована, перезапустіть Rectangle з Finder для відкриття" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi biểu tượng trên thanh menu bị ẩn, khởi chạy Rectangle từ Finder để mở lại" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "当菜单栏图标被隐藏时,从访达重新开启Rectangle以打开。" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "選單列圖示被隱藏時,從 Finder 重新啟動 Rectangle 來打開。" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "選單列圖像被隱藏時,從Finder重新啟動Rectangle以開啟。" - } - } - } - }, - "lUu-Hs-vuk.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"400\"; ObjectID = \"lUu-Hs-vuk\";", - "extractionState" : "stale", - "localizations" : { - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "400" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "400" - } - } - } - }, - "LVM-kO-fVI.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Paste Ruler\"; ObjectID = \"LVM-kO-fVI\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لصق المسطرة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enganxa regle" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enganxa regle" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lineal einfügen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pegar Regla" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pegar Regla" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Règle pour coller" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tempel Penggaris" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Incolla righello" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ルーラーをペースト" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "눈금자 붙여넣기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Įterpti liniuotę" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lim inn linjal" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lineaal plakken" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lim inn linjal" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wklej linijkę" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Colar régua" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Régua de Colar" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вставить линейку" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Klistra in linjal" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dán thước" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "粘贴标尺" - } - } - } - }, - "m2F-eA-g7w.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Bottom Right Sixth\"; ObjectID = \"m2F-eA-g7w\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "السادس الأيمن السفلي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè inferior dreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè inferior dreta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodní pravá šestina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unteres rechtes Sechstel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Bottom Right Sixth" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante abajo a la derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante abajo a la derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sixième bas droit" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperenam Kanan Bawah" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sesto inferiore destro" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "아래 오른쪽 1/6" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apatinė šeštoji dešinėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre høgre sjettedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechtsonder zesde" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre høgre sjettedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jedna szósta po prawej u dołu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto inferior à direita" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto Direito Inferior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șesimea din Dreapta Jos" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижняя шестая справа" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spodná pravá šestina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nedre högra sjätte" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sağ Alt Altıda bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нижня права шоста частина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/6 góc dưới bên phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下1/6" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下1/6" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右下1/6" - } - } - } - }, - "Maximize" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximiser" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximitzar" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximitzar" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximalizovat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximieren" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximise" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximiser" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maksimalkan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Massimizza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大化" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "최대화" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maksimizuoti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maksimer" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximize" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maksimer" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maksymalizuj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximizează" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Максимизировать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximalizovať" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maximera" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tamamını kapla" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Максимізувати" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tối đa" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最大化" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "放到最大" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "放到最大" - } - } - } - }, - "MDd-Sm-sUx.title" : { - "comment" : "Class = \"NSWindow\"; title = \"About Todo Mode\"; ObjectID = \"MDd-Sm-sUx\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حول تودو مود" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant al mode Todo" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant al mode Todo" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Todo módu" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Über den To-do-Modus" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "About Todo Mode" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca del modo 'Todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca del modo 'Todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "À propos du mode Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tentang Mode Todo" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Informazioni sulla modalità In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ToDoモードについて" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 모드 정보" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apie Todo režimą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om Gjøreliste-modus" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "About Todo Mode" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om Gjereliste-modus" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "About Todo Mode" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sobre o Todo Mode" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "About Todo Mode" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Despre Modul Todo" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "О Todo режиме" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Todo režime" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om Att göra-läge" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo Modu Hakkında" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Про режим Завдань" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giới thiệu chế độ Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关于待办模式" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於待辦模式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於待辦模式" - } - } - } - }, - "mFt-Kg-UYG.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Left Sixth\"; ObjectID = \"mFt-Kg-UYG\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أعلى اليسار السادس" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè superior esquerre" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sisè superior esquerre" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Horní levá šestina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Oberes linkes Sechstel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Top Left Sixth" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante arriba a la izquierda" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sextante arriba a la izquierda" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sixième haut gauche" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperenam Kiri Atas" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sesto superiore sinistro" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左上" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "위 왼쪽 1/6" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Viršutinė šeštoji kairėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Øvre venstre sjettedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linksboven zesde" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Øvre venstre sjettedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jedna szósta po lewej u góry" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto superior à esquerda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sexto Esquerdo Superior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șesimea din Stânga Sus" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Верхняя шестая слева" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Horná ľavá šestina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Övre vänstra sjätte" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sol Üst Altıda bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Верхня ліва шоста частина" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/6 góc trên bên trái" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左上1/6" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左上1/6" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左上1/6" - } - } - } - }, - "Middle Third" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "중간 1/3" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ ba ở giữa" - } - } - } - }, - "mK6-2p-4JG.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Check Grammar With Spelling\"; ObjectID = \"mK6-2p-4JG\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تحقق من القواعد مع التدقيق الإملائي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revisa la gramàtica amb l'ortografia" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revisa la gramàtica amb l'ortografia" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechtschreib- und Grammatikprüfung" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revisar la gramática con la ortografía" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revisar la gramática con la ortografía" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vérifier la grammaire avec l'orthographe" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Periksa Tata Bahasa Dengan Ejaan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Controlla grammatica insieme all'ortografia" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "スペルと一緒に文法をチェック" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "맞춤법 및 문법 검사" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Patikrinti gramatiką naudojant rašybos tikrinimą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontroller grammatikk og stavemåte" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grammatica en spelling controleren" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontroller grammatikk og stavemåte" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sprawdź gramatykę" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar gramática com ortografia" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar gramática com ortografia" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Проверить грамматику с помощью правописания" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontrollera grammatik med stavning" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra ngữ pháp với chính tả" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "检查拼写和语法" - } - } - } - }, - "MkV-Pr-PK5.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Copy Ruler\"; ObjectID = \"MkV-Pr-PK5\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "نسخ المسطرة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Regla de còpia" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Regla de còpia" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lineal kopieren" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copiar regla" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copiar regla" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Règle pour copier" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Salin Penggaris" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copia righello" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ルーラーをコピー" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "눈금자 복사하기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nukopijuoti liniuotę" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopier linjal" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lineaal kopiëren" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopier linjal" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopiuj linijkę" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copiar régua" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Régua de Cópia" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Скопировать линейку" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopiera linjal" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sao chép Thước kẻ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "拷贝标尺" - } - } - } - }, - "MKW-qf-Q2C.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"▶︎ ⋯\"; ObjectID = \"MKW-qf-Q2C\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "▶︎ ⋯" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "▶︎ ⋯" - } - } - } - }, - "Move to Edge" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Déplacer vers le bord" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mou a la vora" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mou a la vora" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Přesunout ke kraji" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "An den Rand bewegen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desplazar al borde" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desplazar al borde" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Déplacer vers le bord" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Geser ke Tepi" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Muovi verso i bordi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "画面端に移動" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "모서리로 이동" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perkelti į kraštą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt til kanten" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verplaats naar de rand" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt til kanten" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przesuń do krawędzi" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover para a borda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover para Lado" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Переместить к краю" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Presunúť na okraj" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytta till kanten" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kenarlar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перемістити до краю" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đi đến cạnh" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "移动到边缘" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "移至邊緣" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "移到邊緣" - } - } - } - }, - "mpl-sd-2Wc.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Left\"; ObjectID = \"mpl-sd-2Wc\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "غادر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Links" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Left" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Izquierda" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Izquierda" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gauche" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sinistra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "왼쪽" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kairė" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Venstre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Venstre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Esquerda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Слева" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vľavo" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sol" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ліворуч" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trái" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左侧" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左側" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Left" - } - } - } - }, - "MzN-CJ-ASD.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Make Smaller\"; ObjectID = \"MzN-CJ-ASD\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "اجعله اصغر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fer més petit" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fer més petit" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zmenšit" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verkleinern" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Make Smaller" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hacer más pequeño" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hacer más pequeño" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Réduire la taille" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buat Lebih Kecil" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rimpicciolisci" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "縮小" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "작게" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sumažinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjør mindre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maak kleiner" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjer mindre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zmniejsz" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diminuir" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tornar mais pequeno" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Micșorează" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уменьшить" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zmenšiť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gör mindre" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Küçült" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Зменшити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giảm kích thước" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "缩小" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "縮小" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "縮小" - } - } - } - }, - "N2U-pY-CLq.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Keep a chosen application visible on the right side of your primary screen at all times\"; ObjectID = \"N2U-pY-CLq\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "احتفظ بالتطبيق المختار مرئيًا على الجانب الأيمن من شاشتك الأساسية في جميع الأوقات" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manté l'aplicació escollida visible al costat dret de la pantalla principal en tot moment" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manté l'aplicació escollida visible al costat dret de la pantalla principal en tot moment" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazí vybranou aplikaci vždy na pravé straně vaší hlavní obrazovky" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Halte eine ausgewählte Anwendung auf der rechten Seite des Hauptbildschirms im Vordergrund." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Keep a chosen application visible on the right side of your primary screen at all times" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mantener la aplicación elegida visible en la parte derecha de la pantalla primaria en todo momento" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mantener la aplicación elegida visible en la parte derecha de la pantalla primaria en todo momento" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Garder une application visible à tout moment sur le côté droit de votre écran principal" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Biarkan aplikasi yang dipilih terlihat di sisi kanan layar utama Anda setiap saat" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tieni l'applicazione scelta sempre visibile sulla destra del tuo schermo principale" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "メインディスプレイの右側に、指定されたアプリケーションを常に表示します" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "선택한 응용 프로그램을 메인 화면 오른쪽에 항상 표시합니다" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Laikyti pasirinktą programą nuolat matomą dešinėje pagrindinio ekrano pusėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjør et valgt program synlig hele tida til høgre på hovedskjermen din" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right side of your primary screen at all times" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjer eit valt program synleg heile tida til høgre på hovudskjermen din" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right side of your primary screen at all times" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right side of your primary screen at all times" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Keep a chosen application visible on the right side of your primary screen at all times" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Păstrază tot timpul o aplicație la alegere în dreapta ecranului principal" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Держать выбранное приложение постоянно видимым в правой части основного экрана" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ponechá zvolenú aplikáciu vždy zobrazenú na pravej strane hlavnej obrazovky" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Behåll en vald applikation hela tiden synlig på höger sida på din primära skärm" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seçtiğiniz bir uygulamayı ana ekranınızın sağında her zaman görüntüleyin" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Залишати обраний застосунок завжди видимим на правому боці головного екрану" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Luôn giữ ứng dụng được chọn hiển thị bên phải của màn hình chính" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使所选应用程序在主屏幕右侧始终保持可见" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "在主螢幕右側始終顯示所選擇的應用程式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "在主螢幕右側始終顯示所選擇的應用程式" - } - } - } - }, - "n4U-FC-L9s.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Remove keyboard shortcut restrictions\"; ObjectID = \"n4U-FC-L9s\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "السماح لأي اختصار لوحة المفاتيح" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permet qualsevol drecera de teclat" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permet qualsevol drecera de teclat" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit omezení klávesových zkratek" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jeden Tastaturkurzbefehl erlauben" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Remove keyboard shortcut restrictions" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permitir cualquier atajo de teclado" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permitir cualquier atajo de teclado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoriser tout raccourci clavier" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Izinkan semua pintasan papan ketik" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Consenti qualsiasi abbreviazione da tastiera" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "すべてのキーボードショートカットを許可" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "모든 키보드 단축키 허용" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Leisti bet kokį klavišų derinį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tillat alle tastatursnarveger" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elke sneltoets toestaan" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tillat alle tastatursnarvegar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pozwól na użycie dowolnego skrótu klawiaturowego" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permitir qualquer atalho de teclado" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permitir qualquer atalho de teclado" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șterge restricțiile scurtăturilor" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Разрешить любое сочетание клавиш" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť obmedzenia klávesových skratiek" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tillåt alla tangentbordsgenvägar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tüm klavye kısayollarına izin ver" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити обмеження комбінацій клавіш" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa bỏ hạn chế của phím tắt" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除键盘快捷键限制" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除鍵盤快速鍵限制" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "移除鍵盤快捷鍵限制" - } - } - } - }, - "Ninths" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/9" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ chín" - } - } - } - }, - "Ninths (3×3)" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/9 (3×3)" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ chín (3×3)" - } - } - } - }, - "NMo-om-nkz.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Services\"; ObjectID = \"NMo-om-nkz\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "خدمات" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serveis" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serveis" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Služby" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dienste" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Services" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servicios" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servicios" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Services" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Layanan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servizi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "サービス" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "서비스" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Paslaugos" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tjenester" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diensten" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tenester" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usługi" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serviços" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Serviços" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servicii" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Службы" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Služby" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tjänster" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Servisler" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Сервіси" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dịch vụ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "服务" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "服務" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "服務" - } - } - } - }, - "NMu-W8-Awa.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"NMu-W8-Awa\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "Nop-cj-93Q.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"\\tDefault\"; ObjectID = \"Nop-cj-93Q\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : " t الافتراضي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPer defecte" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPer defecte" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tStandard" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPredeterminado" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPredeterminado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPar défaut" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tBawaan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPredefinito" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tデフォルト" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t기본" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPagal nutylėjimą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tStandard" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tStandaard" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tStandard" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDomyślnie" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPadrão" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tPadrão" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tПо умолчанию" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tStandard" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tMặc định" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tDefault" - } - } - } - }, - "nwX-h6-fwm.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Last Three Fourths\"; ObjectID = \"nwX-h6-fwm\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الأرباع الثلاثة الأخيرة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Darrers tres quarts" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Darrers tres quarts" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poslední tři čtvrtiny" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Letzte drei Viertel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Last Three Fourths" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Last Three Quarters" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ultimos tres cuartos" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Últimos tres cuartos" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trois quarts de droite" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tiga Perempat Terakhir" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ultimi tre quarti" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "3/4にして右寄せ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "마지막 3/4" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Paskutinės trys ketvirtys" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siste tre fjerdedeler" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Siste tre fjerdedelar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ostatnie trzy czwarte" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Último três quartos" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Últimos Três Quartos" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ultimele Trei Sferturi" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Последние три четверти" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Posledné tri štvrtiny" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sista tre fjärdedelar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Son Üç Çeyrek" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Останні три чверті" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "3/4 cuối" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右侧3/4" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右側3/4" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右側3/4" - } - } - } - }, - "o6e-r0-MWq.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Ligatures\"; ObjectID = \"o6e-r0-MWq\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الأربطة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lligadures" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lligadures" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaturen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaduras" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaduras" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligatures" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligatur" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Legature" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "リガチャ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "합자" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligatūros" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaturer" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaturen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaturar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligatury" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaduras" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaduras" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Лигатуры" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligaturer" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chữ ghép" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "连字" - } - } - } - }, - "O8K-y6-bva.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"View Logging…\"; ObjectID = \"O8K-y6-bva\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "عرض التسجيل ..." - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Veure registre de missatges…" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Veure registre de missatges…" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazit logování…" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Protokolle anzeigen…" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "View Logging…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver registro de mensajes…" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver registro de mensajes…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Voir le journal…" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lihat Pencatatan…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vedi resoconto…" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ログを表示…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "로그 보기…" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Peržiūrėti žurnalą…" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis loggen…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "View Logging…" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis loggen…" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pokaż logowanie…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visualizar logs…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ver Registos…" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vizualizează Log-uri…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Просмотр журнала…" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobraziť záznamy…" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa loggen…" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "View Logging…" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Переглянути журнал подій…" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xem nhật ký…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查看日志…" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "檢視記錄⋯" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "檢視記錄⋯" - } - } - } - }, - "O9a-3Q-HB1.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Todo side\"; ObjectID = \"O9a-3Q-HB1\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "جانب تودو" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "To-do-Seite" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Todo side" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lado del 'todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lado del 'todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Côté de Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lato In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todoアプリケーションの位置" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 위치" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo pusė" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjøreliste-side" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjereliste-side" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Расположение Todo приложения" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo strana" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Бічна панель Завдань" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phía của Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "待办位置" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "待辦方向" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo side" - } - } - } - }, - "OaQ-X3-Vso.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Baseline\"; ObjectID = \"OaQ-X3-Vso\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حدود" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línia base" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línia base" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schriftlinie" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línea de base" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Línea de base" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligne de base" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Garis Dasar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linea base" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ベースライン" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "기준선" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pagrindinis rodiklis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grunnlinje" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Basislijn" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grunnline" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poziom bazowy" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Linha de base" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Base de referência" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Базовый показатель" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Baslinje" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Đường cơ sở" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "基线" - } - } - } - }, - "oas-Oc-fiZ.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Open Recent\"; ObjectID = \"oas-Oc-fiZ\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "فتح الأحدث" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obre recents" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obre recents" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zuletzt geöffnet" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir reciente" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir reciente" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ouvrir l'élément récent" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buka Baru-baru Ini" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apri recente" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "最近使った項目を開く" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "최근 사용 열기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atidaryti paskutinius" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Åpne sist brukte" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open recent" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opne sist brukte" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Niedawno otwarte" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir recente" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir Recente" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Открыть недавнее" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Öppna senaste" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở gần nhất…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开最近使用" - } - } - } - }, - "oEQ-RN-TTJ.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"oEQ-RN-TTJ\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "ogc-rX-tC1.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Loosen\"; ObjectID = \"ogc-rX-tC1\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "فك" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deixar anar" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deixar anar" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Weiter" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aflojar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aflojar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desserrer" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Longgarkan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Allenta" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ゆるく" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "넓게" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atlaisvinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Løsere" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Losmaken" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lausare" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zluzuj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afrouxar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afrouxar" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Расслабьтесь" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lossa" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nới lỏng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "松排" - } - } - } - }, - "Olw-nP-bQN.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Hide Rectangle\"; ObjectID = \"Olw-nP-bQN\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إخفاء المستطيل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Amaga Rectangle" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Amaga Rectangle" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skrýt Rectangle" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle ausblenden" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Hide Rectangle" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar Rectangle" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar Rectangle" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Masquer Rectangle" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sembunyikan Rectangle" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nascondi Rectangle" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangleを非表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle 가리기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slėpti Rectangle" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skjul Rectangle" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verberg Rectangle" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gøym Rectangle" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukryj Rectangle" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar Rectangle" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar Rectangle" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ascunde Rectangle" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Скрыть Rectangle" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skryť Rectangle" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dölj Rectangle" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rectangle'ı Gizle" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Сховати Rectangle" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ẩn Rectangle" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "隐藏 Rectangle" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "隱藏 Rectangle" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "隱藏Rectangle" - } - } - } - }, - "Open System Settings" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ouvrir les Réglages Système" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Systemeinstellungen öffnen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abra los ajustes del sistema" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abra los ajustes del sistema" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ouvrir les Réglages Système" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apri Impostazioni di Sistema" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "システム設定を開く" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "시스템 설정 열기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atidaryti sistemos nuostatas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Åpne Systeminnstillingene" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opne Systeminnstillingane" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abrir Ajustes do Sistema" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Открыть Системные настройки" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otvoriť Systémové nastavenia" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open System Settings" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Відкрити Налаштування системи" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mở Cài đặt hệ thống " - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "打开系统设置" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "開啟系統設定" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "開啟系統設定" - } - } - } - }, - "oSu-n4-8Yu.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Center Two Thirds\"; ObjectID = \"oSu-n4-8Yu\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "الثلثان في الوسط" - } - }, - "ca" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dos terços centrals" - } - }, - "cs" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Prostřední dvě třetiny" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zentrierte zwei Drittel" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Center Two Thirds" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Centre Two Thirds" - } - }, - "es" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dos tercios centrales" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dos tercios al centro" - } - }, - "fr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Deux tiers centraux" - } - }, - "id" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dua Pertiga Tengah" - } - }, - "it" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Due terzi al centro" - } - }, - "ja" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "中央の3分の2" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "가운데 2/3" - } - }, - "nb" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Midtre to tredeler" - } - }, - "nl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Middelste twee derde" - } - }, - "pl" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Środkowe dwie trzecie" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Dois Terços Centrais" - } - }, - "ro" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Două treimi pe centru" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Центральные две трети" - } - }, - "sk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Stredné dve tretiny" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Mellersta två tredjedelar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Ortadaki Üçte İki" - } - }, - "uk" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Центральні дві третини" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai phần ba ở giữa" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "中间2/3" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "中間2/3" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "中間2/3" - } - } - } - }, - "Other" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Other" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Altres" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Altres" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ostatní" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mehr" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otros" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otros" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Other" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lainnya" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Altro" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "そのほか" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "기타" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kita" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annet" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Other" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anna" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inne" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Outro" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Outro" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Другое" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ostatné" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annat" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diğer" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Інше" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khác" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "其他" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "其他" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "其他" - } - } - } - }, - "OwM-mh-QMV.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Find Previous\"; ObjectID = \"OwM-mh-QMV\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "البحث عن السابق" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerca anterior" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerca anterior" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hledat předchozí" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Weitersuchen (rückwärts)" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Find Previous" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar anterior" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar anterior" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechercher le précédent" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Temukan Sebelumnya" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trova precedente" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "前を検索" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "이전 찾기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rasti ankstesnį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Finn forrige" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoek vorige" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Finn førre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Znajdź poprzedni" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar anterior" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Encontrar Anterior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Caută în Spate" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Найти предыдущий" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nájsť predchádzajúce" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sök föregående" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Öncekini Bul" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Знайти попередній" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kiếm trước đó" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查找上一个" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找上一個" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找上一個" - } - } - } - }, - "OY7-WF-poV.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Minimize\"; ObjectID = \"OY7-WF-poV\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تصغير" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimitzar" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimitzar" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimalizovat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Im Dock ablegen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Minimize" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimise" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimizar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimizar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Placer dans le Dock" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kecilkan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Contrai" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "しまう" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "최소화" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sumažinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimer" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimaliseren" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimer" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zminimalizuj" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimizar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimizar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimizează" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Минимизировать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimalizovať" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Minimera" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Küçült" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Згорнути" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thu nhỏ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "最小化" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "縮到最小" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "縮到最細" - } - } - } - }, - "Oyz-dy-DGm.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Stop Speaking\"; ObjectID = \"Oyz-dy-DGm\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "توقف عن الكلام" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deixar de parlar" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deixar de parlar" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sprachausgabe stoppen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deja de hablar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deja de hablar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Arrêter Dictée" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Berhenti Bicara" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Interrompi lettura" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "読み上げを停止" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "말하기 중단" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Užtenka plepėti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stopp opplesing" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stop met praten" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stopp opplesing" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przestań mówić" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pare de falar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Parar de falar" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Хватит болтать" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sluta prata" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dừng đọ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "停止朗读" - } - } - } - }, - "pa3-QI-u2k.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Delete\"; ObjectID = \"pa3-QI-u2k\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يمسح" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suprimeix" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suprimeix" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smazat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Löschen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Delete" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Borrar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Borrar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Supprimer" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hapus" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elimina" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "削除" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "삭제" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ištrinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slett" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verwijderen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slett" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Usuń" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Excluir" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eliminar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șterge" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Удалить" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstrániť" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ta bort" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sil" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Видалити" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Xóa" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "删除" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "刪除" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "刪除" - } - } - } - }, - "Pbz-DF-hgG.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Move cursor along with window across displays\"; ObjectID = \"Pbz-DF-hgG\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حرك المؤشر مع النافذة عبر شاشات العرض" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mou el cursor juntament amb la finestra per les pantalles" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mou el cursor juntament amb la finestra per les pantalles" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pohybujte oknem pomocí kurzoru po displejích" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mauszeiger zusammen mit dem Fenster über Bildschirme bewegen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Move cursor along with window across displays" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover cursor junto con la ventana a través de las pantallas" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mover cursor junto con la ventana a través de las pantallas" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Déplacer le curseur entre les moniteurs avec la fenêtre" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pindahkan kursor bersama dengan jendela di seluruh tampilan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sposta il cursore insieme alle finestre tra schermi" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "別ディスプレイへのウインドウ移動時にカーソルも一緒に移動させる" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "창이 디스플레이 사이에 이동 시 커서도 함께 이동" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perkelti žymeklį kartu su langais tarp ekranų" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt musepila sammen med vinduet over skjermer" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Move cursor along with window across displays" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt musepila i lag med vindauget over skjermar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przenoś kursor razem z oknem pomiędzy ekranami" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Move cursor along with window across displays" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deslocar cursor com janela entre ecrãs" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mută cursorul deodată cu fereastra între ecrane" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перемещать курсор вместе с окном между экранами" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Presúvať kurzor spolu s oknom medzi displejmi" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytta markören tillsammans med fönstret över skärmar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fare imlecini pencere ile beraber hareket ettir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Переміщати курсор разом з вікном між екранами" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Di chuyển con trỏ cùng với cửa sổ qua nhiều màn hình" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "光标和窗口一起跨显示器移动" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "游標與視窗一起跨顯示器移動" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "游標連同視窗一起跨顯示器移動" - } - } - } - }, - "Press the shortcut repeatedly to cycle through all positions in the grid." : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "그리드의 모든 위치를 순환하려면 단축키를 여러 번 누르십시오." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhấn phím tắt nhiều lần để duyệt qua tất cả các vị trí trong lưới." - } - } - } - }, - "Ptp-SP-VEL.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Bigger\"; ObjectID = \"Ptp-SP-VEL\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أكبر" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Més gran" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Més gran" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Größer" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Más grande" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Más grande" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plus grand" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lebih Besar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Più grande" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "大きく" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "크게" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Padidinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Større" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Groter" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Større" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Większy" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maior" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Maior" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Больше" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Större" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lớn hơn" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "较大" - } - } - } - }, - "pxx-59-PXV.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Save…\"; ObjectID = \"pxx-59-PXV\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يحفظ…" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desa…" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desa…" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uložit…" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sichern…" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Save…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Guardar…" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Guardar…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sauvegarder…" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Simpan…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Salva…" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "保存…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "저장…" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Išsaugoti…" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lagre…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Opslaan…" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lagre…" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zapisz…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Salvar…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Guardar…" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Salvează…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Сохранить…" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Uložiť…" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Save…" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kaydet…" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Зберегти…" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lưu…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "存储…" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "儲存⋯" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "儲存⋯" - } - } - } - }, - "Q2j-YZ-1jU.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"Q2j-YZ-1jU\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "Q5e-8K-NDq.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show Fonts\"; ObjectID = \"Q5e-8K-NDq\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إظهار الخطوط" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra tipus de lletra" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra tipus de lletra" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schriften einblenden" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar tipos de letra" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar tipos de letra" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afficher les polices" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilkan Jenis Huruf" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostra caratteri" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "フォントパネルを表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "서체 보기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rodyti šriftus" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis fonter" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Toon lettertypen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vis fontar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pokaż Czcionki" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar Fontes" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostrar Fontes" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Показать шрифты" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Visa typsnitt" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị phông" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "显示字体" - } - } - } - }, - "Q6Q-6J-okH.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"First Fourth\"; ObjectID = \"Q6Q-6J-okH\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الرابع الأول" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer quart" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer quart" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "První čtvrtina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Erstes Viertel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "First Fourth" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "First Quarter" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer cuarto" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primer cuarto" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Premier quart" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Seperempat Pertama" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primo quarto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左から1番目" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "첫번째 1/4" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pirma ketvirtis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Første fjerdedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eerste kwart" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fyrste fjerdedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pierwsza ćwiartka" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primeiro quarto" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primeiro Quarto" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primul Sfert" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Первая четверть" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prvá štvrtina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Första fjärde" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "İlk Çeyrek" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перша чверть" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/4 đầu" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "左首1/4" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左首1/4" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左首1/4" - } - } - } - }, - "q09-fT-Sye.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Find Next\"; ObjectID = \"q09-fT-Sye\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "بحث عن التالي" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerca següent" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cerca següent" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hledat další" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Weitersuchen (vorwärts)" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Find Next" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar siguiente" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar siguiente" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechercher le suivant" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Temukan Berikutnya" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trova successivo" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "次を検索" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "다음 찾기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ieškoti toliau" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Finn neste" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Volgende zoeken" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Finn neste" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Znajdź następny" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscar próximo" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Encontrar Próximo" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Caută în Față" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Найти дальше" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nájsť ďalšie" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sök nästa" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sonrakini Bul" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Знайти наступне" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tìm kiếm kế tiếp" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "查找下一个" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找下一個" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "尋找下一個" - } - } - } - }, - "q9C-qZ-xw5.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"While in Todo Mode, you can refresh the Todo Mode layout by selecting \\\"Reflow Todo\\\" in the Rectangle menu or executing the associated keyboard shortcut.\"; ObjectID = \"q9C-qZ-xw5\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أثناء وجودك في Todo Mode ، يمكنك تحديث تخطيط Todo Mode عن طريق تحديد 'Reflow Todo ' في قائمة Rectangle أو تنفيذ اختصار لوحة المفاتيح المرتبط" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mentre esteu al mode Todo, podeu actualitzar el disseny del mode TodoO seleccionant \"Redistribuir Todo\" al menú Rectangle o executant la drecera de teclat associada." - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mentre esteu al mode Todo, podeu actualitzar el disseny del mode TodoO seleccionant \"Redistribuir Todo\" al menú Rectangle o executant la drecera de teclat associada." - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rozložení Todo módu můžete obnovit vybráním \"Zobrazit Todo\" v Rectangle menu nebo exekucí nastavené zkratky." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du kannst im To-do-Modus die To-do-Anwendung neu ausrichten indem du \"To-do neu ausrichten\" im Rectangle-Menü auswählst oder die zugewiesene Tastenkombination ausführst." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mientras esté en modo 'Todo', puede refrescar la disposición del modo 'Todo' seleccionando \"Reflujo en 'Todo'\" en el menú de Rectangle o usando el atajo de teclado asociado." - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mientras esté en modo 'Todo', puede refrescar la disposición del modo 'Todo' seleccionando \"Reflujo en 'Todo'\" en el menú de Rectangle o usando el atajo de teclado asociado." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lorsque vous êtes en mode Todo, vous pouvez rafraîchir la vue en sélectionnant « Rafraîchir Todo » dans le menu de Rectangle ou en utilisant le raccourci clavier associé." - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saat dalam Mode Todo, Anda dapat menyegarkan tata letak Mode Todo dengan memilih \"Alur Ulang Todo » di menu Rectangle menu atau menjalankan pintasan keyboard terkait." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Durante la modalità In evidenza, puoi reimpostarla selezionando \"Reimposta In Evidenza\" nel menu di Rectangle o con l'abbreviazione da tastiera impostata." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ToDoモードのウインドウ配置を復元するには、ToDoモードのときに、Rectangleのメニューにある\"ToDoモードを再設定\"を選択するか、指定されたキーボードショートカットを押します。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 모드를 사용하는 동안, Rectangle 메뉴에서 \"Todo 재배치\"를 클릭하거나 키보드 단축키를 사용해 Todo 모드 레이아웃을 새로고칠 수 있습니다." - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kai įjungtas Todo režimas, galite atnaujinti Todo režimo išdėstymą pasirinkdami „Atnaujinti Todo“ Rectangle meniu arba įvykdę susietą klaviatūros trumpinį." - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Når du er i Gjøreliste-modus kan du oppdatere Gjøreliste-oppsettet ved å velge \"Flytt om på Gjøreliste\" i Rectangle-menyen eller ved å benytte definerte tastatursnarveger." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Når du er i Gjereliste-modus kan du oppdatera Gjereliste-oppsettet ved å velja \"Flytt om på Gjereliste\" i Rectangle-menyen eller ved å nytta definerte tastatursnarvegar." - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "While in Todo Mode, you can refresh the Todo Mode layout by selecting \"Reflow Todo\" in the Rectangle menu or executing the associated keyboard shortcut." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Din Modul Todo, poți reactualiza aspectul Modului Todo selectând \"Reflow Todo\" în meniul Rectangle sau folosind scurtătura asociată acestuia." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "При включенном Todo режиме вы можете обновить положение окна Todo приложения выбрав \"Обновить положение Todo окна\" в меню Rectangle или при помощи соответствующей горячей клавиши." - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "V Todo režime môžeš obnoviť rozloženie Todo režimu vyberom \"Preusporiadať Todo\" v Rectangle menu alebo pomocou príslušnej skratky." - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "När du är i Att göra-läget kan du uppdatera Att göra-layouten genom att välja \"Ordna om Att göra\" i Rectangle-menyn eller genom att använda tilldelat tangentbordsgenväg." - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo Modu aktifken Rectangle menüsündeki \"Todo'yu Yeniden Ayarla\" seçeneği ile veya tanımladığınız klavye kısayolu ile ekran düzenini tazeleyebilirsiniz." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Під час роботи в режимі Завдань ви можете оновити макет режиму Завдань, вибравши «Переформатувати вікна Завдань» у меню Rectangle або виконавши пов’язану комбінацію клавіш." - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Khi ở chế độ Todo, bạn có thể làm mới bố cục của chế độ Todo bằng cách chọn \"Làm mới Todo\" trong menu của Rectangle hoặc ấn phím tắt tương ứng." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在“待办模式”下,若要刷新待办模式布局,您可以从 Rectangle 菜单中选择“重新排列待办”,或使用对应的键盘快捷键。" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "在待辦模式下,若要重新整理待辦模式佈局,您可以從 Rectangle 選單中選擇「重新排列待辦」,或使用相應的鍵盤快速鍵" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "在待辦模式下,若要重新整理待辦模式佈局,你可以從Rectangle選單中選擇「重新排列待辦」,或使用相應的鍵盤快捷鍵" - } - } - } - }, - "qBm-QP-s63.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"qBm-QP-s63\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "qCy-Kx-9mR.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"cycle positions on quadrants, cycle sizes on side\"; ObjectID = \"qCy-Kx-9mR\";", - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "cycle positions on quadrants, cycle sizes on side" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/4 동작시 위치 순환, 절반 동작시 창 크기 순환" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "vị trí chu kỳ trên góc phần tư, kích thước chu kỳ trên một nửa" - } - } - } - }, - "qIS-W8-SiK.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Page Setup…\"; ObjectID = \"qIS-W8-SiK\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "اعداد الصفحة…" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configura pàgina…" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configura pàgina…" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Papierformat…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configurar página…" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configurar página…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mise en page…" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pengaturan Halaman…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Impostazione pagina…" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ページ設定…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "페이지 설정…" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Puslapio nustatymai…" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sideinnstillinger…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pagina instellingen…" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sideinnstillingar…" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ustawienia strony…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configuração da Página…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configuração da página…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Настройки страницы…" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sidinställningar…" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thiết lập trang…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "页面设置..." - } - } - } - }, - "qlg-kC-FMr.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Hide menu bar icon\"; ObjectID = \"qlg-kC-FMr\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إخفاء رمز شريط القائمة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Amaga la icona de la barra de menús" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Amaga la icona de la barra de menús" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skrýt ikonu z řádku nabídek" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Symbol in der Menüleiste ausblenden" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Hide menu bar icon" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar el icono de la barra de menús" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar el icono de la barra de menús" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Masquer l'icône dans la barre des menus" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sembunyikan ikon bilah menu" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nascondi l'icona dalla barra dei menu" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "メニューバーにアイコンを表示しない" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "메뉴 막대 아이콘 숨김" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slėpti piktogramą iš meniu juostos" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skjul menyradikonet" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verberg het menubalk-pictogram" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gøym menyradikonet" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ukryj ikonę paska menu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar ícone da barra de menu" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ocultar ícone da barra de menu" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ascunde iconița din bara de meniu" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Скрыть значок из строки меню" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Skryť ikonu v lište" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dölj menyradens ikon" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Menü simgesini gizle" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Приховати піктограму у рядку меню" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ẩn biểu tượng trên thanh menu" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "隐藏菜单栏图标" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "隱藏選單列圖示" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "隱藏選單列圖像" - } - } - } - }, - "QwF-QN-YH7.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Previous Display\"; ObjectID = \"QwF-QN-YH7\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "العرض السابق" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla anterior" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla anterior" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Předchozí displej" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vorheriger Bildschirm" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Previous Display" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla anterior" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pantalla anterior" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moniteur précédent" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tampilan Sebelumnya" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schermo precedente" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "前のディスプレイ" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "이전 디스플레이" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ankstesnis ekranas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Forrige skjerm" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vorige scherm" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Førre skjerm" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Poprzedni ekran" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tela anterior" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ecrã anterior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ecran Anterior" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Предыдущий экран" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Predchádzajúci displej" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Föregående skärm" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Önceki Ekran" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Попередній екран" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Màn hìn trước đó" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "上一个显示器" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "上一個顯示器" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "上一個顯示器" - } - } - } - }, - "qze-7p-m1X.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"1. Bring your chosen todo application frontmost\"; ObjectID = \"qze-7p-m1X\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. اجلب تطبيق المهام الذي اخترته في المقدمة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Porta l'aplicació Todo que has triat al davant" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Porta l'aplicació Todo que has triat al davant" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Přiveďte vaší vybranou todo aplikaci do popředí" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Bringe die gewünschte To-do-Anwendung in den Vordergrund." - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "1. Bring your chosen todo application frontmost" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Traer la aplicación 'Todo' elegida encima de todo" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Traer la aplicación 'Todo' elegida encima de todo" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Mettre votre application todo au premier plan" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Bawa aplikasi todo pilihan Anda paling depan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Seleziona la finestra dell'applicazione scelta" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. ToDoアプリに指定したいアプリを最前面に表示します" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Todo 응용 프로그램을 맨 앞에 둡니다" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Pirmame plane padėkite pasirinktą Todo programą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Legg det valgte Gjøreliste-programmet lengst fram" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Bring your chosen todo application frontmost" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Legg det valde Gjereliste-programmet lengst fram" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Bring your chosen todo application frontmost" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Trazer seu aplicativo todo escolhido para frente" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Bring your chosen todo application frontmost" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Aduceți aplicația aleasă cel mai în față" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Разместите выбранное в качестве Todo приложение на переднем плане" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Presuň zvolenú Todo aplikáciu do popredia" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Placera din valda Att göra-applikation längst fram" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Seçtiğiniz Todo uygulamasını en öne alın" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Перемістіть обране завдання у передній план" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1. Hiển thị ứng dụng todo được chọn lên trên cùng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "⒈前置您选择的待办应用" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "⒈ 將您選擇的待辦應用程式移至最前" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "⒈將你選擇的待辦應用移到最前" - } - } - } - }, - "r2Y-cY-tgn.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Haptic feedback\"; ObjectID = \"r2Y-cY-tgn\";", - "extractionState" : "stale", - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Haptisches Feedback" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Haptic feedback" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "触覚フィードバック" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "햅틱 피드백" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Тактильный отклик" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Haptická odozva" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phản hồi xúc giác" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "触感反馈" - } - } - } - }, - "R4o-n2-Eq4.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Zoom\"; ObjectID = \"R4o-n2-Eq4\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تكبير" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoomen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Réduire/agrandir" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Perbesar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ズーム" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "확대/축소" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Priartinti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Увеличить" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoom" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Phóng" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "缩放" - } - } - } - }, - "r4Q-q9-FLt.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"r4Q-q9-FLt\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - } - } - }, - "RB4-Sm-HuC.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"RB4-Sm-HuC\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : " t من اليمين إلى اليسار" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDreta a esquerra" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDreta a esquerra" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVon rechts nach links" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDerecha a izquierda" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDerecha a izquierda" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDe droite à gauche" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tKanan ke Kiri" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa destra a sinistra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t右から左" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "\t오른쪽에서 왼쪽" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tIš dešinės į kairę" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tHøgre til venstre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tVan rechts naar links" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tHøgre til venstre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tOd prawej do lewej" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa direita para a esquerda" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tDa direita para a esquerda" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tСправа налево" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "\tHöger till vänster" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tPhải sang trái" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "\\tRight to Left" - } - } - } - }, - "rbD-Rh-wIN.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Check Spelling While Typing\"; ObjectID = \"rbD-Rh-wIN\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تدقيق إملائي أثناء الكتابة" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comproveu l'ortografia mentre escriviu" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comproveu l'ortografia mentre escriviu" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Während der Texteingabe prüfen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revisar la ortografía mientras escribe" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Revisar la ortografía mientras escribe" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vérifier l'orthographe pendant la frappe" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Periksa Ejaan saat Mengetik" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Controlla ortografia durante la digitazione" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "入力中にスペルチェック" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "입력하는 동안 맞춤법 검사" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rašybos tikrinimas rašant tekstą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontroller stavemåte mens du skriver" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Controleer de spelling tijdens het typen" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontroller stavemåte mens du skriv" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sprawdź pisownię podczas pisania" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar ortografia durante a digitação" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verificar ortografia enquanto escreve" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Проверка орфографии при наборе текста" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kontrollera stavningen medan du skriver" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kiểm tra chính tả khi gõ" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "键入时检查拼写" - } - } - } - }, - "Reflow Todo" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Repositionner Todo" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redistribueix Todo" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Redistribueix Todo" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "To-do neu ausrichten" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflujo en 'Todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflujo en 'Todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Repositionner Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alur Ulang Todo" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reimposta In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ToDoモードを再設定" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 재배치" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Atnaujinti Todo lango padėtį" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt om på Gjøreliste" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Flytt om på Gjereliste" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reflow Todo" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Обновить положение Todo окна" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preusporiadať Todo" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ordna om Att göra" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Переформатувати вікна Завдань" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Làm mới Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新排列待办" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新排列待辦" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "重新排列待辦" - } - } - } - }, - "rgM-f4-ycn.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Smart Dashes\"; ObjectID = \"rgM-f4-ycn\";", - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "شرطات ذكية" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Guions intel·ligents" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Guions intel·ligents" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Intelligente Bindestriche" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Raya inteligente" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Raya inteligente" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tirets intelligents" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tanda Hubung Pintar" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trattini intelligenti" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "スマートダッシュ記号" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "스마트 대시" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Protingi brūkšniai" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smarte bindestreker" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Slimme streepjes" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smarte bindestrekar" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inteligentne myślniki" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Traços Inteligentes" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Traços Inteligentes" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Умные тире" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Smarta bindestreck" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dấu gạch ngang thông minh" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "智能破折号" - } - } - } - }, - "RgZ-Jw-XQZ.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Import\"; ObjectID = \"RgZ-Jw-XQZ\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يستورد" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importa" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importa" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importovat" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Import" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importer" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Impor" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importa" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "インポート" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "가져오기" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importuoti" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importer" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importer" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importă" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Импорт" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importovať" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Importera" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "İçe Aktar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Імпортувати" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nhập" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "导入" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "輸入" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "輸入" - } - } - } - }, - "Right side, top/bottom side near corners" : { - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moitié droite, moitié du haut/bas près des coins" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pravá polovina, horní/spodní polovina blízko rohů" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rechte Hälfte, Obere/Untere Hälfte in der Nähe der Ecken" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitad derecha, mitad superior/inferior cerca de las esquinas" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mitad derecha, mitad superior/inferior cerca de las esquinas" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moitié droite, moitié du haut/bas près des coins" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Metà destra, metà superiore/inferiore vicino gli angoli" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "右半分、画面端付近の上半分・下半分" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "반, 위/아래 반에 근접한 모서리" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dešinė pusė, viršutinė/apačioje pusė šalia kampų" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Høgre halvdel, øverste/nederste halvdel nære hjørne" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Høgre halvdel, øvste/nedste halvdel nære hjørne" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Metade direita, metade cima/baixo próximo das bordas" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Правая половина, верхняя/нижняя половина возле углов" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pravá polovica, horná/spodná polovica blízko rohov" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Right side, top/bottom side near corners" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sağ yarım (köşelere yaklaşıldığında ise üst/alt yarım)" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Права половина, верхня/нижня половина близько кутів" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nửa phải, nửa trên/dưới nếu ngay góc" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右半屏,靠近角落则上/下半屏" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右半,靠近角落則上半/下半" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右半,靠近角落則上半/下半" + "value" : "\\tLeft to Right" } } } }, - "rmV-YD-Hzj.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Check for updates automatically\"; ObjectID = \"rmV-YD-Hzj\";", - "extractionState" : "stale", + "LE2-aR-0XJ.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Bring All to Front\"; ObjectID = \"LE2-aR-0XJ\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تحقق من وجود تحديثات تلقائيا" + "value" : "إحضار الكل إلى المقدمة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Comproveu si hi ha actualitzacions automàticament" + "value" : "Porta tot al davant" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Comproveu si hi ha actualitzacions automàticament" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Automaticky kontrolovat aktualizace" + "value" : "Porta tot al davant" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Automatisch nach Updates suchen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Check for updates automatically" + "value" : "Alle nach vorne bringen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Buscar actualizaciones automáticamente" + "value" : "Traer a todos al frente" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Buscar actualizaciones automáticamente" + "value" : "Traer a todos al frente" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rechercher automatiquement les mises à jour" + "value" : "Tout ramener au premier plan" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Periksa untuk Pembaruan Otomatis" + "value" : "Bawa Semua ke Depan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Controlla automaticamente gli aggiornamenti" + "value" : "Porta tutti in primo piano" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "アップデートを自動的に確認" + "value" : "すべてを手前に移動" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "자동으로 업데이트 확인" + "value" : "모두 앞으로 가져오기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Automatiškai tikrinti atnaujinimus" + "value" : "Iškelti viską į priekį" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Se etter oppdateringer automatisk" + "value" : "Legg alle øverst" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Automatisch controleren op updates" + "value" : "Breng alles naar voren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Sjå etter oppdateringar automatisk" + "value" : "Legg alle øvst" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Sprawdzaj aktualizacje automatycznie" + "value" : "Umieść wszystko na wierzchu" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Procurar atualizações automaticamente" + "value" : "Trazer tudo para a frente" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Verifique se há atualizações automaticamente" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verifică actualizările automat" + "value" : "Trazer tudo para a frente" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Проверять обновления автоматически" + "value" : "Вынести всё вперёд" } }, - "sk" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Automaticky kontrolovať aktualizácie" + "value" : "Ta fram allt" } }, - "sv-SE" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sök efter uppdateringar automatiskt" + "value" : "Đưa tất cả ra phía trước" } }, - "tr" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Güncellemeleri otomatik kontrol et" + "value" : "前置全部窗口" } - }, - "uk" : { + } + } + }, + "Light" : { + "extractionState" : "manual", + "localizations" : { + "en" : { "stringUnit" : { "state" : "translated", - "value" : "Перевіряти оновлення автоматично" + "value" : "Light" } }, - "vi" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Tự động kiểm tra các bản cập nhật" + "value" : "ライト" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自动检查更新" + "value" : "浅色" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "自動檢查更新項目" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "自動檢查更新項目" + "value" : "淺色" } } } }, - "Rqc-34-cIF.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Superscript\"; ObjectID = \"Rqc-34-cIF\";", + "LVM-kO-fVI.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Paste Ruler\"; ObjectID = \"LVM-kO-fVI\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مرتفع" + "value" : "لصق المسطرة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Superíndex" + "value" : "Enganxa regle" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Superíndex" + "value" : "Enganxa regle" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Hochgestellt" + "value" : "Lineal einfügen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Superíndice" + "value" : "Pegar Regla" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Superíndice" + "value" : "Pegar Regla" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Exposant" + "value" : "Règle pour coller" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Superskrip" + "value" : "Tempel Penggaris" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Apice" + "value" : "Incolla righello" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "上付き" + "value" : "ルーラーをペースト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "위 첨자" + "value" : "눈금자 붙여넣기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Superscenario" + "value" : "Įterpti liniuotę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Heva skrift" + "value" : "Lim inn linjal" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Superscript" + "value" : "Lineaal plakken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Heva skrift" + "value" : "Lim inn linjal" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Superscript" + "value" : "Wklej linijkę" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Superscript" + "value" : "Colar régua" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Superescrito" + "value" : "Régua de Colar" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Суперсценарий" + "value" : "Вставить линейку" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Upphöjd" + "value" : "Klistra in linjal" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chữ số trên" + "value" : "Dán thước" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "上标" + "value" : "粘贴标尺" } } } }, - "Ruw-6m-B2m.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Select All\"; ObjectID = \"Ruw-6m-B2m\";", - "extractionState" : "extracted_with_value", + "Maximize" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اختر الكل" + "value" : "Maximiser" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Selecciona-ho tot" + "value" : "Maximitzar" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Selecciona-ho tot" + "value" : "Maximitzar" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Vybrat vše" + "value" : "Maximalizovat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Alles auswählen" + "value" : "Maximieren" } }, - "en" : { + "en-GB" : { "stringUnit" : { - "state" : "new", - "value" : "Select All" + "state" : "translated", + "value" : "Maximise" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Seleccionar todo" + "value" : "Maximizar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Seleccionar todo" + "value" : "Maximizar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Tout sélectionner" + "value" : "Maximiser" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pilih Semua" + "value" : "Maksimalkan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Seleziona tutto" + "value" : "Massimizza" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "すべて選択" + "value" : "最大化" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "모두 선택" + "value" : "최대화" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pasirinkite viską" + "value" : "Maksimizuoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Marker alt" + "value" : "Maksimer" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Selecteer alles" + "value" : "Maximize" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Marker alt" + "value" : "Maksimer" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wybierz wszystko" + "value" : "Maksymalizuj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Selecionar tudo" + "value" : "Maximizar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Selecionar Todos" + "value" : "Maximizar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Selectează Tot" + "value" : "Maximizează" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Выберите всё" + "value" : "Максимизировать" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vybrať všetko" + "value" : "Maximalizovať" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Markera allt" + "value" : "Maximera" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Select All" + "value" : "Tamamını kapla" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Виділити все" + "value" : "Максимізувати" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chọn tất cả" + "value" : "Tối đa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "全选" + "value" : "最大化" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "全選" + "value" : "放到最大" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "全選" + "value" : "放到最大" } } } }, - "rzr-Qq-702.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Right\"; ObjectID = \"rzr-Qq-702\";", - "extractionState" : "stale", + "mK6-2p-4JG.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Check Grammar With Spelling\"; ObjectID = \"mK6-2p-4JG\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تحرك يمينا" + "value" : "تحقق من القواعد مع التدقيق الإملائي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Moure a la dreta" + "value" : "Revisa la gramàtica amb l'ortografia" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Moure a la dreta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Přesunout vpravo" + "value" : "Revisa la gramàtica amb l'ortografia" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nach rechts bewegen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Move Right" + "value" : "Rechtschreib- und Grammatikprüfung" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mover a la derecha" + "value" : "Revisar la gramática con la ortografía" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mover a la derecha" + "value" : "Revisar la gramática con la ortografía" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacer à droite" + "value" : "Vérifier la grammaire avec l'orthographe" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Geser ke Kanan" + "value" : "Periksa Tata Bahasa Dengan Ejaan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sposta a destra" + "value" : "Controlla grammatica insieme all'ortografia" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "右に移動" + "value" : "スペルと一緒に文法をチェック" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "오른쪽으로 이동" + "value" : "맞춤법 및 문법 검사" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Į dešinę" + "value" : "Patikrinti gramatiką naudojant rašybos tikrinimą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Flytt til høgre" + "value" : "Kontroller grammatikk og stavemåte" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Naar rechts" + "value" : "Grammatica en spelling controleren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Flytt til høgre" + "value" : "Kontroller grammatikk og stavemåte" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przesuń w prawo" + "value" : "Sprawdź gramatykę" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mover para a direita" + "value" : "Verificar gramática com ortografia" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Mover para a direita" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mută în Dreapta" + "value" : "Verificar gramática com ortografia" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Направо" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Presunúť vpravo" + "value" : "Проверить грамматику с помощью правописания" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Flytta höger" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sağ Kenar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перемістити праворуч" + "value" : "Kontrollera grammatik med stavning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Qua phải" + "value" : "Kiểm tra ngữ pháp với chính tả" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "向右移动" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右移" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右移" + "value" : "检查拼写和语法" } } } }, - "S0p-oC-mLd.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Jump to Selection\"; ObjectID = \"S0p-oC-mLd\";", - "extractionState" : "extracted_with_value", + "MkV-Pr-PK5.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Copy Ruler\"; ObjectID = \"MkV-Pr-PK5\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "انتقل إلى التحديد" + "value" : "نسخ المسطرة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Salta a la selecció" + "value" : "Regla de còpia" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Salta a la selecció" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zobrazit výběr" + "value" : "Regla de còpia" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zur Auswahl springen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Jump to Selection" + "value" : "Lineal kopieren" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ir a la selección" + "value" : "Copiar regla" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ir a la selección" + "value" : "Copiar regla" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Aller à la sélection" + "value" : "Règle pour copier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Lompat ke Terpilih" + "value" : "Salin Penggaris" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Vai alla selezione" + "value" : "Copia righello" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "選択部分へジャンプ" + "value" : "ルーラーをコピー" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "선택 부분으로 이동" + "value" : "눈금자 복사하기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pereiti prie pasirinkto" + "value" : "Nukopijuoti liniuotę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gå til markering" + "value" : "Kopier linjal" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ga naar selectie" + "value" : "Lineaal kopiëren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Gå til markering" + "value" : "Kopier linjal" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przejdź do wyboru" + "value" : "Kopiuj linijkę" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ir para a seleção" + "value" : "Copiar régua" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Ir para a seleção" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sari la Selecție" + "value" : "Régua de Cópia" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Перейти к выбранному" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prejsť na výber" + "value" : "Скопировать линейку" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Hoppa till markerad" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jump to Selection" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перейти до вибору" + "value" : "Kopiera linjal" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Nhảy đến lựa chọn" + "value" : "Sao chép Thước kẻ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "跳到所选内容" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "跳至所選範圍" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "跳去所選範圍" - } - } - } - }, - "Show additional sizes in menu" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "메뉴에 추가 크기 표시" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiển thị kích thước bổ sung trong menu" - } - } - } - }, - "Side Split Ratio" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "절반 분할 비율" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tỷ lệ chia một nửa" + "value" : "拷贝标尺" } } } }, - "Sides" : { + "Move to Edge" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Moitiés" + "value" : "Déplacer vers le bord" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Meitats" + "value" : "Mou a la vora" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Meitats" + "value" : "Mou a la vora" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Poloviny" + "value" : "Přesunout ke kraji" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Hälften" + "value" : "An den Rand bewegen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mitades" + "value" : "Desplazar al borde" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mitades" + "value" : "Desplazar al borde" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Moitiés" + "value" : "Déplacer vers le bord" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bagian" + "value" : "Geser ke Tepi" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Metà" + "value" : "Muovi verso i bordi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "半分" + "value" : "画面端に移動" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "절반" + "value" : "모서리로 이동" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pusės" + "value" : "Perkelti į kraštą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Halvdeler" + "value" : "Flytt til kanten" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sides" + "value" : "Verplaats naar de rand" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Halvdelar" + "value" : "Flytt til kanten" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Połowy" + "value" : "Przesuń do krawędzi" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Metades" + "value" : "Mover para a borda" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Metades" + "value" : "Mover para Lado" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Половинки" + "value" : "Переместить к краю" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Polovice" + "value" : "Presunúť na okraj" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Hälfter" + "value" : "Flytta till kanten" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Yarımlar" + "value" : "Kenarlar" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Половини" + "value" : "Перемістити до краю" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Một nửa" + "value" : "Đi đến cạnh" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "半屏" + "value" : "移动到边缘" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "一半螢幕" + "value" : "移至邊緣" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "一半螢幕" - } - } - } - }, - "Sixteenths" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/16" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ mười sáu" + "value" : "移到邊緣" } } } }, - "Sixteenths (4×4)" : { - "extractionState" : "stale", + "Ninths" : { "localizations" : { "ko" : { "stringUnit" : { "state" : "translated", - "value" : "1/16 (4×4)" + "value" : "1/9" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Thứ mười sáu (4×4)" + "value" : "Thứ chín" } } } }, - "Sixths" : { + "NMo-om-nkz.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Services\"; ObjectID = \"NMo-om-nkz\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Sixièmes" + "value" : "خدمات" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Sisenes" + "value" : "Serveis" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Sisenes" + "value" : "Serveis" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Šestiny" + "value" : "Služby" } }, "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Sechstel" + "state" : "translated", + "value" : "Dienste" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Services" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos" + "value" : "Servicios" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos" + "value" : "Servicios" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sixièmes" + "value" : "Services" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Seperenam" + "value" : "Layanan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Terzi" + "value" : "Servizi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "6分割" + "value" : "サービス" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "6등분" + "value" : "서비스" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Šeštosios" + "value" : "Paslaugos" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sjettedeler" + "value" : "Tjenester" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Zesden" + "value" : "Diensten" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Sjettedelar" + "value" : "Tenester" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jedne szóste" + "value" : "Usługi" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos" + "value" : "Serviços" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos" + "value" : "Serviços" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicii" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Шестые" + "value" : "Службы" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Šestiny" + "value" : "Služby" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Sjättedelar" + "value" : "Tjänster" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Altıda bir" + "value" : "Servisler" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Шості" + "value" : "Сервіси" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Phần sáu" + "value" : "Dịch vụ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "六等分" + "value" : "服务" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "六等分" + "value" : "服務" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "六等分" + "value" : "服務" } } } }, - "Size" : { + "Nop-cj-93Q.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"\\tDefault\"; ObjectID = \"Nop-cj-93Q\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Taille" + "value" : " t الافتراضي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Mida" + "value" : "\tPer defecte" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Mida" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Velikost" + "value" : "\tPer defecte" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Größe" + "value" : "\tStandard" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tamaño" + "value" : "\tPredeterminado" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tamaño" + "value" : "\tPredeterminado" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Taille" + "value" : "\tPar défaut" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ukuran" + "value" : "\tBawaan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Dimensione" + "value" : "\tPredefinito" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "サイズ" + "value" : "\tデフォルト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "크기" + "value" : "\t기본" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Dydis" + "value" : "\tPagal nutylėjimą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Størrelse" + "value" : "\tStandard" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Size" + "value" : "\tStandaard" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Storleik" + "value" : "\tStandard" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Rozmiar" + "value" : "\tDomyślnie" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Tamanho" + "value" : "\tPadrão" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Tamanho" + "value" : "\tPadrão" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Размер" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Veľkosť" + "value" : "\tПо умолчанию" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Storlek" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Boyut" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Розмір" + "value" : "\tStandard" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Kích cỡ" + "value" : "\\tMặc định" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "大小" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "大小" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "大小" - } - } - } - }, - "Smaller Width" : { - "extractionState" : "manual", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Smaller Width" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "너비 작게" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уменьшить ширину" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chiều rộng nhỏ hơn" + "value" : "\\tDefault" } } } }, - "snW-S8-Cw5.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show Toolbar\"; ObjectID = \"snW-S8-Cw5\";", + "o6e-r0-MWq.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Ligatures\"; ObjectID = \"o6e-r0-MWq\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إظهار شريط الأدوات" + "value" : "الأربطة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra la barra d'eines" + "value" : "Lligadures" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra la barra d'eines" + "value" : "Lligadures" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Symbolleiste einblenden" + "value" : "Ligaturen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar barra de herramientas" + "value" : "Ligaduras" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar barra de herramientas" + "value" : "Ligaduras" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Afficher la barre d'outils" + "value" : "Ligatures" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tampilkan Bilah Alat" + "value" : "Ligatur" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra la barra strumenti" + "value" : "Legature" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ツールバーを表示" + "value" : "リガチャ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "도구 막대 보기" + "value" : "합자" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rodyti įrankių juostą" + "value" : "Ligatūros" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vis verktøyrada" + "value" : "Ligaturer" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Werkbalk weergeven" + "value" : "Ligaturen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Vis verktøyrada" + "value" : "Ligaturar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pokaż pasek narzędzi" + "value" : "Ligatury" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar barra de ferramentas" + "value" : "Ligaduras" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar barra de ferramentas" + "value" : "Ligaduras" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Показать панель инструментов" + "value" : "Лигатуры" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Visa verktygsfältet" + "value" : "Ligaturer" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Hiển thị thanh công cụ" + "value" : "Chữ ghép" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "显示工具栏" + "value" : "连字" } } } }, - "STb-JK-oB1.title" : { - "comment" : "Class = \"NSWindow\"; title = \"Rectangle Settings\"; ObjectID = \"STb-JK-oB1\";", - "extractionState" : "stale", + "O8K-y6-bva.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"View Logging…\"; ObjectID = \"O8K-y6-bva\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { - "state" : "needs_review", - "value" : "تفضيلات المستطيل" + "state" : "translated", + "value" : "عرض التسجيل ..." } }, "ca" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferències de Rectangle" + "state" : "translated", + "value" : "Veure registre de missatges…" } }, "ca-ES" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferències de Rectangle" + "state" : "translated", + "value" : "Veure registre de missatges…" } }, "cs" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle předvolby" + "state" : "translated", + "value" : "Zobrazit logování…" } }, "de" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle-Einstellungen" + "state" : "translated", + "value" : "Protokolle anzeigen…" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Rectangle Settings" + "value" : "View Logging…" } }, "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferencias de Rectangle" + "state" : "translated", + "value" : "Ver registro de mensajes…" } }, "es-419" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferencias de Rectangle" + "state" : "translated", + "value" : "Ver registro de mensajes…" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Préférences Rectangle" + "state" : "translated", + "value" : "Voir le journal…" } }, "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferensi Rectangle" + "state" : "translated", + "value" : "Lihat Pencatatan…" } }, "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferenze Rectangle" + "state" : "translated", + "value" : "Vedi resoconto…" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle環境設定" + "state" : "translated", + "value" : "ログを表示…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle 설정" + "value" : "로그 보기…" } }, "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle nustatymai" + "state" : "translated", + "value" : "Peržiūrėti žurnalą…" } }, "nb" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle-innstillinger" + "state" : "translated", + "value" : "Vis loggen…" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Voorkeuren Rectangle" + "state" : "translated", + "value" : "View Logging…" } }, "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle-innstillingar" + "state" : "translated", + "value" : "Vis loggen…" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferencje Rectangle" + "state" : "translated", + "value" : "Pokaż logowanie…" } }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferências do Rectangle" + "state" : "translated", + "value" : "Visualizar logs…" } }, "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferências do Rectangle" + "state" : "translated", + "value" : "Ver Registos…" } }, "ro" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Preferințe Rectangle" + "state" : "translated", + "value" : "Vizualizează Log-uri…" } }, "ru" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Настройки Rectangle" + "state" : "translated", + "value" : "Просмотр журнала…" } }, "sk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle predvoľby" + "state" : "translated", + "value" : "Zobraziť záznamy…" } }, "sv-SE" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle-inställningar" + "state" : "translated", + "value" : "Visa loggen…" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle Tercihleri" + "state" : "translated", + "value" : "View Logging…" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Налаштування Rectangle" + "state" : "translated", + "value" : "Переглянути журнал подій…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cài đặt của Rectangle" + "value" : "Xem nhật ký…" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle 偏好设置" + "state" : "translated", + "value" : "查看日志…" } }, "zh-Hant" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle 偏好設定" + "state" : "translated", + "value" : "檢視記錄⋯" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Rectangle偏好設定" + "state" : "translated", + "value" : "檢視記錄⋯" } } } }, - "SXx-HZ-GkB.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Cycle across displays on repeated left or right commands\"; ObjectID = \"SXx-HZ-GkB\";", + "OaQ-X3-Vso.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Baseline\"; ObjectID = \"OaQ-X3-Vso\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "التنقل عبر شاشات العرض بأوامر متكررة يسارًا أو يمينًا" + "value" : "حدود" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Passeu per les pantalles amb ordres repetides a l'esquerra o a la dreta" + "value" : "Línia base" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Passeu per les pantalles amb ordres repetides a l'esquerra o a la dreta" + "value" : "Línia base" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Monitorwechsel bei wiederholten Links/Rechts-Befehlen" + "value" : "Schriftlinie" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Bucle a través de pantallas en ejecuciones repetidas de comandos de movimiento a la izquierda o a la derecha" + "value" : "Línea de base" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Bucle a través de pantallas en ejecuciones repetidas de comandos de movimiento a la izquierda o a la derecha" + "value" : "Línea de base" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacer sur les moniteurs lors de commandes gauche ou droite répétées" + "value" : "Ligne de base" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Berputar melintasi tampilan pada perintah kiri atau kanan yang berulang" + "value" : "Garis Dasar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Spostati tra gli schermi con comandi ripetuti a sinistra o destra" + "value" : "Linea base" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "左半分/左半分にサイズ変更するコマンドを繰り返したら、ウインドウを表示するディスプレイを変更" + "value" : "ベースライン" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "왼쪽 및 오른쪽 명령을 반복하여 디스플레이 순환" + "value" : "기준선" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Perkelti langus tarp ekranų, kai lygiuojama iš eilės į kairę arba į dešinę" + "value" : "Pagrindinis rodiklis" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gå gjennom skjermene ved å gjenta venstre- eller høgrekommandoer" + "value" : "Grunnlinje" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ga schermen langs bij opeenvolgende uitvoeringen van links of rechts" + "value" : "Basislijn" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Gå gjennom skjermane ved å gjenta venstre- eller høgrekommandoar" + "value" : "Grunnline" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przechodź między ekranami przy powtarzających się komendach lewo/prawo" + "value" : "Poziom bazowy" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Navegue entre telas repetindo os comandos para a direita ou esquerda" + "value" : "Linha de base" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Alternar entre ecrãs ao repetir comandos para a esquerda ou para a direita" + "value" : "Base de referência" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Перемещать окна между экранами при последовательном выравнивании влево или вправо" + "value" : "Базовый показатель" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Bläddra mellan skärmarna med upprepade vänster- eller högerkommandon" + "value" : "Baslinje" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chuyển đổi qua lại giữa các màn hình hiển thị theo lệnh lặp lại bên trái hoặc bên phải" + "value" : "Đường cơ sở" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "通过重复向左或向右命令在显示器循环显示" + "value" : "基线" } } } }, - "t7n-mU-75I.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Enable Rectangle.app\"; ObjectID = \"t7n-mU-75I\";", - "extractionState" : "stale", + "oas-Oc-fiZ.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Open Recent\"; ObjectID = \"oas-Oc-fiZ\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تحقق من Rectangle.app" + "value" : "فتح الأحدث" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Comprova Rectangle.app" + "value" : "Obre recents" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Comprova Rectangle.app" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zkontrolovat Rectangle.app" + "value" : "Obre recents" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle.app prüfen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Enable Rectangle.app" + "value" : "Zuletzt geöffnet" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Compruebe Rectangle.app" + "value" : "Abrir reciente" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Compruebe Rectangle.app" + "value" : "Abrir reciente" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Vérifier Rectangle.app" + "value" : "Ouvrir l'élément récent" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Periksa Rectangle.app" + "value" : "Buka Baru-baru Ini" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Controlla Rectangle.app" + "value" : "Apri recente" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle.appを確認してください" + "value" : "最近使った項目を開く" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle.app 확인하기" + "value" : "최근 사용 열기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Patikrinkite failą Rectangle.app." + "value" : "Atidaryti paskutinius" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sjekk Rectangle.app" + "value" : "Åpne sist brukte" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Controleer Rectangle.app" + "value" : "Open recent" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Sjekk Rectangle.app" + "value" : "Opne sist brukte" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Sprawdź Rectangle.app." + "value" : "Niedawno otwarte" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Verificar Rectangle.app" + "value" : "Abrir recente" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Verificar Rectangle.app" + "value" : "Abrir Recente" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Verifică Rectangle.app" + "value" : "Открыть недавнее" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Проверьте файл Rectangle.app." + "value" : "Öppna senaste" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Skontrolovať Rectangle.app" + "value" : "Mở gần nhất…" } }, - "sv-SE" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "打开最近使用" + } + } + } + }, + "ogc-rX-tC1.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Loosen\"; ObjectID = \"ogc-rX-tC1\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Kontrollera Rectangle.app" + "value" : "فك" } }, - "tr" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle.app'ı işaretleyerek izin verin" + "value" : "Deixar anar" } }, - "uk" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Увімкнути Rectangle.app" + "value" : "Deixar anar" } }, - "vi" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" + } + }, + "es" : { "stringUnit" : { "state" : "translated", - "value" : "Bật Rectangle.app" + "value" : "Aflojar" } }, - "zh-Hans" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "启用 Rectangle.app" + "value" : "Aflojar" } }, - "zh-Hant" : { + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desserrer" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Longgarkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Allenta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ゆるく" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "넓게" + } + }, + "lt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atlaisvinti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Løsere" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Losmaken" + } + }, + "nn" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lausare" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zluzuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afrouxar" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afrouxar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Расслабьтесь" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lossa" + } + }, + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "啟用 Rectangle.app" + "value" : "Nới lỏng" } }, - "zh-Hant-HK" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "啟用Rectangle.app" + "value" : "松排" } } } }, - "T9Z-QF-gwc.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"First Three Fourths\"; ObjectID = \"T9Z-QF-gwc\";", - "extractionState" : "stale", + "Olw-nP-bQN.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Hide Rectangle\"; ObjectID = \"Olw-nP-bQN\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "أول ثلاثة أرباع" + "value" : "إخفاء المستطيل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Primers tres quarts" + "value" : "Amaga Rectangle" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Primers tres quarts" + "value" : "Amaga Rectangle" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "První tři čtvrtiny" + "value" : "Skrýt Rectangle" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Erste drei Viertel" + "value" : "Rectangle ausblenden" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "First Three Fourths" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "First Three Quarters" + "value" : "Hide Rectangle" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Primeros tres cuartos" + "value" : "Ocultar Rectangle" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Primeros tres cuartos" + "value" : "Ocultar Rectangle" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Trois quarts de gauche" + "value" : "Masquer Rectangle" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tiga Perempat Pertama" + "value" : "Sembunyikan Rectangle" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Primi tre quarti" + "value" : "Nascondi Rectangle" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3/4にして左寄せ" + "value" : "Rectangleを非表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "처음 3/4" + "value" : "Rectangle 가리기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pirmosios trys ketvirtys" + "value" : "Slėpti Rectangle" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Første tre fjerdedeler" + "value" : "Skjul Rectangle" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "" + "value" : "Verberg Rectangle" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Fyrste tre fjerdedelar" + "value" : "Gøym Rectangle" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pierwsze trzy czwarte" + "value" : "Ukryj Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Primeiro três quartos" + "value" : "Ocultar Rectangle" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Primeiros Três Quartos" + "value" : "Ocultar Rectangle" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Primele Trei Sferturi" + "value" : "Ascunde Rectangle" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Первые три четверти" + "value" : "Скрыть Rectangle" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Prvé tri štvrtiny" + "value" : "Skryť Rectangle" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Första tre fjärdedelar" + "value" : "Dölj Rectangle" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "İlk Üç Çeyrek" + "value" : "Rectangle'ı Gizle" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Перші три чверті" + "value" : "Сховати Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "3/4 đầu" + "value" : "Ẩn Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "左侧3/4" + "value" : "隐藏 Rectangle" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "左側3/4" + "value" : "隱藏 Rectangle" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "左側3/4" + "value" : "隱藏Rectangle" } } } }, - "Td7-aD-5lo.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Window\"; ObjectID = \"Td7-aD-5lo\";", - "extractionState" : "extracted_with_value", + "Other" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نافذة او شباك" + "value" : "Other" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Finestra" + "value" : "Altres" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Finestra" + "value" : "Altres" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Okno" + "value" : "Ostatní" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Fenster" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Window" + "value" : "Mehr" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ventana" + "value" : "Otros" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ventana" + "value" : "Otros" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Fenêtre" + "value" : "Other" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jendela" + "value" : "Lainnya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Finestra" + "value" : "Altro" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウ" + "value" : "そのほか" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "창" + "value" : "기타" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Langas" + "value" : "Kita" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vindu" + "value" : "Annet" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Venster" + "value" : "Other" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Vindauge" + "value" : "Anna" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Okno" + "value" : "Inne" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Janela" + "value" : "Outro" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Janela" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fereastră" + "value" : "Outro" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Окно" + "value" : "Другое" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Okno" + "value" : "Ostatné" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Fönster" + "value" : "Annat" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Pencere" + "value" : "Diğer" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Вікно" + "value" : "Інше" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cửa sổ" + "value" : "Khác" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "窗口" + "value" : "其他" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "視窗" + "value" : "其他" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "視窗" + "value" : "其他" } } } }, - "Thirds" : { + "OwM-mh-QMV.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Find Previous\"; ObjectID = \"OwM-mh-QMV\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers" + "value" : "البحث عن السابق" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Terços" + "value" : "Cerca anterior" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Terços" + "value" : "Cerca anterior" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Třetiny" + "value" : "Hledat předchozí" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Drittel" + "value" : "Weitersuchen (rückwärts)" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Find Previous" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tercios" + "value" : "Buscar anterior" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tercios" + "value" : "Buscar anterior" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers" + "value" : "Rechercher le précédent" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sepertiga" + "value" : "Temukan Sebelumnya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Terzi" + "value" : "Trova precedente" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3分割" + "value" : "前を検索" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "3등분" + "value" : "이전 찾기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Trečdaliai" + "value" : "Rasti ankstesnį" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedeler" + "value" : "Finn forrige" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds" + "value" : "Zoek vorige" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedelar" + "value" : "Finn førre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jedne trzecie" + "value" : "Znajdź poprzedni" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Terços" + "value" : "Buscar anterior" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Terços" + "value" : "Encontrar Anterior" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caută în Spate" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Трети" + "value" : "Найти предыдущий" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Tretiny" + "value" : "Nájsť predchádzajúce" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedelar" + "value" : "Sök föregående" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Üçte bir" + "value" : "Öncekini Bul" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Третини" + "value" : "Знайти попередній" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/3" + "value" : "Tìm kiếm trước đó" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "三等分" + "value" : "查找上一个" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "三等分" + "value" : "尋找上一個" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "三等分" + "value" : "尋找上一個" } } } }, - "Thirds, drag toward center for two thirds" : { - "extractionState" : "stale", + "OY7-WF-poV.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Minimize\"; ObjectID = \"OY7-WF-poV\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers, glisser vers le centre pour deux tiers" + "value" : "تصغير" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimitzar" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimitzar" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Třetiny, táhnout směrem ke středu pro dvě třetiny" + "value" : "Minimalizovat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Drittel, zur Mitte ziehen für zwei Drittel" + "value" : "Im Dock ablegen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Minimize" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimise" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tercios, arrastrar hacia el centro para dos tercios" + "value" : "Minimizar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tercios, arrastrar hacia el centro para dos tercios" + "value" : "Minimizar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers, glisser vers le centre pour deux tiers" + "value" : "Placer dans le Dock" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Kecilkan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Terzi, trascina verso il centro per i due terzi" + "value" : "Contrai" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3分割、中心にドラッグで2/3" + "value" : "しまう" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "1/3, 가운데로 드래그하면 2/3" + "value" : "최소화" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Trečdalys, perkelkite į centrą du trečdalius" + "value" : "Sumažinti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedeler, dra mot midten for to tredjedeler" + "value" : "Minimer" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimaliseren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedelar, dra mot midten for to tredjedelar" + "value" : "Minimer" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Zminimalizuj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimizar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimizar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimizează" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Трети, перетащите к центру на две трети" + "value" : "Минимизировать" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Tretiny, ťahaj smerom do stredu pre dve tretiny" + "value" : "Minimalizovať" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, drag toward center for two thirds" + "value" : "Minimera" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Üçte bir (üçte iki için ortaya doğru sürükleyin)" + "value" : "Küçült" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Третини, перетягніть у центр для двох третин" + "value" : "Згорнути" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/3, kéo đến giữa thành 2/3" + "value" : "Thu nhỏ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "⅓,向中间拖移则⅔" + "value" : "最小化" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "⅓,向中央拖移則⅔" + "value" : "縮到最小" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "⅓,向中央拖移則⅔" + "value" : "縮到最細" } } } }, - "Thirds, top/bottom side near corners" : { - "extractionState" : "stale", + "Oyz-dy-DGm.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Stop Speaking\"; ObjectID = \"Oyz-dy-DGm\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers, moitié du haut/bas près des coins" + "value" : "توقف عن الكلام" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Deixar de parlar" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Třetiny, horní/spodní polovina blízko rohů" + "value" : "Deixar de parlar" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Drittel, Obere/Untere Hälfte in der Nähe der Ecken" + "value" : "Sprachausgabe stoppen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tercios, mitad superior/inferior cerca de las esquinas" + "value" : "Deja de hablar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tercios, mitad superior/inferior cerca de las esquinas" + "value" : "Deja de hablar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Tiers, moitié du haut/bas près des coins" + "value" : "Arrêter Dictée" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Berhenti Bicara" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Terzi, metà superiore/inferiore vicino gli angoli" + "value" : "Interrompi lettura" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3分割、画面端付近の上半分・下半分" + "value" : "読み上げを停止" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "1/3, 위/아래 반에 근접한 모서리" + "value" : "말하기 중단" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Trečdalys, viršutinė/apačioje pusė šalia kampų" + "value" : "Užtenka plepėti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedeler, øverste/nederste halvdel nære hjørne" + "value" : "Stopp opplesing" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Stop met praten" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tredjedelar, øvste/nedste halvdel nære hjørne" + "value" : "Stopp opplesing" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Przestań mówić" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Pare de falar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Parar de falar" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "Хватит болтать" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Трети, верхняя/нижняя половина возле углов" + "value" : "Sluta prata" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tretiny, horná/spodná polovica blízko rohov" + "value" : "Dừng đọ" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Thirds, top/bottom side near corners" + "value" : "停止朗读" } - }, - "tr" : { + } + } + }, + "pa3-QI-u2k.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Delete\"; ObjectID = \"pa3-QI-u2k\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Üçte bir (köşelere yaklaşıldığında ise üst/alt)" + "value" : "يمسح" } }, - "uk" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Третини, верхня/нижня половина близько кутів" + "value" : "Suprimeix" } }, - "vi" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "1/3, nửa trên/dưới nếu ngay góc" + "value" : "Suprimeix" } }, - "zh-Hans" : { + "cs" : { "stringUnit" : { "state" : "translated", - "value" : "⅓,靠近角落则上/下半屏" + "value" : "Smazat" } }, - "zh-Hant" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "⅓,靠近角落則上半/下半" + "value" : "Löschen" } }, - "zh-Hant-HK" : { + "en" : { "stringUnit" : { - "state" : "translated", - "value" : "⅓;靠近角落則上半/下半" + "state" : "new", + "value" : "Delete" } - } - } - }, - "tileColumns.title" : { - "extractionState" : "manual", - "localizations" : { - "de" : { + }, + "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Fenster in Spalten" + "state" : "translated", + "value" : "Borrar" } }, - "en" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tile in Columns" + "value" : "Borrar" } }, - "es" : { + "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ventanas en columnas" + "state" : "translated", + "value" : "Supprimer" } }, - "es-419" : { + "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ventanas en columnas" + "state" : "translated", + "value" : "Hapus" } }, - "fr" : { + "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Fenêtres en colonnes" + "state" : "translated", + "value" : "Elimina" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "ウインドウを列に並べる" + "state" : "translated", + "value" : "削除" } }, - "zh-Hans" : { + "ko" : { "stringUnit" : { - "state" : "needs_review", - "value" : "按列平铺窗口" + "state" : "translated", + "value" : "삭제" } - } - } - }, - "tileRows.title" : { - "extractionState" : "manual", - "localizations" : { - "de" : { + }, + "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Fenster in Zeilen" + "state" : "translated", + "value" : "Ištrinti" } }, - "en" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tile in Rows" + "value" : "Slett" } }, - "es" : { + "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ventanas en filas" + "state" : "translated", + "value" : "Verwijderen" } }, - "es-419" : { + "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ventanas en filas" + "state" : "translated", + "value" : "Slett" } }, - "fr" : { + "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Fenêtres en lignes" + "state" : "translated", + "value" : "Usuń" } }, - "ja" : { + "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "ウインドウを行に並べる" + "state" : "translated", + "value" : "Excluir" } }, - "zh-Hans" : { + "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "按行平铺窗口" + "state" : "translated", + "value" : "Eliminar" } - } - } - }, - "Tiling" : { - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tiling" + "value" : "Șterge" } - } - } - }, - "Tiling in macOS has been disabled" : { - "extractionState" : "manual", - "localizations" : { - "de" : { + }, + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Das Ziehen von Fenstern an den Bildschirmrand zum Anordnen wurde in den macOS Systemeinstellungen deaktiviert" + "value" : "Удалить" } }, - "ja" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "macOS のタイル表示機能が無効になりました" + "value" : "Odstrániť" } }, - "ko" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "macOS의 타일 정리 기능이 비활성화됨" + "value" : "Ta bort" } }, - "sk" : { + "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Umiestnenie dlaždíc v macOS bolo vypnuté" + "value" : "Sil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tính năng xếp gạch trong macOS đã bị vô hiệu hóa" + "value" : "Xóa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "macOS 中的窗口平铺功能已被禁用" + "value" : "删除" } - } - } - }, - "Tiling in Rectangle has been disabled" : { - "extractionState" : "manual", - "localizations" : { - "ko" : { + }, + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle의 타일 정리 기능이 비활성화됨" + "value" : "刪除" } }, - "vi" : { + "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "Việc xếp gạch trong hình chữ nhật đã bị vô hiệu hóa" + "value" : "刪除" } } } }, - "tlD-Oa-oAM.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Kern\"; ObjectID = \"tlD-Oa-oAM\";", + "Ptp-SP-VEL.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Bigger\"; ObjectID = \"Ptp-SP-VEL\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كيرن" + "value" : "أكبر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Més gran" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Més gran" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zeichenabstand" + "value" : "Größer" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Más grande" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Más grande" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Plus grand" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Lebih Besar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Più grande" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "カーニング" + "value" : "大きく" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "자간" + "value" : "크게" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kernas" + "value" : "Padidinti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Knip" + "value" : "Større" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Groter" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Knip" + "value" : "Større" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Większy" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Maior" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Kern" + "value" : "Maior" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Керн" + "value" : "Больше" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Kerning" + "value" : "Större" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Điều chỉnh khoảng cách giữa" + "value" : "Lớn hơn" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "字句调整" - } - } - } - }, - "To adjust macOS tiling, go to System Settings → Desktop & Dock → Windows" : { - "extractionState" : "manual", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "macOS 타일 정리 기능을 조정하려면, 시스템 설정 → 데스크탑 및 Dock → 윈도우로 이동하세요" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Để điều chỉnh ô xếp macOS, hãy vào Cài đặt hệ thống → Màn hình nền & Dock → Windows" + "value" : "较大" } } } }, - "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." : { - "extractionState" : "stale", + "pxx-59-PXV.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Save…\"; ObjectID = \"pxx-59-PXV\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Pour permettre à Rectangle de gérer la fonctionnalité de double-clic sur la barre de titre d'une fenêtre, vous devez désactiver le paramètre macOS correspondant." + "value" : "يحفظ…" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Desa…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Desa…" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Uložit…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Damit Rectangle die Doppelklickfunktion der Titelleiste verwalten kann, muss die entsprechende macOS Systemeinstellung deaktiviert werden." + "value" : "Sichern…" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Save…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Para permitir que Rectangle administre la funcionalidad de doble click en la barra de título, debes deshabilitar los ajustes correspondientes de macOS." + "value" : "Guardar…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Para permitir que Rectangle administre la funcionalidad de doble click en la barra de título, debes deshabilitar los ajustes correspondientes de macOS." + "value" : "Guardar…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Pour permettre à Rectangle de gérer la fonctionnalité de double-clic sur la barre de titre d'une fenêtre, vous devez désactiver le paramètre macOS correspondant." + "value" : "Sauvegarder…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Simpan…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Per permettere a Rectangle di gestire la funzione di doppio clic sulla barra del titolo, devi disabilitare l'impostazione di macOS corrispondente." + "value" : "Salva…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangleがタイトルバーのダブルクリック機能を管理するには、該当するmacOSの設定を無効にする必要があります。" + "value" : "保存…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle이 제목 막대 두 번 클릭 기능을 제어하려면, 해당하는 macOS 설정을 꺼야 합니다." + "value" : "저장…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Norėdami leisti „Rectangle“ valdyti antraštės juostos dvigubą spustelėjimą, turite išjungti atitinkamą „macOS“ nustatymą." + "value" : "Išsaugoti…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "For å la Rectangle styre dobbeltklikking i vindustittelen må du slå av den tilsvarende innstillinga i macOS." + "value" : "Lagre…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Opslaan…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "For å la Rectangle styra dobbeltklikking i vindaugstittelen må du slå av den tilsvarande innstillinga i macOS." + "value" : "Lagre…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Zapisz…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Salvar…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Guardar…" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Salvează…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Чтобы позволить Rectangle управлять функцией двойного щелчка в заголовке, необходимо отключить соответствующую настройку macOS." + "value" : "Сохранить…" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Aby Rectangle mohol spravovať funkciu dvojitého kliknutia v lište s názvom, musíš vypnúť príslušné nastavenie v macOS." + "value" : "Uložiť…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Save…" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Kaydet…" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "Зберегти…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Để cho phép Rectangle quản lý chức năng nhấp đúp vào thanh tiêu đề, bạn cần phải tắt cài đặt macOS tương ứng." + "value" : "Lưu…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "你需要禁用 macOS 中对应的设置以使用 Rectangle 管理连按窗口标题功能。" + "value" : "存储…" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "若要讓 Rectangle 管理標題列連點功能,您需要停用對應的 macOS 設定。" + "value" : "儲存⋯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "To let Rectangle manage the title bar double click functionality, you need to disable the corresponding macOS setting." + "value" : "儲存⋯" } } } }, - "To re-enable it, go to System Settings → Desktop & Dock → Windows" : { + "Q5e-8K-NDq.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show Fonts\"; ObjectID = \"Q5e-8K-NDq\";", "extractionState" : "manual", "localizations" : { - "de" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Um dies wieder zu aktivieren, gehe zu Systemeinstellungen → Schreibtisch & Dock → Fenster" + "value" : "إظهار الخطوط" } }, - "ja" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "再度有効化するには、システム設定 → デスクトップと Dock → ウインドウに移動します" + "value" : "Mostra tipus de lletra" } }, - "ko" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "다시 켜려면, 시스템 설정 → 데스크탑 및 Dock → 윈도우로 이동합니다" + "value" : "Mostra tipus de lletra" } }, - "sk" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Pre opätovné povolenie, prejdi do Systémové nastavenia → Plocha a Dock → Okná" + "value" : "Schriften einblenden" } }, - "vi" : { + "es" : { "stringUnit" : { "state" : "translated", - "value" : "Để bật lại, hãy vào Cài đặt hệ thống → Màn hình nền & Dock → Windows" + "value" : "Mostrar tipos de letra" } }, - "zh-Hans" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "要重新启用它,请转到系统设置→ 桌面与程序坞 → 窗口" + "value" : "Mostrar tipos de letra" } - } - } - }, - "Top Center Left Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { + }, + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "위 가운데 왼쪽 1/8" + "value" : "Afficher les polices" } }, - "vi" : { + "id" : { "stringUnit" : { "state" : "translated", - "value" : "Trên cùng Bên trái Thứ tám" + "value" : "Tampilkan Jenis Huruf" } - } - } - }, - "Top Center Right Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { + }, + "it" : { "stringUnit" : { "state" : "translated", - "value" : "위 가운데 오른쪽 1/8" + "value" : "Mostra caratteri" } }, - "vi" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Trên cùng Bên phải Thứ tám" + "value" : "フォントパネルを表示" } - } - } - }, - "Top eighths from corners; maximize" : { - "extractionState" : "stale", - "localizations" : { + }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "위쪽 1/8, 모서리에서 최대화" + "value" : "서체 보기" } }, - "vi" : { + "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Thứ tám hàng đầu từ các quả phạt góc; tối đa" + "value" : "Rodyti šriftus" } - } - } - }, - "Top Left Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { + }, + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "위 왼쪽 1/8" + "value" : "Vis fonter" } }, - "vi" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Trên cùng bên trái thứ tám" + "value" : "Toon lettertypen" } - } - } - }, - "Top Right Eighth" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { + }, + "nn" : { "stringUnit" : { "state" : "translated", - "value" : "오른쪽 1/8" + "value" : "Vis fontar" } }, - "vi" : { + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Trên cùng bên phải thứ tám" + "value" : "Pokaż Czcionki" } - } - } - }, - "Top screen edge tiling in macOS is now disabled" : { - "extractionState" : "manual", - "localizations" : { - "ko" : { + }, + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "macOS의 화면 상단 가장자리 타일 정렬이 꺼졌습니다" + "value" : "Mostrar Fontes" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar Fontes" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показать шрифты" + } + }, + "sv-SE" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visa typsnitt" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Tính năng ghép cạnh màn hình trên cùng trong macOS hiện đã bị vô hiệu hóa" + "value" : "Hiển thị phông" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示字体" } } } }, - "Top sixths from corners; maximize" : { - "extractionState" : "stale", + "q09-fT-Sye.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Find Next\"; ObjectID = \"q09-fT-Sye\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Sixièmes haut à partir les coins ; maximiser" + "value" : "بحث عن التالي" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Cerca següent" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Cerca següent" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Horní šestiny z rohů; maximalizovat" + "value" : "Hledat další" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Obere Sechstel beim Ziehen aus den Ecken; maximieren" + "value" : "Weitersuchen (vorwärts)" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Find Next" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos superiores de las esquinas; maximizar" + "value" : "Buscar siguiente" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Sextos superiores de las esquinas; maximizar" + "value" : "Buscar siguiente" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sixièmes haut à partir les coins ; maximiser" + "value" : "Rechercher le suivant" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Temukan Berikutnya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sesti superiori dagli angoli; massimizza" + "value" : "Trova successivo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : " 最大化(画面端にドラッグで上側6分割)" + "value" : "次を検索" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "위쪽 1/6, 모서리에서 최대화" + "value" : "다음 찾기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Viršutinės šeštosios nuo kampų; maksimizuoti" + "value" : "Ieškoti toliau" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Øverste sjettedel fra hjørne; maksimer" + "value" : "Finn neste" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Volgende zoeken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Øvste sjettedel frå hjørne; maksimer" + "value" : "Finn neste" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Znajdź następny" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Buscar próximo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Encontrar Próximo" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Caută în Față" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Верхние шестые от углов; максимизировать" + "value" : "Найти дальше" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Horné šestiny z rohov; maximalizovať" + "value" : "Nájsť ďalšie" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Top sixths from corners; maximize" + "value" : "Sök nästa" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Tamamını kapla (köşelere yaklaşıldığında ise altıda birini kapla)" + "value" : "Sonrakini Bul" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Верхні шості від кутів; максимізувати" + "value" : "Знайти наступне" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/6 phía trên ngay góc; phóng to tối đa" + "value" : "Tìm kiếm kế tiếp" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自角落则顶部⅙;最大化" + "value" : "查找下一个" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "自角落則頂部⅙;放到最大" + "value" : "尋找下一個" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "自角落則頂部⅙;放到最大" - } - } - } - }, - "Top Third" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "위 1/3" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trên cùng thứ ba" - } - } - } - }, - "Top Two Thirds" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "위 2/3" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai phần ba hàng đầu" - } - } - } - }, - "Top/bottom sides" : { - "extractionState" : "manual", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "위/아래 반" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Górna/Dolna połowa" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nửa trên/dưới" - } - } - } - }, - "Treat multiple monitors as one" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "여러 모니터를 하나로 인식" + "value" : "尋找下一個" } } } }, - "tRr-pd-1PS.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Data Detectors\"; ObjectID = \"tRr-pd-1PS\";", + "qIS-W8-SiK.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Page Setup…\"; ObjectID = \"qIS-W8-SiK\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كاشفات البيانات" + "value" : "اعداد الصفحة…" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Detectors de dades" + "value" : "Configura pàgina…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Detectors de dades" + "value" : "Configura pàgina…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Datenerkennung" + "value" : "Papierformat…" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Detectores de datos" + "value" : "Configurar página…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Detectores de datos" + "value" : "Configurar página…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Détecteurs de données" + "value" : "Mise en page…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pendeteksi Data" + "value" : "Pengaturan Halaman…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Rilevatori di dati" + "value" : "Impostazione pagina…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "データ検出" + "value" : "ページ設定…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "데이터 탐지기" + "value" : "페이지 설정…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Duomenų detektoriai" + "value" : "Puslapio nustatymai…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Datadetektorer" + "value" : "Sideinnstillinger…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevensdetectoren" + "value" : "Pagina instellingen…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Datadetektorar" + "value" : "Sideinnstillingar…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Detektory danych" + "value" : "Ustawienia strony…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Detectores de dados" + "value" : "Configuração da Página…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Detectores de dados" + "value" : "Configuração da página…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Детекторы данных" + "value" : "Настройки страницы…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Datadetektorer" + "value" : "Sidinställningar…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Nhận diện dữ liệu" + "value" : "Thiết lập trang…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "数据检测器" + "value" : "页面设置..." } } } }, - "Tt8-3X-UpT.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"Tt8-3X-UpT\";", - "extractionState" : "stale", + "R4o-n2-Eq4.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Zoom\"; ObjectID = \"R4o-n2-Eq4\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "تكبير" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "-" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "-" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "-" + "value" : "Zoomen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Réduire/agrandir" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Perbesar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "ズーム" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "확대/축소" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Priartinti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "-" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "-" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" + "value" : "Увеличить" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "-" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" + "value" : "Zoom" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Phóng" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "-" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" + "value" : "缩放" } } } }, - "TTx-7X-Wie.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Top Center Sixth\"; ObjectID = \"TTx-7X-Wie\";", - "extractionState" : "stale", + "RB4-Sm-HuC.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"RB4-Sm-HuC\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "المركز السادس الأعلى" + "value" : " t من اليمين إلى اليسار" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Sisè superior centre" + "value" : "\tDreta a esquerra" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Sisè superior centre" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Horní prostřední šestina" + "value" : "\tDreta a esquerra" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Oberes mittleres Sechstel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Top Center Sixth" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Top Centre Sixth" + "value" : "\tVon rechts nach links" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Sextante arriba centrado" + "value" : "\tDerecha a izquierda" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Sextante arriba centrado" + "value" : "\tDerecha a izquierda" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Sixième haut centre" + "value" : "\tDe droite à gauche" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Seperenam Tengah Atas" + "value" : "\tKanan ke Kiri" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sesto superiore centrale" + "value" : "\tDa destra a sinistra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "中央上" + "value" : "\t右から左" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "위 가운데 1/6" + "value" : "\t오른쪽에서 왼쪽" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Viršutinė šeštoji centre" + "value" : "\tIš dešinės į kairę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Øvre midtre sjettedel" + "value" : "\tHøgre til venstre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Midden boven zesde" + "value" : "\tVan rechts naar links" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Øvre midtre sjettedel" + "value" : "\tHøgre til venstre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jedna szósta na środku u góry" + "value" : "\tOd prawej do lewej" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sexto superior central" + "value" : "\tDa direita para a esquerda" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Sexto Central Superior" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Șesimea din Centru Sus" + "value" : "\tDa direita para a esquerda" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Верхняя шестая по центру" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Horná prostredná šestina" + "value" : "\tСправа налево" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Övre mitten sjätte" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Üst Orta Altıda bir" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Верхня центральна шоста частина" + "value" : "\tHöger till vänster" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "1/6 ở giữa bên trên" + "value" : "\\tPhải sang trái" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "中上1/6" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "中上1/6" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "中上1/6" - } - } - } - }, - "Twelfths" : { - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/12" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ mười hai" - } - } - } - }, - "Twelfths (4×3)" : { - "extractionState" : "stale", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/12 (4×3)" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thứ mười hai (4×3)" + "value" : "\\tRight to Left" } } } }, - "tXI-mr-wws.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Open Recent\"; ObjectID = \"tXI-mr-wws\";", + "rbD-Rh-wIN.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Check Spelling While Typing\"; ObjectID = \"rbD-Rh-wIN\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "فتح الأحدث" + "value" : "تدقيق إملائي أثناء الكتابة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Obrir recent" + "value" : "Comproveu l'ortografia mentre escriviu" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Obrir recent" + "value" : "Comproveu l'ortografia mentre escriviu" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Benutzte Dokumente" + "value" : "Während der Texteingabe prüfen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Abrir reciente" + "value" : "Revisar la ortografía mientras escribe" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Abrir reciente" + "value" : "Revisar la ortografía mientras escribe" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ouvrir l'élément récent" + "value" : "Vérifier l'orthographe pendant la frappe" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Buka Baru-baru Ini" + "value" : "Periksa Ejaan saat Mengetik" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Apri recente" + "value" : "Controlla ortografia durante la digitazione" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "最近使った項目を開く" + "value" : "入力中にスペルチェック" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "최근 사용 열기" + "value" : "입력하는 동안 맞춤법 검사" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Atidaryti paskutinius" + "value" : "Rašybos tikrinimas rašant tekstą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Åpne sist brukte" + "value" : "Kontroller stavemåte mens du skriver" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Open recent" + "value" : "Controleer de spelling tijdens het typen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Opne sist brukte" + "value" : "Kontroller stavemåte mens du skriv" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Niedawno otwarte" + "value" : "Sprawdź pisownię podczas pisania" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Abrir recente" + "value" : "Verificar ortografia durante a digitação" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Abrir Recente" + "value" : "Verificar ortografia enquanto escreve" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Открыть недавнее" + "value" : "Проверка орфографии при наборе текста" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Öppna senaste" + "value" : "Kontrollera stavningen medan du skriver" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Mở gần nhất" + "value" : "Kiểm tra chính tả khi gõ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "打开最近使用" + "value" : "键入时检查拼写" } } } }, - "UEZ-Bs-lqG.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Capitalize\"; ObjectID = \"UEZ-Bs-lqG\";", + "rgM-f4-ycn.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Smart Dashes\"; ObjectID = \"rgM-f4-ycn\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تكبير" + "value" : "شرطات ذكية" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Primera lletra en majúscula" + "value" : "Guions intel·ligents" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Primera lletra en majúscula" + "value" : "Guions intel·ligents" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Großschreiben" + "value" : "Intelligente Bindestriche" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Capitalizar" + "value" : "Raya inteligente" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Capitalizar" + "value" : "Raya inteligente" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Capitaliser" + "value" : "Tirets intelligents" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gunakan Huruf Besar" + "value" : "Tanda Hubung Pintar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Maiuscolo" + "value" : "Trattini intelligenti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "語頭を大文字にする" + "value" : "スマートダッシュ記号" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "대문자로 만들기" + "value" : "스마트 대시" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Didžiosiomis raidėmis" + "value" : "Protingi brūkšniai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Stor førstebokstav" + "value" : "Smarte bindestreker" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hoofdletters" + "value" : "Slimme streepjes" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Stor fyrstebokstav" + "value" : "Smarte bindestrekar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Kapitalizuj" + "value" : "Inteligentne myślniki" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Capitalizar" + "value" : "Traços Inteligentes" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Maiúsculas" + "value" : "Traços Inteligentes" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "В верхнем регистре" + "value" : "Умные тире" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Kapitalisera" + "value" : "Smarta bindestreck" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "In hoa" + "value" : "Dấu gạch ngang thông minh" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "首字母大写" + "value" : "智能破折号" } } } }, - "uLF-Uf-tBt.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Restore Default Shortcuts & Snap Areas\"; ObjectID = \"uLF-Uf-tBt\";", - "extractionState" : "stale", + "Rqc-34-cIF.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Superscript\"; ObjectID = \"Rqc-34-cIF\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "استعادة الاختصارات الافتراضية ومناطق الانطباق" + "value" : "مرتفع" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Restaura les dreceres predeterminades" + "value" : "Superíndex" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Restaura les dreceres predeterminades" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obnovit výchozí zkratky" + "value" : "Superíndex" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Standard-Tastaturkurzbefehle wiederherstellen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Restore Default Shortcuts & Snap Areas" + "value" : "Hochgestellt" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar accesos directos predeterminados y ajustes de areas" + "value" : "Superíndice" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar accesos directos predeterminados" + "value" : "Superíndice" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurer les raccourcis par défaut" + "value" : "Exposant" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pulihkan Pintasan Bawaah" + "value" : "Superskrip" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ripristina abbreviazioni predefinite" + "value" : "Apice" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ショートカットを初期化" + "value" : "上付き" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "기본 단축키 복원" + "value" : "위 첨자" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Atkurti numatytuosius karštuosius klavišus" + "value" : "Superscenario" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tilbakestill snarveger og festeområder" + "value" : "Heva skrift" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Standaard sneltoetsen herstellen" + "value" : "Superscript" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tilbakestill snarvegar og festeområde" + "value" : "Heva skrift" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przywróć domyślne skróty" + "value" : "Superscript" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar atalhos padrão" + "value" : "Superscript" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurar Atalhos Padrão" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Restabilește Scurtăturile Predefinite" + "value" : "Superescrito" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Восстановить горячие клавиши по умолчанию" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obnoviť predvolené skratky a zóny prichytenia" + "value" : "Суперсценарий" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Återställ genvägar" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Varsayılan kısayolları geri yükle" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Відновити типові комбінації клавіш" + "value" : "Upphöjd" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Khôi phục phím tắt mặc định" + "value" : "Chữ số trên" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "恢复默认快捷键和吸附区域" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "復原預設快速鍵" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "回復預設快捷鍵" - } - } - } - }, - "Update Available…" : { - "extractionState" : "manual", - "localizations" : { - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "업데이트 가능…" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cập nhật có sẵn…" + "value" : "上标" } } } }, - "uQy-DD-JDr.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Rectangle\"; ObjectID = \"uQy-DD-JDr\";", + "Ruw-6m-B2m.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Select All\"; ObjectID = \"Ruw-6m-B2m\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مستطيل" + "value" : "اختر الكل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Selecciona-ho tot" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Selecciona-ho tot" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Vybrat vše" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Alles auswählen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Rectangle" + "value" : "Select All" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Seleccionar todo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Seleccionar todo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Tout sélectionner" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Pilih Semua" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Seleziona tutto" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "すべて選択" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "모두 선택" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Pasirinkite viską" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Marker alt" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Selecteer alles" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Marker alt" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Wybierz wszystko" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Selecionar tudo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Selecionar Todos" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Selectează Tot" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Выберите всё" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Vybrať všetko" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Markera allt" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Select All" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Виділити все" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "Chọn tất cả" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "全选" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "全選" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "Rectangle" + "value" : "全選" } } } }, - "uRl-iY-unG.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Cut\"; ObjectID = \"uRl-iY-unG\";", + "S0p-oC-mLd.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Jump to Selection\"; ObjectID = \"S0p-oC-mLd\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يقطع" + "value" : "انتقل إلى التحديد" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Retalla" + "value" : "Salta a la selecció" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Retalla" + "value" : "Salta a la selecció" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Vyjmout" + "value" : "Zobrazit výběr" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ausschneiden" + "value" : "Zur Auswahl springen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Cut" + "value" : "Jump to Selection" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Cortar" + "value" : "Ir a la selección" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cortar" + "value" : "Ir a la selección" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Couper" + "value" : "Aller à la sélection" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Potong" + "value" : "Lompat ke Terpilih" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Taglia" + "value" : "Vai alla selezione" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "カット" + "value" : "選択部分へジャンプ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "오려두기" + "value" : "선택 부분으로 이동" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Iškirpti" + "value" : "Pereiti prie pasirinkto" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Klipp ut" + "value" : "Gå til markering" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Knippen" + "value" : "Ga naar selectie" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Klypp ut" + "value" : "Gå til markering" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wytnij" + "value" : "Przejdź do wyboru" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Recortar" + "value" : "Ir para a seleção" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Cortar" + "value" : "Ir para a seleção" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tăiere" + "value" : "Sari la Selecție" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Вырезать" + "value" : "Перейти к выбранному" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Vystrihnúť" + "value" : "Prejsť na výber" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Klipp ut" + "value" : "Hoppa till markerad" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Cut" + "value" : "Jump to Selection" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Вирізати" + "value" : "Перейти до вибору" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cắt" + "value" : "Nhảy đến lựa chọn" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "剪切" + "value" : "跳到所选内容" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "剪下" + "value" : "跳至所選範圍" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "剪下" + "value" : "跳去所選範圍" } } } }, - "Use as Todo Window" : { - "extractionState" : "stale", + "Sides" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser comme fenêtre Todo" + "value" : "Moitiés" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Meitats" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Meitats" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Poloviny" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Als To-do-Fenster verwenden" + "value" : "Hälften" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Usar como ventana 'Todo'" + "value" : "Mitades" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Usar como ventana 'Todo'" + "value" : "Mitades" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser comme fenêtre Todo" + "value" : "Moitiés" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Bagian" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Usa come finestra in evidenza" + "value" : "Metà" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Todoウインドウとして使用" + "value" : "半分" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Todo 윈도우로 사용" + "value" : "절반" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Naudoti kaip Todo langą" + "value" : "Pusės" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk som Gjøreliste-vindu" + "value" : "Halvdeler" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Sides" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk som Gjereliste-vindauge" + "value" : "Halvdelar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Połowy" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Metades" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Metades" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Половинки" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Použiť ako Todo okno" + "value" : "Polovice" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Hälfter" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "Yarımlar" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Використовувати як вікно Завдань" + "value" : "Половини" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sử dụng như cửa sổ Todo" + "value" : "Một nửa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "作为待办窗口" + "value" : "半屏" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "做為待辦視窗" + "value" : "一半螢幕" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "Use as Todo Window" + "value" : "一半螢幕" + } + } + } + }, + "Sixteenths" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/16" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ mười sáu" } } } }, - "Use frontmost.app as Todo App" : { - "extractionState" : "stale", + "Sixths" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser frontmost.app comme application Todo" + "value" : "Sixièmes" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Utilitza frontmost.app com a app Todo" + "value" : "Sisenes" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Utilitza frontmost.app com a app Todo" + "value" : "Sisenes" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Šestiny" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Verwende frontmost.app als To-do-Anwendung" + "value" : "Sechstel" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Use frontmost.app as Todo App" + "value" : "Sextos" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Use frontmost.app as Todo App" + "value" : "Sextos" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Utiliser frontmost.app comme application Todo" + "value" : "Sixièmes" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Gunakan frontmost.app sebagai Aplikasi Todo" + "value" : "Seperenam" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Usa frontmost.app come applicazione in evidenza" + "value" : "Terzi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "frontmost.appをToDoアプリとして使う" + "value" : "6分割" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "frontmost.app을 Todo 앱으로 사용" + "value" : "6등분" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Naudoti pirmame plane esantį langą kaip Todo programą" + "value" : "Šeštosios" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk frontmost.app som Gjøreliste-program" + "value" : "Sjettedeler" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Use frontmost.app as Todo App" + "value" : "Zesden" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk frontmost.app som Gjereliste-program" + "value" : "Sjettedelar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Use frontmost.app as Todo App" + "value" : "Jedne szóste" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Use frontmost.app as Todo App" + "value" : "Sextos" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Use frontmost.app as Todo App" + "value" : "Sextos" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Использовать окно на переднем плане в качестве Todo приложения" + "value" : "Шестые" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Použiť frontmost.app ako Todo aplikáciu" + "value" : "Šestiny" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Använd frontmost.app som Att göra-app" + "value" : "Sjättedelar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Altıda bir" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Використовувати frontmost.app як застосунок Завдань" + "value" : "Шості" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Dùng frontmost.app làm ứng dụng Todo" + "value" : "Phần sáu" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "使用 frontmost.app 作为待办应用" + "value" : "六等分" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "使用 frontmost.app 作為待辦應用程式" + "value" : "六等分" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "使用frontmost.app作為待辦應用" + "value" : "六等分" } } } }, - "uw2-9W-2jq.label" : { - "comment" : "Class = \"NSTabViewItem\"; label = \"Shortcuts\"; ObjectID = \"uw2-9W-2jq\";", - "extractionState" : "stale", + "Size" : { "localizations" : { "ar" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Raccourcis clavier" + "state" : "translated", + "value" : "Taille" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Dreceres de teclat" + "state" : "translated", + "value" : "Mida" } }, "ca-ES" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Dreceres de teclat" + "state" : "translated", + "value" : "Mida" } }, "cs" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Klávesové zkratky" + "state" : "translated", + "value" : "Velikost" } }, "de" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Tastaturkurzbefehle" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Shortcuts" + "state" : "translated", + "value" : "Größe" } }, "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Atajos de teclado" + "state" : "translated", + "value" : "Tamaño" } }, "es-419" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Atajos de teclado" + "state" : "translated", + "value" : "Tamaño" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Raccourcis clavier" + "state" : "translated", + "value" : "Taille" } }, "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Pintasan Papan Ketik" + "state" : "translated", + "value" : "Ukuran" } }, "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Abbreviazioni da tastiera" + "state" : "translated", + "value" : "Dimensione" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "キーボードショートカット" + "state" : "translated", + "value" : "サイズ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "단축키" + "value" : "크기" } }, "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Karštieji klavišai" + "state" : "translated", + "value" : "Dydis" } }, "nb" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Tastatursnarveger" + "state" : "translated", + "value" : "Størrelse" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Keyboard Shortcuts" + "state" : "translated", + "value" : "Size" } }, "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Tastatursnarvegar" + "state" : "translated", + "value" : "Storleik" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Skróty klawiaturowe" + "state" : "translated", + "value" : "Rozmiar" } }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Atalhos de teclado" + "state" : "translated", + "value" : "Tamanho" } }, "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Atalhos de Teclado" - } - }, - "ro" : { - "stringUnit" : { - "state" : "needs_review", - "value" : "Scurtături" + "state" : "translated", + "value" : "Tamanho" } }, "ru" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Горячие клавиши" + "state" : "translated", + "value" : "Размер" } }, "sk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Klávesové skratky" + "state" : "translated", + "value" : "Veľkosť" } }, "sv-SE" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Tangentbordsgenvägar" + "state" : "translated", + "value" : "Storlek" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Klavye Kısayolları" + "state" : "translated", + "value" : "Boyut" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Комбінації клавіш" + "state" : "translated", + "value" : "Розмір" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Phím tắt" + "value" : "Kích cỡ" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", - "value" : "键盘快捷键" + "state" : "translated", + "value" : "大小" } }, "zh-Hant" : { "stringUnit" : { - "state" : "needs_review", - "value" : "鍵盤快速鍵" + "state" : "translated", + "value" : "大小" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "needs_review", - "value" : "鍵盤快捷鍵" + "state" : "translated", + "value" : "大小" } } } }, - "UZP-5q-D5Y.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"Restore window size when unsnapped\"; ObjectID = \"UZP-5q-D5Y\";", - "extractionState" : "stale", + "Smaller Width" : { + "extractionState" : "manual", "localizations" : { - "ar" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Smaller Width" + } + }, + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "استعادة حجم النافذة عند الإغلاق" + "value" : "너비 작게" } }, - "ca" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Restaura la mida de la finestra quan no s'ajusti" + "value" : "Уменьшить ширину" } }, - "ca-ES" : { + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiều rộng nhỏ hơn" + } + } + } + }, + "snW-S8-Cw5.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show Toolbar\"; ObjectID = \"snW-S8-Cw5\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Restaura la mida de la finestra quan no s'ajusti" + "value" : "إظهار شريط الأدوات" } }, - "cs" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Obnovit velikost okna při uvolnění" + "value" : "Mostra la barra d'eines" } }, - "de" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Fenster beim Bewegen auf Originalgröße zurücksetzen" + "value" : "Mostra la barra d'eines" } }, - "en" : { + "de" : { "stringUnit" : { - "state" : "new", - "value" : "Restore window size when unsnapped" + "state" : "translated", + "value" : "Symbolleiste einblenden" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Resetear el tamaño de la ventana al despegarla" + "value" : "Mostrar barra de herramientas" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Resetear el tamaño de la ventana al despegarla" + "value" : "Mostrar barra de herramientas" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Restaurer la taille de fenêtre en annulant le glissement" + "value" : "Afficher la barre d'outils" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kembalikan ukuran jendela saat tidak dijepret" + "value" : "Tampilkan Bilah Alat" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ripristina le dimensioni della finestra se spostata" + "value" : "Mostra la barra strumenti" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スナップが解除されたらウインドウサイズを元に戻す" + "value" : "ツールバーを表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "스냅 해제 시 창 크기 복원" + "value" : "도구 막대 보기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Atkurti lango dydį po to, kai pašalinamas pririšimas" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjenskap størrelsen på vinduet når det blir revet løs" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Restore window size when unsnapped" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gjenskap storleiken på vindauget når det blir rive laus" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Przywróć rozmiar okna po odczepieniu" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Restaurar tamanho da janela quando desencaixado" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Restaurar tamanho de janela quando desencaixada" + "value" : "Rodyti įrankių juostą" } }, - "ro" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Restabilește dimensiunea ferestrei când este închisă" + "value" : "Vis verktøyrada" } }, - "ru" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Восстановить размер окна после снятия привязки" + "value" : "Werkbalk weergeven" } }, - "sk" : { + "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Obnoviť veľkosť okna po uvoľnení" + "value" : "Vis verktøyrada" } }, - "sv-SE" : { + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Återställ fönsterstorleken när den lossas" + "value" : "Pokaż pasek narzędzi" } }, - "tr" : { + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Tutturulduğu yerden ayrılan pencereleri eski boyutuna çevir" + "value" : "Mostrar barra de ferramentas" } }, - "uk" : { + "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Відновлювати розмір вікна при відміні зміни розміру" + "value" : "Mostrar barra de ferramentas" } }, - "vi" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Khôi phục cửa sổ khi không bố trí" + "value" : "Показать панель инструментов" } }, - "zh-Hans" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "结束吸附时恢复窗口大小" + "value" : "Visa verktygsfältet" } }, - "zh-Hant" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "結束貼齊時復原視窗大小" + "value" : "Hiển thị thanh công cụ" } }, - "zh-Hant-HK" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "結束貼齊時回復視窗大小" + "value" : "显示工具栏" } } } }, - "v2f-bX-xiM.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Move Left\"; ObjectID = \"v2f-bX-xiM\";", - "extractionState" : "stale", + "SXx-HZ-GkB.title" : { + "comment" : "Class = \"NSButtonCell\"; title = \"Cycle across displays on repeated left or right commands\"; ObjectID = \"SXx-HZ-GkB\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تحرك يسارا" + "value" : "التنقل عبر شاشات العرض بأوامر متكررة يسارًا أو يمينًا" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Moure a l'esquerra" + "value" : "Passeu per les pantalles amb ordres repetides a l'esquerra o a la dreta" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Moure a l'esquerra" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Přesunout vlevo" + "value" : "Passeu per les pantalles amb ordres repetides a l'esquerra o a la dreta" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nach links bewegen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Move Left" + "value" : "Monitorwechsel bei wiederholten Links/Rechts-Befehlen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mover a la izquierda" + "value" : "Bucle a través de pantallas en ejecuciones repetidas de comandos de movimiento a la izquierda o a la derecha" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mover a la izquierda" + "value" : "Bucle a través de pantallas en ejecuciones repetidas de comandos de movimiento a la izquierda o a la derecha" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacer à gauche" + "value" : "Déplacer sur les moniteurs lors de commandes gauche ou droite répétées" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Geser ke Kiri" + "value" : "Berputar melintasi tampilan pada perintah kiri atau kanan yang berulang" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sposta a sinistra" + "value" : "Spostati tra gli schermi con comandi ripetuti a sinistra o destra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "左に移動" + "value" : "左半分/左半分にサイズ変更するコマンドを繰り返したら、ウインドウを表示するディスプレイを変更" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "왼쪽으로 이동" + "value" : "왼쪽 및 오른쪽 명령을 반복하여 디스플레이 순환" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Į kairę" + "value" : "Perkelti langus tarp ekranų, kai lygiuojama iš eilės į kairę arba į dešinę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Flytt til venstre" + "value" : "Gå gjennom skjermene ved å gjenta venstre- eller høgrekommandoer" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Naar links" + "value" : "Ga schermen langs bij opeenvolgende uitvoeringen van links of rechts" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Flytt til venstre" + "value" : "Gå gjennom skjermane ved å gjenta venstre- eller høgrekommandoar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przesuń w lewo" + "value" : "Przechodź między ekranami przy powtarzających się komendach lewo/prawo" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mover para a esquerda" + "value" : "Navegue entre telas repetindo os comandos para a direita ou esquerda" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Mover para a esquerda" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mută în Stânga" + "value" : "Alternar entre ecrãs ao repetir comandos para a esquerda ou para a direita" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Налево" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Presunúť vľavo" + "value" : "Перемещать окна между экранами при последовательном выравнивании влево или вправо" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Flytta vänster" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sol Kenar" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Перемістити ліворуч" + "value" : "Bläddra mellan skärmarna med upprepade vänster- eller högerkommandon" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Qua trái" + "value" : "Chuyển đổi qua lại giữa các màn hình hiển thị theo lệnh lặp lại bên trái hoặc bên phải" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "向左移动" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "左移" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "左移" + "value" : "通过重复向左或向右命令在显示器循环显示" } } } }, - "Vdr-fp-XzO.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Hide Others\"; ObjectID = \"Vdr-fp-XzO\";", + "Td7-aD-5lo.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Window\"; ObjectID = \"Td7-aD-5lo\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إخفاء الآخرين" + "value" : "نافذة او شباك" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Amaga els altres" + "value" : "Finestra" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Amaga els altres" + "value" : "Finestra" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Skrýt ostatní" + "value" : "Okno" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Andere ausblenden" + "value" : "Fenster" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Hide Others" + "value" : "Window" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ocultar otros" + "value" : "Ventana" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ocultar otros" + "value" : "Ventana" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Masquer les autres" + "value" : "Fenêtre" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sembunyikan Lainnya" + "value" : "Jendela" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nascondi altre" + "value" : "Finestra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ほかを隠す" + "value" : "ウインドウ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "나머지 가리기" + "value" : "창" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Slėpti kitą" + "value" : "Langas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Skjul andre" + "value" : "Vindu" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Verberg andere" + "value" : "Venster" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Gøym andre" + "value" : "Vindauge" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ukryj Inne" + "value" : "Okno" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Esconder Outros" + "value" : "Janela" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Esconder Outros" + "value" : "Janela" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ascunde restul" + "value" : "Fereastră" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Скрыть другое" + "value" : "Окно" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Skryť ostatné" + "value" : "Okno" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Dölj andra" + "value" : "Fönster" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Hide Others" + "value" : "Pencere" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Сховати інші" + "value" : "Вікно" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Ẩn những thứ khác" + "value" : "Cửa sổ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "隐藏其他" + "value" : "窗口" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "隱藏其他" + "value" : "視窗" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "隱藏其他" + "value" : "視窗" } } } }, - "Vertical (T/B, %)" : { - "extractionState" : "stale", + "Thirds" : { "localizations" : { - "ko" : { + "ar" : { "stringUnit" : { "state" : "translated", - "value" : "수직 (상/하, %)" + "value" : "Tiers" } }, - "vi" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Dọc (T/B, %)" + "value" : "Terços" } - } - } - }, - "Vfd-fe-hCe.title" : { - "comment" : "Class = \"NSButtonCell\"; title = \"ⓘ\"; ObjectID = \"Vfd-fe-hCe\";", - "extractionState" : "stale", - "localizations" : { - "cs" : { + }, + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Terços" } }, - "de" : { + "cs" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Třetiny" } }, - "en" : { + "de" : { "stringUnit" : { - "state" : "new", - "value" : "ⓘ" + "state" : "translated", + "value" : "Drittel" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tercios" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tercios" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tiers" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Sepertiga" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Terzi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "3分割" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "3등분" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Trečdaliai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tredjedeler" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Thirds" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tredjedelar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Jedne trzecie" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Terços" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "ⓘ" + "value" : "Terços" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Трети" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tretiny" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Tredjedelar" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Üçte bir" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "Третини" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" + "value" : "1/3" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "ⓘ" - } - } - } - }, - "VIf-4h-MJW.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Authorize…\"; ObjectID = \"VIf-4h-MJW\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تفويض ..." - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autoritza…" + "value" : "三等分" } }, - "ca-ES" : { + "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Autoritza…" + "value" : "三等分" } }, - "cs" : { + "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "Autorizovat…" + "value" : "三等分" } - }, + } + } + }, + "tileColumns.title" : { + "extractionState" : "manual", + "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorisieren…" + "state" : "needs_review", + "value" : "Fenster in Spalten" } }, "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Authorize…" - } - }, - "en-GB" : { "stringUnit" : { "state" : "translated", - "value" : "Authorise..." + "value" : "Tile in Columns" } }, "es" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorizar…" + "state" : "needs_review", + "value" : "Ventanas en columnas" } }, "es-419" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorizar…" + "state" : "needs_review", + "value" : "Ventanas en columnas" } }, "fr" : { "stringUnit" : { - "state" : "translated", - "value" : "Autoriser…" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Otorisasi…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Autorizza…" + "state" : "needs_review", + "value" : "Fenêtres en colonnes" } }, "ja" : { "stringUnit" : { - "state" : "translated", - "value" : "許可…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "승인…" + "state" : "needs_review", + "value" : "ウインドウを列に並べる" } }, - "lt" : { + "zh-Hans" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorizuoti…" + "state" : "needs_review", + "value" : "按列平铺窗口" } - }, - "nb" : { + } + } + }, + "tileRows.title" : { + "extractionState" : "manual", + "localizations" : { + "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Autoriser…" + "state" : "needs_review", + "value" : "Fenster in Zeilen" } }, - "nl" : { + "en" : { "stringUnit" : { "state" : "translated", - "value" : "Toestemming geven…" + "value" : "Tile in Rows" } }, - "nn" : { + "es" : { "stringUnit" : { - "state" : "translated", - "value" : "Autoriser…" + "state" : "needs_review", + "value" : "Ventanas en filas" } }, - "pl" : { + "es-419" : { "stringUnit" : { - "state" : "translated", - "value" : "Autoryzuj…" + "state" : "needs_review", + "value" : "Ventanas en filas" } }, - "pt-BR" : { + "fr" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorizar…" + "state" : "needs_review", + "value" : "Fenêtres en lignes" } }, - "pt-PT" : { + "ja" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorizar…" + "state" : "needs_review", + "value" : "ウインドウを行に並べる" } }, - "ro" : { + "zh-Hans" : { "stringUnit" : { - "state" : "translated", - "value" : "Autorizare…" + "state" : "needs_review", + "value" : "按行平铺窗口" } - }, - "ru" : { + } + } + }, + "Tiling" : { + "extractionState" : "manual", + "localizations" : { + "en" : { "stringUnit" : { "state" : "translated", - "value" : "Авторизовать…" + "value" : "Tiling" } - }, - "sk" : { + } + } + }, + "Tiling in macOS has been disabled" : { + "extractionState" : "manual", + "localizations" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Povoliť…" + "value" : "Das Ziehen von Fenstern an den Bildschirmrand zum Anordnen wurde in den macOS Systemeinstellungen deaktiviert" } }, - "sv-SE" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Auktorisera…" + "value" : "macOS のタイル表示機能が無効になりました" } }, - "tr" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Yetkilendir..." + "value" : "macOS의 타일 정리 기능이 비활성화됨" } }, - "uk" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Авторизувати…" + "value" : "Umiestnenie dlaždíc v macOS bolo vypnuté" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Cấp phép…" + "value" : "Tính năng xếp gạch trong macOS đã bị vô hiệu hóa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "授权…" + "value" : "macOS 中的窗口平铺功能已被禁用" } - }, - "zh-Hant" : { + } + } + }, + "Tiling in Rectangle has been disabled" : { + "extractionState" : "manual", + "localizations" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "授權⋯" + "value" : "Rectangle의 타일 정리 기능이 비활성화됨" } }, - "zh-Hant-HK" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "授權⋯" + "value" : "Việc xếp gạch trong hình chữ nhật đã bị vô hiệu hóa" } } } }, - "VIY-Ag-zcb.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Center\"; ObjectID = \"VIY-Ag-zcb\";", + "tlD-Oa-oAM.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Kern\"; ObjectID = \"tlD-Oa-oAM\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مركز" + "value" : "كيرن" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Centre" + "value" : "Kern" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Centre" + "value" : "Kern" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Zentrieren" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Centre" + "value" : "Zeichenabstand" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Centrar" + "value" : "Kern" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Centrar" + "value" : "Kern" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Centrer" + "value" : "Kern" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tengah" + "value" : "Kern" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Centro" + "value" : "Kern" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "中央に表示" + "value" : "カーニング" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "중앙" + "value" : "자간" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Centras" + "value" : "Kernas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Midten" + "value" : "Knip" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Centreer" + "value" : "Kern" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Midten" + "value" : "Knip" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Centrum" + "value" : "Kern" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Centralizar" + "value" : "Kern" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Centro" + "value" : "Kern" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Центр" + "value" : "Керн" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Mitten" + "value" : "Kerning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Căn giữa" + "value" : "Điều chỉnh khoảng cách giữa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "居中" + "value" : "字句调整" } } } }, - "Vjx-xi-njq.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Italic\"; ObjectID = \"Vjx-xi-njq\";", + "To adjust macOS tiling, go to System Settings → Desktop & Dock → Windows" : { "extractionState" : "manual", "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مائل" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursiva" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursiva" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kursiv" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursiva" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cursiva" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Italique" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cetak Miring" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Corsivo" - } - }, - "ja" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "イタリック" + "value" : "macOS 타일 정리 기능을 조정하려면, 시스템 설정 → 데스크탑 및 Dock → 윈도우로 이동하세요" } }, - "ko" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "이탤릭체" + "value" : "Để điều chỉnh ô xếp macOS, hãy vào Cài đặt hệ thống → Màn hình nền & Dock → Windows" } - }, - "lt" : { + } + } + }, + "To re-enable it, go to System Settings → Desktop & Dock → Windows" : { + "extractionState" : "manual", + "localizations" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Kursyvas" + "value" : "Um dies wieder zu aktivieren, gehe zu Systemeinstellungen → Schreibtisch & Dock → Fenster" } }, - "nb" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Kursiv" + "value" : "再度有効化するには、システム設定 → デスクトップと Dock → ウインドウに移動します" } }, - "nl" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Cursief" + "value" : "다시 켜려면, 시스템 설정 → 데스크탑 및 Dock → 윈도우로 이동합니다" } }, - "nn" : { + "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Kursiv" + "value" : "Pre opätovné povolenie, prejdi do Systémové nastavenia → Plocha a Dock → Okná" } }, - "pl" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Kursywa" + "value" : "Để bật lại, hãy vào Cài đặt hệ thống → Màn hình nền & Dock → Windows" } }, - "pt-BR" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Itálico" + "value" : "要重新启用它,请转到系统设置→ 桌面与程序坞 → 窗口" } - }, - "pt-PT" : { + } + } + }, + "Top screen edge tiling in macOS is now disabled" : { + "extractionState" : "manual", + "localizations" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Itálico" + "value" : "macOS의 화면 상단 가장자리 타일 정렬이 꺼졌습니다" } }, - "ru" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Курсив" + "value" : "Tính năng ghép cạnh màn hình trên cùng trong macOS hiện đã bị vô hiệu hóa" } - }, - "sv-SE" : { + } + } + }, + "Top/bottom sides" : { + "extractionState" : "manual", + "localizations" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Kursiv" + "value" : "위/아래 반" } }, - "vi" : { + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "In nghiên" + "value" : "Górna/Dolna połowa" } }, - "zh-Hans" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "斜体" + "value" : "Nửa trên/dưới" } } } }, - "vKC-jM-MkH.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Paste Style\"; ObjectID = \"vKC-jM-MkH\";", + "tRr-pd-1PS.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Data Detectors\"; ObjectID = \"tRr-pd-1PS\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نمط اللصق" + "value" : "كاشفات البيانات" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Enganxa estil" + "value" : "Detectors de dades" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Enganxa estil" + "value" : "Detectors de dades" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Stil einfügen" + "value" : "Datenerkennung" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Pegar estilo" + "value" : "Detectores de datos" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Pegar estilo" + "value" : "Detectores de datos" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Style de collage" + "value" : "Détecteurs de données" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tempel Gaya" + "value" : "Pendeteksi Data" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Incolla lo stile" + "value" : "Rilevatori di dati" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "スタイルをペースト" + "value" : "データ検出" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "스타일 붙여넣기" + "value" : "데이터 탐지기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Įterpimo stilius" + "value" : "Duomenų detektoriai" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lim inn stil" + "value" : "Datadetektorer" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Stijl plakken" + "value" : "Gegevensdetectoren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Lim inn stil" + "value" : "Datadetektorar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wklej Styl" + "value" : "Detektory danych" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Colar Estilo" + "value" : "Detectores de dados" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Colar Estilo" + "value" : "Detectores de dados" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Стиль вставки" + "value" : "Детекторы данных" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Klistra in stil" + "value" : "Datadetektorer" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Dán kiểu chữ" + "value" : "Nhận diện dữ liệu" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "粘贴样式" + "value" : "数据检测器" } } } }, - "vLm-3I-IUL.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Show Ruler\"; ObjectID = \"vLm-3I-IUL\";", + "Twelfths" : { + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "1/12" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thứ mười hai" + } + } + } + }, + "tXI-mr-wws.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Open Recent\"; ObjectID = \"tXI-mr-wws\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "عرض المسطرة" + "value" : "فتح الأحدث" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra regle" + "value" : "Obrir recent" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra regle" + "value" : "Obrir recent" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Lineale einblenden" + "value" : "Benutzte Dokumente" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar regla" + "value" : "Abrir reciente" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar regla" + "value" : "Abrir reciente" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Afficher la règle" + "value" : "Ouvrir l'élément récent" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tampilkan Penggaris" + "value" : "Buka Baru-baru Ini" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Mostra righello" + "value" : "Apri recente" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ルーラーを表示" + "value" : "最近使った項目を開く" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "눈금자 보기" + "value" : "최근 사용 열기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Rodyti liniuotę" + "value" : "Atidaryti paskutinius" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vis linjal" + "value" : "Åpne sist brukte" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Toon lineaal" + "value" : "Open recent" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Vis linjal" + "value" : "Opne sist brukte" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pokaż Linijkę" + "value" : "Niedawno otwarte" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar Régua" + "value" : "Abrir recente" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Mostrar Régua" + "value" : "Abrir Recente" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Показать линейку" + "value" : "Открыть недавнее" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Visa linjal" + "value" : "Öppna senaste" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Hiện thước" + "value" : "Mở gần nhất" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "显示标尺" + "value" : "打开最近使用" } } } }, - "vmV-6d-7jI.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Make Upper Case\"; ObjectID = \"vmV-6d-7jI\";", + "UEZ-Bs-lqG.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Capitalize\"; ObjectID = \"UEZ-Bs-lqG\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "جعل الأحرف الكبيرة" + "value" : "تكبير" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Converteix a majúscules" + "value" : "Primera lletra en majúscula" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Converteix a majúscules" + "value" : "Primera lletra en majúscula" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Großbuchstaben" + "value" : "Großschreiben" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Convertir a mayúsculas" + "value" : "Capitalizar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Convertir a mayúsculas" + "value" : "Capitalizar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Passer en majuscules" + "value" : "Capitaliser" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Buat Huruf Besar" + "value" : "Gunakan Huruf Besar" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Rendi maiuscolo" + "value" : "Maiuscolo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "大文字にする" + "value" : "語頭を大文字にする" } }, "ko" : { @@ -45697,37 +20218,37 @@ "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Viską padaryti didžiosiomis raidėmis" + "value" : "Didžiosiomis raidėmis" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk store bokstaver" + "value" : "Stor førstebokstav" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Maak hoofdletters" + "value" : "Hoofdletters" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk store bokstavar" + "value" : "Stor fyrstebokstav" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zmień na duże litery" + "value" : "Kapitalizuj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Converter em Maiúsculas" + "value" : "Capitalizar" } }, "pt-PT" : { @@ -45739,3054 +20260,3023 @@ "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Сделать всё в верхнем регистре" + "value" : "В верхнем регистре" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ändra till versaler" + "value" : "Kapitalisera" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Viết hoa" + "value" : "In hoa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "变为大写" + "value" : "首字母大写" } } } }, - "vNY-rz-j42.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Clear Menu\"; ObjectID = \"vNY-rz-j42\";", + "Update Available…" : { "extractionState" : "manual", + "localizations" : { + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "업데이트 가능…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cập nhật có sẵn…" + } + } + } + }, + "uQy-DD-JDr.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Rectangle\"; ObjectID = \"uQy-DD-JDr\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مسح القائمة" + "value" : "مستطيل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Neteja menú" + "value" : "Rectangle" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Neteja menú" + "value" : "Rectangle" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Einträge löschen" + "value" : "Rectangle" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Rectangle" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Borrar menú" + "value" : "Rectangle" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Borrar menú" + "value" : "Rectangle" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Effacer le menu" + "value" : "Rectangle" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bersihkan Menu" + "value" : "Rectangle" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Pulisci menu" + "value" : "Rectangle" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "メニューを消去" + "value" : "Rectangle" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "메뉴 지우기" + "value" : "Rectangle" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Išvalyti meniu" + "value" : "Rectangle" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tøm menyen" + "value" : "Rectangle" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Menu leegmaken" + "value" : "Rectangle" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Tøm menyen" + "value" : "Rectangle" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wyczyść menu" + "value" : "Rectangle" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Limpar Menu" + "value" : "Rectangle" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Limpar Menu" + "value" : "Rectangle" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Очистить меню" + "value" : "Rectangle" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Rensa menyn" + "value" : "Rectangle" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Làm sạch menu" + "value" : "Rectangle" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "清除菜单" + "value" : "Rectangle" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rectangle" } } } }, - "Vph-Z0-euH.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Center Three Fourths\"; ObjectID = \"Vph-Z0-euH\";", - "extractionState" : "stale", + "uRl-iY-unG.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Cut\"; ObjectID = \"uRl-iY-unG\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "وسط ثلاثة أرباع" + "value" : "يقطع" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Tres quarts centrals" + "value" : "Retalla" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Tres quarts centrals" + "value" : "Retalla" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Střední tři čtvrtiny" + "value" : "Vyjmout" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Mittlere drei Viertel" + "value" : "Ausschneiden" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Center Three Fourths" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Centre Three Quarters" + "value" : "Cut" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Tres cuartos centrales" + "value" : "Cortar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tres cuartos centrales" + "value" : "Cortar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Trois quarts centraux" + "value" : "Couper" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tiga Perempat Tengah" + "value" : "Potong" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Tre quarti centrali" + "value" : "Taglia" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "3/4にして中央揃え" + "value" : "カット" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "중앙 3/4" + "value" : "오려두기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Vidurinės trys ketvirtys" + "value" : "Iškirpti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Midterste tre fjerdedeler" + "value" : "Klipp ut" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Middelste drie kwart" + "value" : "Knippen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Midtre tre fjerdedelar" + "value" : "Klypp ut" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Środkowe trzy czwarte" + "value" : "Wytnij" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Três quartos centrais" + "value" : "Recortar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Três Quartos Centrais" + "value" : "Cortar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Trei Sferturi Centrale" + "value" : "Tăiere" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Центральные три четверти" + "value" : "Вырезать" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Stredné tri štvrtiny" + "value" : "Vystrihnúť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Mittersta tre fjärdedelar" + "value" : "Klipp ut" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Orta Üç Çeyrek" + "value" : "Cut" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Центральні три чверті" + "value" : "Вирізати" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "3/4 ở giữa" + "value" : "Cắt" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "中间3/4" + "value" : "剪切" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "中間3/4" + "value" : "剪下" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "中間3/4" + "value" : "剪下" } } } }, - "w0m-vy-SC9.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Ligatures\"; ObjectID = \"w0m-vy-SC9\";", - "extractionState" : "manual", + "Vdr-fp-XzO.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Hide Others\"; ObjectID = \"Vdr-fp-XzO\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "الأربطة" + "value" : "إخفاء الآخرين" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Lligadures" + "value" : "Amaga els altres" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Lligadures" + "value" : "Amaga els altres" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skrýt ostatní" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaturen" + "value" : "Andere ausblenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Hide Others" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaduras" + "value" : "Ocultar otros" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaduras" + "value" : "Ocultar otros" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ligatures" + "value" : "Masquer les autres" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ligatur" + "value" : "Sembunyikan Lainnya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Legature" + "value" : "Nascondi altre" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "合字" + "value" : "ほかを隠す" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "합자" + "value" : "나머지 가리기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ligatūros" + "value" : "Slėpti kitą" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaturer" + "value" : "Skjul andre" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaturen" + "value" : "Verberg andere" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaturar" + "value" : "Gøym andre" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ligatury" + "value" : "Ukryj Inne" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaduras" + "value" : "Esconder Outros" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaduras" + "value" : "Esconder Outros" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ascunde restul" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Лигатуры" + "value" : "Скрыть другое" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skryť ostatné" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ligaturer" + "value" : "Dölj andra" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hide Others" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сховати інші" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chữ ghép" + "value" : "Ẩn những thứ khác" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "连字" + "value" : "隐藏其他" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏其他" + } + }, + "zh-Hant-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "隱藏其他" } } } }, - "W48-6f-4Dl.title" : { - "comment" : "Class = \"NSMenu\"; title = \"Edit\"; ObjectID = \"W48-6f-4Dl\";", + "VIf-4h-MJW.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Authorize…\"; ObjectID = \"VIf-4h-MJW\";", "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يحرر" + "value" : "تفويض ..." } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Edita" + "value" : "Autoritza…" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Edita" + "value" : "Autoritza…" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Upravit" + "value" : "Autorizovat…" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Bearbeiten" + "value" : "Autorisieren…" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Edit" + "value" : "Authorize…" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authorise..." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Autorizar…" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Autorizar…" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Modifier" + "value" : "Autoriser…" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sunting" + "value" : "Otorisasi…" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Modifica" + "value" : "Autorizza…" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "編集" + "value" : "許可…" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "편집" + "value" : "승인…" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Redaguoti" + "value" : "Autorizuoti…" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Autoriser…" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bewerken" + "value" : "Toestemming geven…" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Autoriser…" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Edycja" + "value" : "Autoryzuj…" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Autorizar…" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Editar" + "value" : "Autorizar…" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Editare" + "value" : "Autorizare…" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Редактировать" + "value" : "Авторизовать…" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Upraviť" + "value" : "Povoliť…" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Redigera" + "value" : "Auktorisera…" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Edit" + "value" : "Yetkilendir..." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Редагувати" + "value" : "Авторизувати…" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chỉnh sửa" + "value" : "Cấp phép…" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "编辑" + "value" : "授权…" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "編輯" + "value" : "授權⋯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "編輯" + "value" : "授權⋯" } } } }, - "Was-JA-tGl.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"New\"; ObjectID = \"Was-JA-tGl\";", - "extractionState" : "extracted_with_value", + "VIY-Ag-zcb.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Center\"; ObjectID = \"VIY-Ag-zcb\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "جديد" + "value" : "مركز" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Nou" + "value" : "Centre" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Nou" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nový" + "value" : "Centre" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Neu" + "value" : "Zentrieren" } }, - "en" : { + "en-GB" : { "stringUnit" : { - "state" : "new", - "value" : "New" + "state" : "translated", + "value" : "Centre" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Nuevo" + "value" : "Centrar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Nuevo" + "value" : "Centrar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Nouveau" + "value" : "Centrer" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Baru" + "value" : "Tengah" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nuovo" + "value" : "Centro" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "新規作成" + "value" : "中央に表示" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "신규" + "value" : "중앙" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Sukurti" + "value" : "Centras" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nytt" + "value" : "Midten" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nieuw" + "value" : "Centreer" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Nytt" + "value" : "Midten" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nowy" + "value" : "Centrum" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Novo" + "value" : "Centralizar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Novo" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nou" + "value" : "Centro" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Создать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nový" + "value" : "Центр" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ny" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "New" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Новий" + "value" : "Mitten" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Mới" + "value" : "Căn giữa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "新建" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "新增" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "新增" + "value" : "居中" } } } }, - "wb2-vD-lq4.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Align Right\"; ObjectID = \"wb2-vD-lq4\";", + "Vjx-xi-njq.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Italic\"; ObjectID = \"Vjx-xi-njq\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "محاذاة اليمين" + "value" : "مائل" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Alinea a la dreta" + "value" : "Cursiva" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Alinea a la dreta" + "value" : "Cursiva" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Rechtsbündig" + "value" : "Kursiv" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Alinear a la derecha" + "value" : "Cursiva" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Alinear a la derecha" + "value" : "Cursiva" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Aligner à droite" + "value" : "Italique" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Rata Kanan" + "value" : "Cetak Miring" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Allinea a destra" + "value" : "Corsivo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "右揃え" + "value" : "イタリック" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "오른쪽 정렬" + "value" : "이탤릭체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Lygiavimas į dešinę" + "value" : "Kursyvas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Høgrejustert" + "value" : "Kursiv" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rechts uitlijnen" + "value" : "Cursief" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Høgrejustert" + "value" : "Kursiv" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wyrównaj w prawo" + "value" : "Kursywa" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Alinhar à Direita" + "value" : "Itálico" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Alinhar à Direita" + "value" : "Itálico" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Выравнивание вправо" + "value" : "Курсив" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Anpassa höger" + "value" : "Kursiv" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Căn phải" + "value" : "In nghiên" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "右对齐" + "value" : "斜体" } } } }, - "WeT-3V-zwk.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Paste and Match Style\"; ObjectID = \"WeT-3V-zwk\";", - "extractionState" : "extracted_with_value", + "vKC-jM-MkH.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Paste Style\"; ObjectID = \"vKC-jM-MkH\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "لصق ومطابقة النمط" + "value" : "نمط اللصق" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Enganxa i coincideix amb l'estil" + "value" : "Enganxa estil" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Enganxa i coincideix amb l'estil" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vložit a sladit styl" + "value" : "Enganxa estil" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Einfügen und Stil anpassen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Paste and Match Style" + "value" : "Stil einfügen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Pegar y emparejar estilo" + "value" : "Pegar estilo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Pegar y emparejar estilo" + "value" : "Pegar estilo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Coller et adapter le style" + "value" : "Style de collage" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tempel dan Cocokkan Gaya" + "value" : "Tempel Gaya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Incolla e mantieni stile" + "value" : "Incolla lo stile" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ペーストしてスタイルを合わせる" + "value" : "スタイルをペースト" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "붙여넣고 스타일 일치시킴" + "value" : "스타일 붙여넣기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Įterpti ir suderinti stilius" + "value" : "Įterpimo stilius" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lim inn og tilpass stil" + "value" : "Lim inn stil" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Plak en neem stijl over" + "value" : "Stijl plakken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Lim inn og tilpass stil" + "value" : "Lim inn stil" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wklej i dopasuj styl" + "value" : "Wklej Styl" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Colar e manter estilo" + "value" : "Colar Estilo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Colar e Combinar Estilo" + "value" : "Colar Estilo" } }, - "ro" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Lipește și Aplică Stilizarea" + "value" : "Стиль вставки" } }, - "ru" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Вставить и соотнести стили" + "value" : "Klistra in stil" } }, - "sk" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Vložiť a prispôsobiť štýl" + "value" : "Dán kiểu chữ" } }, - "sv-SE" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Klistra in och matcha stil" + "value" : "粘贴样式" + } + } + } + }, + "vLm-3I-IUL.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Show Ruler\"; ObjectID = \"vLm-3I-IUL\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عرض المسطرة" } }, - "tr" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Paste and Match Style" + "value" : "Mostra regle" } }, - "uk" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Вставити зі збереженням стилю" + "value" : "Mostra regle" } }, - "vi" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dán và khớp kiểu" + "value" : "Lineale einblenden" } }, - "zh-Hans" : { + "es" : { "stringUnit" : { "state" : "translated", - "value" : "粘贴并匹配样式" + "value" : "Mostrar regla" } }, - "zh-Hant" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "貼上並符合樣式" + "value" : "Mostrar regla" } }, - "zh-Hant-HK" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "貼上並符合樣式" + "value" : "Afficher la règle" } - } - } - }, - "Width Step (px)" : { - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "id" : { "stringUnit" : { - "state" : "new", - "value" : "Width Step (px)" + "state" : "translated", + "value" : "Tampilkan Penggaris" } }, - "ko" : { + "it" : { "stringUnit" : { "state" : "translated", - "value" : "너비 단위 (px)" + "value" : "Mostra righello" } }, - "ru" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Шаг ширины (px)" + "value" : "ルーラーを表示" } }, - "vi" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Bước chiều rộng (px)" + "value" : "눈금자 보기" } - } - } - }, - "windowSizeWarningMessage" : { - "comment" : "Explains that an app can prevent a window from shrinking to the requested layout", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Unable to resize window smaller.\nWindows may overlap." + "value" : "Rodyti liniuotę" } - } - } - }, - "windowSizeWarningTitle" : { - "comment" : "Title of the on-screen message when a window cannot fit its requested size", - "extractionState" : "manual", - "localizations" : { - "en" : { + }, + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Minimum window size reached" + "value" : "Vis linjal" } - } - } - }, - "wpr-3q-Mcd.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Help\"; ObjectID = \"wpr-3q-Mcd\";", - "extractionState" : "extracted_with_value", - "localizations" : { - "ar" : { + }, + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "يساعد" + "value" : "Toon lineaal" } }, - "ca" : { + "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Ajuda" + "value" : "Vis linjal" } }, - "ca-ES" : { + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ajuda" + "value" : "Pokaż Linijkę" } }, - "cs" : { + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Nápověda" + "value" : "Mostrar Régua" } }, - "de" : { + "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Hilfe" + "value" : "Mostrar Régua" } }, - "en" : { + "ru" : { "stringUnit" : { - "state" : "new", - "value" : "Help" + "state" : "translated", + "value" : "Показать линейку" } }, - "es" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Ayuda" + "value" : "Visa linjal" } }, - "es-419" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Ayuda" + "value" : "Hiện thước" } }, - "fr" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Aide" + "value" : "显示标尺" + } + } + } + }, + "vmV-6d-7jI.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Make Upper Case\"; ObjectID = \"vmV-6d-7jI\";", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جعل الأحرف الكبيرة" } }, - "id" : { + "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Bantuan" + "value" : "Converteix a majúscules" } }, - "it" : { + "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Aiuto" + "value" : "Converteix a majúscules" } }, - "ja" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "ヘルプ" + "value" : "Großbuchstaben" } }, - "ko" : { + "es" : { "stringUnit" : { "state" : "translated", - "value" : "도움말" + "value" : "Convertir a mayúsculas" } }, - "lt" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Pagalba" + "value" : "Convertir a mayúsculas" } }, - "nb" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Hjelp" + "value" : "Passer en majuscules" } }, - "nl" : { + "id" : { "stringUnit" : { "state" : "translated", - "value" : "Hulp" + "value" : "Buat Huruf Besar" } }, - "nn" : { + "it" : { "stringUnit" : { "state" : "translated", - "value" : "Hjelp" + "value" : "Rendi maiuscolo" } }, - "pl" : { + "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Pomoc" + "value" : "大文字にする" } }, - "pt-BR" : { + "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Ajuda" + "value" : "대문자로 만들기" } }, - "pt-PT" : { + "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Ajuda" + "value" : "Viską padaryti didžiosiomis raidėmis" } }, - "ro" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ajutor" + "value" : "Bruk store bokstaver" } }, - "ru" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Помощь" + "value" : "Maak hoofdletters" } }, - "sk" : { + "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Pomocník" + "value" : "Bruk store bokstavar" } }, - "sv-SE" : { + "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Hjälp" + "value" : "Zmień na duże litery" } }, - "tr" : { + "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Yardım" + "value" : "Converter em Maiúsculas" } }, - "uk" : { + "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Довідка" + "value" : "Maiúsculas" } }, - "vi" : { + "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Trợ giúp" + "value" : "Сделать всё в верхнем регистре" } }, - "zh-Hans" : { + "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "帮助" + "value" : "Ändra till versaler" } }, - "zh-Hant" : { + "vi" : { "stringUnit" : { "state" : "translated", - "value" : "輔助說明" + "value" : "Viết hoa" } }, - "zh-Hant-HK" : { + "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "輔助說明" + "value" : "变为大写" } } } }, - "WRG-CD-K1S.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Underline\"; ObjectID = \"WRG-CD-K1S\";", + "vNY-rz-j42.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Clear Menu\"; ObjectID = \"vNY-rz-j42\";", "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تسطير" + "value" : "مسح القائمة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Subratllat" + "value" : "Neteja menú" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Subratllat" + "value" : "Neteja menú" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Unterstrichen" + "value" : "Einträge löschen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Subrayar" + "value" : "Borrar menú" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Subrayar" + "value" : "Borrar menú" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Souligner" + "value" : "Effacer le menu" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Garis Bawah" + "value" : "Bersihkan Menu" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sottolinea" + "value" : "Pulisci menu" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "アンダーライン" + "value" : "メニューを消去" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "밑줄체" + "value" : "메뉴 지우기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pabrauktas" + "value" : "Išvalyti meniu" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Understreka" + "value" : "Tøm menyen" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Onderstrepen" + "value" : "Menu leegmaken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Understreka" + "value" : "Tøm menyen" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Podkreśl" + "value" : "Wyczyść menu" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sublinhar" + "value" : "Limpar Menu" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Sublinhado" + "value" : "Limpar Menu" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Подчеркнутый" + "value" : "Очистить меню" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Understrykning" + "value" : "Rensa menyn" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Gạch dưới" + "value" : "Làm sạch menu" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "下划线" + "value" : "清除菜单" } } } }, - "x3v-GG-iWU.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"Copy\"; ObjectID = \"x3v-GG-iWU\";", - "extractionState" : "extracted_with_value", + "w0m-vy-SC9.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Ligatures\"; ObjectID = \"w0m-vy-SC9\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "ينسخ" + "value" : "الأربطة" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Copia" + "value" : "Lligadures" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Copia" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopírovat" + "value" : "Lligadures" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Kopieren" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Copy" + "value" : "Ligaturen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar" + "value" : "Ligaduras" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar" + "value" : "Ligaduras" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Copier" + "value" : "Ligatures" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Salin" + "value" : "Ligatur" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Copia" + "value" : "Legature" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "コピー" + "value" : "合字" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "복사하기" + "value" : "합자" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Kopijuoti" + "value" : "Ligatūros" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier" + "value" : "Ligaturer" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiëren" + "value" : "Ligaturen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Kopier" + "value" : "Ligaturar" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Kopia" + "value" : "Ligatury" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar" + "value" : "Ligaduras" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Copiar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copiere" + "value" : "Ligaduras" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Копировать" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopírovať" + "value" : "Лигатуры" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Kopiera" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copy" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Копіювати" + "value" : "Ligaturer" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Sao chép" + "value" : "Chữ ghép" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "拷贝" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "拷貝" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "複製" + "value" : "连字" } } } }, - "xBU-le-7cX.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"xBU-le-7cX\";", - "extractionState" : "stale", + "W48-6f-4Dl.title" : { + "comment" : "Class = \"NSMenu\"; title = \"Edit\"; ObjectID = \"W48-6f-4Dl\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "يحرر" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Edita" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Edita" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Upravit" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Bearbeiten" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "-" + "value" : "Edit" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Editar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Editar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Modifier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Sunting" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Modifica" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "編集" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "편집" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Redaguoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Rediger" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Bewerken" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Rediger" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Edycja" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Editar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Editar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Editare" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Редактировать" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Upraviť" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Redigera" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Edit" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Редагувати" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Chỉnh sửa" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "编辑" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "編輯" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "編輯" } } } }, - "Xc8-Sm-pig.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Left\"; ObjectID = \"Xc8-Sm-pig\";", - "extractionState" : "stale", + "Was-JA-tGl.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"New\"; ObjectID = \"Was-JA-tGl\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { - "state" : "needs_review", - "value" : "النصف الأيسر" + "state" : "translated", + "value" : "جديد" } }, "ca" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat esquerra" + "state" : "translated", + "value" : "Nou" } }, "ca-ES" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Meitat esquerra" + "state" : "translated", + "value" : "Nou" } }, "cs" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Levá polovina" + "state" : "translated", + "value" : "Nový" } }, "de" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Linke Hälfte" + "state" : "translated", + "value" : "Neu" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "Left" + "value" : "New" } }, "es" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad izquierda" + "state" : "translated", + "value" : "Nuevo" } }, "es-419" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Mitad izquierda" + "state" : "translated", + "value" : "Nuevo" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Moitié gauche" + "state" : "translated", + "value" : "Nouveau" } }, "id" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Setengah Kiri" + "state" : "translated", + "value" : "Baru" } }, "it" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metà sinistra" + "state" : "translated", + "value" : "Nuovo" } }, "ja" : { "stringUnit" : { - "state" : "needs_review", - "value" : "左半分" + "state" : "translated", + "value" : "新規作成" } }, "ko" : { "stringUnit" : { - "state" : "needs_review", - "value" : "왼쪽 절반" + "state" : "translated", + "value" : "신규" } }, "lt" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Kairė pusė" + "state" : "translated", + "value" : "Sukurti" } }, "nb" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Venstre halvdel" + "state" : "translated", + "value" : "Nytt" } }, "nl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Linkerhelft" + "state" : "translated", + "value" : "Nieuw" } }, "nn" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Venstre halvdel" + "state" : "translated", + "value" : "Nytt" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Lewa połowa" + "state" : "translated", + "value" : "Nowy" } }, "pt-BR" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metade esquerda" + "state" : "translated", + "value" : "Novo" } }, "pt-PT" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Metade esquerda" + "state" : "translated", + "value" : "Novo" } }, "ro" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Prima Jumătate" + "state" : "translated", + "value" : "Nou" } }, "ru" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Левая половина" + "state" : "translated", + "value" : "Создать" } }, "sk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ľavá polovica" + "state" : "translated", + "value" : "Nový" } }, "sv-SE" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Vänstra halvan" + "state" : "translated", + "value" : "Ny" } }, "tr" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Sol Yarım" + "state" : "translated", + "value" : "New" } }, "uk" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Ліва половина" + "state" : "translated", + "value" : "Новий" } }, "vi" : { "stringUnit" : { - "state" : "needs_review", - "value" : "1/2 đầu" + "state" : "translated", + "value" : "Mới" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", - "value" : "左半屏" + "state" : "translated", + "value" : "新建" } }, "zh-Hant" : { "stringUnit" : { - "state" : "needs_review", - "value" : "左半" + "state" : "translated", + "value" : "新增" } }, "zh-Hant-HK" : { "stringUnit" : { - "state" : "needs_review", - "value" : "左半" + "state" : "translated", + "value" : "新增" } } } }, - "xcE-uL-2J0.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts\"; ObjectID = \"xcE-uL-2J0\";", - "extractionState" : "stale", + "wb2-vD-lq4.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Align Right\"; ObjectID = \"wb2-vD-lq4\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "سيؤدي اختيار Spectacle أيضًا إلى تدوير عرض النافذة 1/2 و 2/3 و 1/3 على الاختصارات المتكررة" + "value" : "محاذاة اليمين" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Si escolliu Spectacle, també es farà un cicle de 1/2, 2/3 i 1/3 d'amplada de finestra a les dreceres repetides" + "value" : "Alinea a la dreta" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Si escolliu Spectacle, també es farà un cicle de 1/2, 2/3 i 1/3 d'amplada de finestra a les dreceres repetides" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vybráním Spectacle se také bude měnit šířka oken na 1/2, 2/3, a 1/3 při opakovaných příkazech" + "value" : "Alinea a la dreta" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wenn Spectacle ausgewählt wird, werden bei wiederholten Tastaturkurzbefehlen zwischen 1/2, 2/3, und 1/3-Fensterbreiten durchgewechselt" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" + "value" : "Rechtsbündig" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Elegir Spectacle también creará un bucle para las anchuras de 1/2, 2/3 y 1/3 del tamaño de la ventana en atajos accionados repetidas veces" + "value" : "Alinear a la derecha" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Elegir Spectacle también creará un bucle para las anchuras de 1/2, 2/3 y 1/3 del tamaño de la ventana en atajos accionados repetidas veces" + "value" : "Alinear a la derecha" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Choisir Spectacle altérera aussi les largeurs de fenêtre 1/2, 2/3, et 1/3 pour les raccourcis répétés" + "value" : "Aligner à droite" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Memilih Spectacle juga akan menggilir 1/2, 2/3, dan 1/3 lebar jendela pada pintasan berulang" + "value" : "Rata Kanan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Scegliere Spectacle alternerà 1/2, 2/3, e 1/3 in larghezza con abbreviazioni ripetute" + "value" : "Allinea a destra" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacleを選択すると、同じショートカットを繰り返した際にウインドウの幅を1/2、2/3、1/3に順次変更します" + "value" : "右揃え" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle을 선택하여도 단축키를 반복하면 1/2, 2/3, 1/3 창 넓이를 순환합니다" + "value" : "오른쪽 정렬" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Pasirinkus Spectacle karštuosius klavišus, taip pat bus cikliškai keičiamas lango plotis 1/2, 2/3 ir 1/3 naudojant kartojančius karštuosius klavišus" + "value" : "Lygiavimas į dešinę" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Å velge Spectacle fører også til at man veksler mellom 1/2-, 2/3-, og 1/3-vindusbredder når du bruker samme snarveg flere ganger" + "value" : "Høgrejustert" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Choosing Spectacle will also cycle 1/2, 2/3, and 1/3 window widths on repeated shortcuts" + "value" : "Rechts uitlijnen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Å velja Spectacle fører òg til at ein vekslar mellom 1/2-, 2/3-, og 1/3-vindaugsbreidder når du bruker same snarveg fleire gonger" + "value" : "Høgrejustert" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wybranie Spectacle będzie także zmieniało szerokość okna 1/2, 2/3 i 1/3 przy powtarzających się skrótach." + "value" : "Wyrównaj w prawo" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Spectacle também fará com que comandos repetidos alternem o tamanho da janela entre 1/2, 2/3 e 1/3 de largura" + "value" : "Alinhar à Direita" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Escolher Spectacle também vai alternar ente larguras de janelas de 1/2, 2/3 e 1/3 ao repetir atalhos" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dacă alegeți Spectacle se vor parcurge 1/2, 2/3, și 1/3 din lățimile ferestrei la repetarea scurtăturilor" + "value" : "Alinhar à Direita" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Выбор горячих клавиш Spectacle также зациклит 1/2, 2/3 и 1/3 ширины окна при повторяющихся горячих клавиш" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zvolením Spectacle sa tiež bude meniť šírka okien na 1/2, 2/3 a 1/3 pri opakovaní skratiek" + "value" : "Выравнивание вправо" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "Att välja Spectacle kommer också att växla mellan 1/2-, 2/3-, och 1/3-fönsterbredder med upprepade kortkommandon" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spectacle seçilirse, yinelenen kısayollar ekranın 1/2, 2/3 ve 1/3 genişlikleri arasında geçiş sağlar." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вибір Spectacle також циклічно переключає 1/2, 2/3 і 1/3 ширини вікна при повторному використанні комбінації клавіш" + "value" : "Anpassa höger" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Chọn Spectacle cũng sẽ thiết lập tuần hoàn 1/2, 2/3, và 1/3 kích thước cửa sổ khi các phím tắt được lặp lại" + "value" : "Căn phải" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "若选择 Spectacle,重复快捷键也会循环½、⅔、⅓窗口宽度" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "如果選擇 Spectacle,重複快速鍵也會循環½、⅔、⅓視窗寬度" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "若選擇Spectacle,重複快捷鍵也會循環½、⅔、⅓視窗寬度" + "value" : "右对齐" } } } }, - "xE6-jw-EPt.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"If the area is too small, recent apps will be hidden\"; ObjectID = \"xE6-jw-EPt\";", - "extractionState" : "stale", + "WeT-3V-zwk.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Paste and Match Style\"; ObjectID = \"WeT-3V-zwk\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إذا كانت المنطقة صغيرة جدًا ، فسيتم إخفاء التطبيقات الحديثة" + "value" : "لصق ومطابقة النمط" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "Si l'àrea és massa petita, les aplicacions recents s'amagaran" + "value" : "Enganxa i coincideix amb l'estil" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "Si l'àrea és massa petita, les aplicacions recents s'amagaran" + "value" : "Enganxa i coincideix amb l'estil" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "Pokud je oblast příliš malá, nedávné aplikace budou skryté" + "value" : "Vložit a sladit styl" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wenn der Bereich zu klein ist, werden die zuletzt verwendeten Programme ausgeblendet." + "value" : "Einfügen und Stil anpassen" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Paste and Match Style" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Si el área es demasiado pequeña, las aplicaciones recientes serán ocultadas" + "value" : "Pegar y emparejar estilo" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Si el área es demasiado pequeña, las aplicaciones recientes serán ocultadas" + "value" : "Pegar y emparejar estilo" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Si la zone est trop petite, les applications récentes seront masquées" + "value" : "Coller et adapter le style" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Tempel dan Cocokkan Gaya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Se l'area è troppo piccola, le app recenti saranno nascoste" + "value" : "Incolla e mantieni stile" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "エリアが小さい場合、最近使ったアプリケーションは非表示になります" + "value" : "ペーストしてスタイルを合わせる" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "영역이 너무 작으면 최근 앱들이 숨겨집니다" + "value" : "붙여넣고 스타일 일치시킴" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "Jei sritis per maža, paskutinės programos bus paslėptos" + "value" : "Įterpti ir suderinti stilius" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Om området er for lite vil siste brukte apper ikke være synlige" + "value" : "Lim inn og tilpass stil" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Plak en neem stijl over" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "Om området er for lite vil siste brukte appar ikkje vera synlege" + "value" : "Lim inn og tilpass stil" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Wklej i dopasuj styl" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Se a área é muito pequeno, aplicativos recentes serão ocultados" + "value" : "Colar e manter estilo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Colar e Combinar Estilo" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Lipește și Aplică Stilizarea" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Если область слишком мала, последние приложения будут скрыты" + "value" : "Вставить и соотнести стили" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "Ak je oblasť príliš malá, nedávne aplikácie sa skryjú" + "value" : "Vložiť a prispôsobiť štýl" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "If the area is too small, recent apps will be hidden" + "value" : "Klistra in och matcha stil" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Eğer alan çok darsa, son uygulamalar gizlenecektir" + "value" : "Paste and Match Style" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Якщо область занадто мала, останні застосунки будуть приховані" + "value" : "Вставити зі збереженням стилю" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Nếu vùng hiển thị quá nhỏ, các ứng dụng hiện tại sẽ bị ẩn" + "value" : "Dán và khớp kiểu" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "若该区域过小,最近使用的应用程序将被隐藏" + "value" : "粘贴并匹配样式" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如果該區域過小,將會隱藏最近使用過的應用程式" + "value" : "貼上並符合樣式" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "如果該區域過小,最近使用過的應用程式將被隱藏" + "value" : "貼上並符合樣式" + } + } + } + }, + "Width Step (px)" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Width Step (px)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "너비 단위 (px)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Шаг ширины (px)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bước chiều rộng (px)" + } + } + } + }, + "windowSizeWarningMessage" : { + "comment" : "Explains that an app can prevent a window from shrinking to the requested layout", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to resize window smaller.\nWindows may overlap." + } + } + } + }, + "windowSizeWarningTitle" : { + "comment" : "Title of the on-screen message when a window cannot fit its requested size", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minimum window size reached" } } } }, - "xK0-Bn-yqf.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"-\"; ObjectID = \"xK0-Bn-yqf\";", - "extractionState" : "stale", + "wpr-3q-Mcd.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Help\"; ObjectID = \"wpr-3q-Mcd\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "يساعد" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ajuda" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ajuda" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Nápověda" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hilfe" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "-" + "value" : "Help" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ayuda" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ayuda" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Aide" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Bantuan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Aiuto" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "ヘルプ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "도움말" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Pagalba" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hjelp" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hulp" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hjelp" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Pomoc" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ajuda" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ajuda" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Ajutor" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Помощь" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Pomocník" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Hjälp" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Yardım" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Довідка" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "Trợ giúp" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "帮助" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "輔助說明" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "-" + "value" : "輔助說明" } } } }, - "XlM-ch-cLG.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"cycle through displays\"; ObjectID = \"XlM-ch-cLG\";", - "extractionState" : "stale", + "WRG-CD-K1S.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Underline\"; ObjectID = \"WRG-CD-K1S\";", + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "دورة من خلال شاشات العرض" + "value" : "تسطير" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "cicle per les pantalles" + "value" : "Subratllat" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "cicle per les pantalles" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "přesouvat po displejích" + "value" : "Subratllat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Durch Bildschirme wechseln" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "cycle through displays" + "value" : "Unterstrichen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "bucle a través de las pantallas" + "value" : "Subrayar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "bucle a través de las pantallas" + "value" : "Subrayar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "parcourir les moniteurs" + "value" : "Souligner" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "siklus melalui tampilan" + "value" : "Garis Bawah" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "scorri tra schermi" + "value" : "Sottolinea" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウインドウを表示するディスプレイを変更" + "value" : "アンダーライン" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "디스플레이 순환" + "value" : "밑줄체" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "perjungineti tarp ekranų" + "value" : "Pabrauktas" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "gå gjennom skjermene" + "value" : "Understreka" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "cycle through displays" + "value" : "Onderstrepen" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "gå gjennom skjermane" + "value" : "Understreka" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "cycle through displays" + "value" : "Podkreśl" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "cycle through displays" + "value" : "Sublinhar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "cycle through displays" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "navigare ciclică între ecrane" + "value" : "Sublinhado" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "переключаться между дисплеями" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "prepínať medzi displejmi" + "value" : "Подчеркнутый" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "bläddra mellan skärmarna" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "ekranlar arasında dolaş" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "циклічно перебирати екрани" + "value" : "Understrykning" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "Di chuyển tuần hoàn qua các màn hình" + "value" : "Gạch dưới" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "循环显示器" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "循環顯示器" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "循環顯示器" + "value" : "下划线" } } } }, - "xNi-9K-fnJ.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"2. In the Rectangle menu, select\\n\\\"Use [Application] as Todo App\\\"\"; ObjectID = \"xNi-9K-fnJ\";", - "extractionState" : "stale", + "x3v-GG-iWU.title" : { + "comment" : "Class = \"NSMenuItem\"; title = \"Copy\"; ObjectID = \"x3v-GG-iWU\";", + "extractionState" : "extracted_with_value", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "2. في قائمة المستطيل ، حدد n استخدام [Application] كتطبيق Todo" + "value" : "ينسخ" } }, "ca" : { "stringUnit" : { "state" : "translated", - "value" : "2. Al menú Rectangle, selecciona\n\"Utilitza [Application] com a app Todo\"" + "value" : "Copia" } }, "ca-ES" : { "stringUnit" : { "state" : "translated", - "value" : "2. Al menú Rectangle, selecciona\n\"Utilitza [Application] com a app Todo\"" + "value" : "Copia" } }, "cs" : { "stringUnit" : { "state" : "translated", - "value" : "2. V Rectangle menu, zvolte\n\"Vybrat [Application] jako Todo aplikaci\"" + "value" : "Kopírovat" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "2. Wähle \n\"Verwende [Application] als To-do-Anwendung\" im Rectangle-Menü." + "value" : "Kopieren" } }, "en" : { "stringUnit" : { "state" : "new", - "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + "value" : "Copy" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "2. En el menú de Rectangle, selecciona\n\"Usar [Aplicación] como aplicación 'Todo'\"" + "value" : "Copiar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "2. En el menú de Rectangle, selecciona\n\"Usar [Aplicación] como aplicación 'Todo'\"" + "value" : "Copiar" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "2. Dans le menu de Rectangle, sélectionner\n« Utiliser [Application] comme App Todo »" + "value" : "Copier" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "2. Di Menu Rectangle, pilih\n\"Gunakan [Application] sebagai Aplikasi Todo\"" + "value" : "Salin" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "2. Nel menu di Rectangle, seleziona \n\"Usa [Applicazione] come applicazione in evidenza\"" + "value" : "Copia" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "2. Rectangleのメニューにある\n\"[アプリケーション名]をToDoアプリとして使う\"を選択します" + "value" : "コピー" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "2. Rectangle 메뉴에서, \n\"[Application]을 Todo 앱으로 사용\" 메뉴를 클릭합니다" + "value" : "복사하기" } }, "lt" : { "stringUnit" : { "state" : "translated", - "value" : "„Rectangle“ meniu pasirinkite „Naudoti [Programą] kaip Todo programą“" + "value" : "Kopijuoti" } }, "nb" : { "stringUnit" : { "state" : "translated", - "value" : "2. I Rectangle-menyen: velg\n\"Bruk [Program] som Gjøreliste-program\"" + "value" : "Kopier" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + "value" : "Kopiëren" } }, "nn" : { "stringUnit" : { "state" : "translated", - "value" : "2. I Rectangle-menyen: vel\n\"Bruk [Program] som Gjereliste-program\"" + "value" : "Kopier" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + "value" : "Kopia" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "2. No menu do Rectangle, selecione\n\"Use [Aplicativo] como Todo App\"" + "value" : "Copiar" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "2. In the Rectangle menu, select\n\"Use [Application] as Todo App\"" + "value" : "Copiar" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "2. În meniul Rectangle, selectează\n\"Folosește [Application] ca și Todo App\"" + "value" : "Copiere" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "2. В меню Rectangle выберите \"Использовать [Приложение] в качестве приложения Todo\"" + "value" : "Копировать" } }, "sk" : { "stringUnit" : { "state" : "translated", - "value" : "2. V Rectangle menu, zvoľ\n\"Použiť [Aplikácia] ako Todo aplikáciu\"" + "value" : "Kopírovať" } }, "sv-SE" : { "stringUnit" : { "state" : "translated", - "value" : "2. I Rectangle-menyn, välj\n\"Använd [Applikation] som Att göra-app\"" + "value" : "Kopiera" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "2. Rectangle menüsünde \n\"[Uygulama Adı]nı Todo App olarak kullan\" seçeneğini seçin" + "value" : "Copy" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "2. У меню Rectangle виберіть\n\"Використовувати [Застосунок] як застосунок Завдань\"" + "value" : "Копіювати" } }, "vi" : { "stringUnit" : { "state" : "translated", - "value" : "2. Trên menu của Rectangle, chọn\n\"Sử dụng [Ứng dụng] làm ứng dụng Todo\"" + "value" : "Sao chép" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "⒉在 Rectangle 菜单中,选择\n“使用[应用程序]作为待办应用”" + "value" : "拷贝" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "⒉ 在 Rectangle 選單中,選擇\n「使用[應用程式]作為待辦應用程式」" + "value" : "拷貝" } }, "zh-Hant-HK" : { "stringUnit" : { "state" : "translated", - "value" : "⒉在Rectangle選單中,選擇\n「使用[應用程式]作為待辦應用」" + "value" : "複製" } } } @@ -50201,192 +24691,6 @@ } } }, - "Z9d-Rl-RVq.title" : { - "comment" : "Class = \"NSMenuItem\"; title = \"move to adjacent display on left or right\"; ObjectID = \"Z9d-Rl-RVq\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "انتقل إلى الشاشة المجاورة على اليسار أو اليمين" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "mou a la pantalla adjacent a l'esquerra o a la dreta" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "mou a la pantalla adjacent a l'esquerra o a la dreta" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "přesunout na sousedící displej vlevo nebo vpravo" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zum benachbarten Bildschirm auf der linken oder rechten Seite bewegen" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "move to adjacent display on left or right" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "mover a la pantalla adyacente a la izquierda o a la derecha" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "mover a la pantalla adyacente a la izquierda o a la derecha" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "déplacer vers le moniteur à gauche ou à droite" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "pindah ke tampilan yang berdekatan di kiri atau kanan" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "sposta nello schermo adiacente a sinistra o a destra" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ウインドウを左右のディスプレイに順次移動" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "인접한 왼쪽 또는 오른쪽 디스플레이로 이동" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "pereiti prie gretimo ekrano kairėje arba dešinėje" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "flytt til nærmeste skjerm til venstre eller høgre" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "move to adjacent display on left or right" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "flytt til nærmaste skjerm til venstre eller høgre" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "move to adjacent display on left or right" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "move to adjacent display on left or right" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "move to adjacent display on left or right" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "mută în ecranul adiacent din stânga sau din dreapta" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "перейти к соседнему дисплею слева или справа" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "presunúť na susediaci displej vľavo alebo vpravo" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "flytta till intilliggande skärm till vänster eller höger" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "pencereyi sağdaki veya soldaki bitişik ekrana taşı" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "перемістити на сусідній екран зліва або справа" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Di chuyển đến cạnh trái hoặc phải" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "移动到左侧或右侧的相邻显示器" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "移至左側或右側的相鄰顯示器" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "移到左側或右側的相鄰顯示器" - } - } - } - }, "ZM1-6Q-yy1.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Align Left\"; ObjectID = \"ZM1-6Q-yy1\";", "extractionState" : "manual", @@ -50525,384 +24829,6 @@ } } }, - "ZTK-rS-b17.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"Third Fourth\"; ObjectID = \"ZTK-rS-b17\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "ثالث رابع" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tercer quart" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tercer quart" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Třetí čtvrtina" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Drittes Viertel" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Third Fourth" - } - }, - "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "Third Quarter" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tercer cuarto" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tercer cuarto" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Troisième quart" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tiga Perempat" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terzo quarto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "左から3番目" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "세번째 1/4" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trečia ketvirtis" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tredje fjerdedel" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Derde kwart" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tredje fjerdedel" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trzecia ćwiartka" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terceiro quarto" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Terceiro Quarto" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Al Treilea Sfert" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Третья четверть" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tretia štvrtina" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tredje fjärde" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Üçüncü Çeyrek" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Третя чверть" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "1/4 thứ ba" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "右二1/4" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "右二1/4" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "右二1/4" - } - } - } - }, - "ZVi-DR-1zj.title" : { - "comment" : "Class = \"NSTextFieldCell\"; title = \"About Todo Mode\"; ObjectID = \"ZVi-DR-1zj\";", - "extractionState" : "stale", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حول تودو مود" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant al mode Todo" - } - }, - "ca-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quant al mode Todo" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Todo módu" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Über den To-do-Modus" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "About Todo Mode" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca del modo 'Todo'" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acerca del modo 'Todo'" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "À propos du mode Todo" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tentang Todo Mode" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Informazioni sulla modalità In evidenza" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ToDoモードについて" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo 모드 정보" - } - }, - "lt" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apie Todo režimą" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om Gjøreliste-modus" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "About Todo Mode" - } - }, - "nn" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om Gjereliste-modus" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "About Todo Mode" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sobre o Todo Mode" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "About Todo Mode" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Despre Modul Todo" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "О Todo режиме" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "O Todo režime" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Om Att göra-läge" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Todo Modu Hakkında" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Про режим Завдань" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Giới thiệu chế độ Todo" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关于待办模式" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於待辦模式" - } - }, - "zh-Hant-HK" : { - "stringUnit" : { - "state" : "translated", - "value" : "關於待辦模式" - } - } - } - }, "ZvO-Gk-QUH.title" : { "comment" : "Class = \"NSMenuItem\"; title = \"Paragraph\"; ObjectID = \"ZvO-Gk-QUH\";", "extractionState" : "manual",