diff --git a/Sources/PullMark/App/AppLinkRouter.swift b/Sources/PullMark/App/AppLinkRouter.swift
index 45ccd03..9d19def 100644
--- a/Sources/PullMark/App/AppLinkRouter.swift
+++ b/Sources/PullMark/App/AppLinkRouter.swift
@@ -20,6 +20,10 @@ enum AppLinkRouter {
SettingsOpener.open(tab: target.tab, anchor: target.anchor)
} else if let compare = AppLinks.compareTarget(url) {
AppState.deliverCompareOpen(file: compare.file, request: compare.request)
+ } else if CaptureChrome.isActive, url.host == "capture" {
+ // Screenshot-generator drive channel — only routable in
+ // capture runs, never in a normally launched app.
+ CaptureChrome.handleCaptureURL(url)
} else {
presentUnsupported(url)
}
diff --git a/Sources/PullMark/App/CaptureChrome.swift b/Sources/PullMark/App/CaptureChrome.swift
new file mode 100644
index 0000000..35339a1
--- /dev/null
+++ b/Sources/PullMark/App/CaptureChrome.swift
@@ -0,0 +1,105 @@
+import AppKit
+import ObjectiveC
+import WebKit
+
+/// Screenshot-generator hook (`-pm.captureChrome 1`, argument domain
+/// only): windows draw ACTIVE chrome — colored traffic lights, accent
+/// selection — while the app stays backgrounded. The generator captures
+/// many instances in parallel without ever stealing focus, and the
+/// pixels come out identical to a frontmost window's.
+///
+/// AppKit and SwiftUI consult isKeyWindow / isMainWindow /
+/// NSApp.isActive when drawing window chrome and resolving
+/// controlActiveState; there is no supported per-window "appear
+/// active" switch on macOS 13, so the getters are swizzled to return
+/// true. Capture instances are driven purely through AX and
+/// pid-targeted events and never see real user input, so the lie has
+/// no one to confuse. Never set this flag on a normal run.
+enum CaptureChrome {
+ static var isActive: Bool {
+ UserDefaults.standard.bool(forKey: "pm.captureChrome")
+ }
+
+ static func installIfRequested() {
+ guard isActive else { return }
+ forceTrue(NSWindow.self, #selector(getter: NSWindow.isKeyWindow))
+ forceTrue(NSWindow.self, #selector(getter: NSWindow.isMainWindow))
+ forceTrue(NSApplication.self, #selector(getter: NSApplication.isActive))
+ // Selection color: row views draw the accent only when
+ // "emphasized" (their table in the key responder chain) —
+ // force it so sidebar selection captures blue, not gray.
+ forceTrue(NSTableRowView.self, #selector(getter: NSTableRowView.isEmphasized))
+ // A never-activated app has no key window, so AppKit DROPS posted
+ // keyboard events (and menu key equivalents). Nominate one: the
+ // most recently created visible window that can take key status —
+ // panels (Open Quickly, Open) appear after the main window and
+ // win while they're up, which is exactly the routing a user's
+ // focus would produce.
+ let keyWindowGetter = #selector(getter: NSApplication.keyWindow)
+ if let method = class_getInstanceMethod(NSApplication.self, keyWindowGetter) {
+ let nominate: @convention(block) (AnyObject) -> NSWindow? = { _ in
+ // orderedWindows is front-to-back z-order: an open panel
+ // (Open Quickly, Open) floats above the main window and
+ // wins, exactly as real focus would.
+ NSApp.orderedWindows.first { $0.isVisible && $0.canBecomeKey }
+ ?? NSApp.windows.last { $0.isVisible && $0.canBecomeKey }
+ }
+ method_setImplementation(method, imp_implementationWithBlock(nominate))
+ }
+ // Make new windows GENUINELY key and main. A background app's
+ // window can hold real key status without the app activating —
+ // proof: the Open Quickly panel scene always photographed with
+ // colored lights, because closing the panel handed real key
+ // status back to the main window. Faked become-key
+ // notifications were tried twice (once-per-window and repeated)
+ // and both raced AppKit into gray traffic lights the moment
+ // anything re-laid-out the titlebar. Real state is
+ // resize-proof, and it also gives posted keyboard events a real
+ // key window to land in.
+ let blessed = NSHashTable.weakObjects()
+ let blessAll = {
+ for window in NSApp.windows where window.isVisible && !blessed.contains(window) {
+ blessed.add(window)
+ if window.canBecomeMain { window.makeMain() }
+ if window.canBecomeKey { window.makeKey() }
+ if window.firstResponder === window,
+ let responder = window.initialFirstResponder ?? window.contentView {
+ window.makeFirstResponder(responder)
+ }
+ }
+ }
+ Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { _ in blessAll() }
+ }
+
+ private static func forceTrue(_ cls: AnyClass, _ selector: Selector) {
+ guard let method = class_getInstanceMethod(cls, selector) else { return }
+ let alwaysTrue: @convention(block) (AnyObject) -> Bool = { _ in true }
+ method_setImplementation(method, imp_implementationWithBlock(alwaysTrue))
+ }
+
+ /// pullmark://capture/… — the generator's drive channel for the few
+ /// page interactions no accessibility or keyboard path can reach.
+ /// Routed only when the capture flag is set (see AppLinkRouter).
+ @MainActor
+ static func handleCaptureURL(_ url: URL) {
+ guard url.path == "/reveal",
+ let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
+ let lineText = components.queryItems?.first(where: { $0.name == "line" })?.value,
+ let line = Int(lineText)
+ else { return }
+ let webView = NSApp.orderedWindows.lazy
+ .compactMap { $0.contentView.flatMap(findWebView) }
+ .first
+ webView?.evaluateJavaScript(
+ "window.__pmRevealBlock && __pmRevealBlock(\(line));",
+ completionHandler: nil)
+ }
+
+ private static func findWebView(in view: NSView) -> WKWebView? {
+ if let webView = view as? WKWebView { return webView }
+ for subview in view.subviews {
+ if let found = findWebView(in: subview) { return found }
+ }
+ return nil
+ }
+}
diff --git a/Sources/PullMark/App/DemoMode.swift b/Sources/PullMark/App/DemoMode.swift
index 4107495..a16a701 100644
--- a/Sources/PullMark/App/DemoMode.swift
+++ b/Sources/PullMark/App/DemoMode.swift
@@ -20,7 +20,12 @@ enum DemoMode {
/// The isolated defaults domain demo launches read and write — never
/// the app's real `app.pullmark.PullMark` domain.
- static let defaultsSuiteName = "app.pullmark.PullMark.demo"
+ /// Per-process: the screenshot generator runs MANY demo instances in
+ /// parallel, each wiping its suite at startup — with a shared name,
+ /// every launch nuked every other instance's live state (@AppStorage
+ /// observed the wipe and reset blame mid-scene). Demo state is
+ /// throwaway by definition, so nothing is lost by never sharing it.
+ static let defaultsSuiteName = "app.pullmark.PullMark.demo.\(ProcessInfo.processInfo.processIdentifier)"
}
extension UserDefaults {
@@ -37,6 +42,21 @@ extension UserDefaults {
/// on every demo launch, so nothing persists between demo runs either.
static let pullmark: UserDefaults = {
guard DemoMode.active else { return .standard }
+ // Janitor: per-pid suites (see defaultsSuiteName) would leave a
+ // plist per past demo instance — clear the ones whose owner is
+ // gone. kill(pid, 0) probes liveness without signaling, so
+ // parallel LIVE instances are never touched.
+ let preferences = FileManager.default.homeDirectoryForCurrentUser
+ .appendingPathComponent("Library/Preferences")
+ let prefix = "app.pullmark.PullMark.demo."
+ if let entries = try? FileManager.default.contentsOfDirectory(atPath: preferences.path) {
+ for entry in entries where entry.hasPrefix(prefix) && entry.hasSuffix(".plist") {
+ let stem = String(entry.dropFirst(prefix.count).dropLast(".plist".count))
+ if let pid = Int32(stem), kill(pid, 0) != 0 {
+ UserDefaults().removePersistentDomain(forName: String(entry.dropLast(".plist".count)))
+ }
+ }
+ }
let name = DemoMode.defaultsSuiteName
guard let suite = UserDefaults(suiteName: name) else { return .standard }
suite.removePersistentDomain(forName: name)
diff --git a/Sources/PullMark/App/DemoSession.swift b/Sources/PullMark/App/DemoSession.swift
index 0999d7d..78fd8e5 100644
--- a/Sources/PullMark/App/DemoSession.swift
+++ b/Sources/PullMark/App/DemoSession.swift
@@ -597,9 +597,11 @@ enum DemoSession {
]
state.checks = [
CheckItem(name: "build", group: "CI", state: .passed,
- detailsUrl: nil, isRequired: true, durationLabel: "1m 32s"),
+ detailsUrl: nil, isRequired: true,
+ durationLabel: CheckItem.durationLabel(seconds: 92)),
CheckItem(name: "docs-links", group: "CI", state: .passed,
- detailsUrl: nil, isRequired: false, durationLabel: "48s"),
+ detailsUrl: nil, isRequired: false,
+ durationLabel: CheckItem.durationLabel(seconds: 48)),
CheckItem(name: "spellcheck", group: "CI", state: .skipped,
detailsUrl: nil, isRequired: false, durationLabel: nil),
CheckItem(name: "license/cla", group: nil, state: .passed,
@@ -718,6 +720,9 @@ enum DemoSession {
.appendingPathComponent("PullMark Demo", isDirectory: true)
try? FileManager.default.removeItem(at: root)
try? FileManager.default.createDirectory(at: root, withIntermediateDirectories: true)
+ // Titlebars, tooltips, and Open Quickly rows show the plausible
+ // "~/Documents/PullMark Demo" instead of the raw temp path.
+ PathAbbreviator.demoRoot = root.path
var docs: [LocalFile] = []
var texts = [(path: String, text: String)]()
for path in [gettingStartedPath, calibrationPath, exportFormatsPath] {
diff --git a/Sources/PullMark/App/PullMarkApp.swift b/Sources/PullMark/App/PullMarkApp.swift
index 4571210..771e0b3 100644
--- a/Sources/PullMark/App/PullMarkApp.swift
+++ b/Sources/PullMark/App/PullMarkApp.swift
@@ -83,7 +83,7 @@ struct PullMarkApp: App {
.keyboardShortcut(shortcuts.keyboardShortcut(for: .prResult))
.disabled(!prFileSelected)
Button(diffLayoutRaw == PRFileView.DiffLayout.inline.rawValue
- ? "Side-by-Side Diffs" : "Inline Diffs") {
+ ? String(localized: "Side-by-Side Diffs") : String(localized: "Inline Diffs")) {
state?.send(.flipDiffLayout)
}
.keyboardShortcut(shortcuts.keyboardShortcut(for: .prFlipLayout))
@@ -370,16 +370,15 @@ struct PullMarkApp: App {
.disabled(!marginNotesEnabled || activeLocalFileURL == nil
|| state?.sourceViewVisible == true)
.help(marginNotesEnabled
- ? "Leave a note on the block you're reading — it's saved into the "
- + "file as a comment"
- : "Turn on margin notes in Settings → Experimental")
+ ? String(localized: "Leave a note on the block you're reading — it's saved into the file as a comment")
+ : String(localized: "Turn on margin notes in Settings → Experimental"))
Button("File Margin Note…") { state?.send(.addFileMarginNote) }
.keyboardShortcut(shortcuts.keyboardShortcut(for: .addFileMarginNote))
.disabled(!marginNotesEnabled || activeLocalFileURL == nil
|| state?.sourceViewVisible == true)
.help(marginNotesEnabled
- ? "Leave a note about the whole document, at the top"
- : "Turn on margin notes in Settings → Experimental")
+ ? String(localized: "Leave a note about the whole document, at the top")
+ : String(localized: "Turn on margin notes in Settings → Experimental"))
}
CommandGroup(replacing: .help) {
Button("Release Notes") {
@@ -580,7 +579,13 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
// Needed when launched via `swift run` (no bundle): become a regular,
// focusable app with a menu bar.
NSApp.setActivationPolicy(.regular)
- NSApp.activate(ignoringOtherApps: true)
+ // Capture instances draw active chrome without focus and must
+ // NOT activate — the whole point is not stealing the user's
+ // input while the generator drives many instances at once.
+ CaptureChrome.installIfRequested()
+ if !CaptureChrome.isActive {
+ NSApp.activate(ignoringOtherApps: true)
+ }
Appearance.applyCurrent()
// Pin the launch language before any UI (or the user) can
// change the stored value — the Settings row compares against it.
diff --git a/Sources/PullMark/Core/ContentWidth.swift b/Sources/PullMark/Core/ContentWidth.swift
index d47d44c..67f7c03 100644
--- a/Sources/PullMark/Core/ContentWidth.swift
+++ b/Sources/PullMark/Core/ContentWidth.swift
@@ -25,9 +25,9 @@ enum ContentWidth: String, CaseIterable, Identifiable {
var descriptor: String {
switch self {
- case .standard: return "A classic reading measure"
- case .wide: return "Longer lines, more on screen"
- case .full: return "Text uses the whole window"
+ case .standard: return String(localized: "A classic reading measure")
+ case .wide: return String(localized: "Longer lines, more on screen")
+ case .full: return String(localized: "Text uses the whole window")
}
}
diff --git a/Sources/PullMark/Core/PathAbbreviator.swift b/Sources/PullMark/Core/PathAbbreviator.swift
index 371ee06..dc0ebea 100644
--- a/Sources/PullMark/Core/PathAbbreviator.swift
+++ b/Sources/PullMark/Core/PathAbbreviator.swift
@@ -4,7 +4,18 @@ import Foundation
/// UI (titlebar subtitles, tooltips, search-result subtitles). Pure string
/// logic so it stays unit-testable; pass `home` explicitly in tests.
enum PathAbbreviator {
+ /// Demo mode only: the demo session's real files live in a temp dir,
+ /// and `/var/folders/…/T/PullMark Demo` in the titlebar ruins every
+ /// published screenshot. Set by DemoSession when it writes the docs;
+ /// display shows the path a real user would plausibly have. Never
+ /// set outside demo mode — real paths are never masked.
+ static var demoRoot: String?
+ static let demoDisplayRoot = "~/Documents/PullMark Demo"
+
static func abbreviate(_ path: String, home: String = NSHomeDirectory()) -> String {
+ if let demoRoot, path.hasPrefix(demoRoot) {
+ return demoDisplayRoot + path.dropFirst(demoRoot.count)
+ }
guard !home.isEmpty, home != "/" else { return path }
let home = home.hasSuffix("/") ? String(home.dropLast()) : home
if path == home { return "~" }
diff --git a/Sources/PullMark/Core/ReviewControl.swift b/Sources/PullMark/Core/ReviewControl.swift
index 9530997..4826a97 100644
--- a/Sources/PullMark/Core/ReviewControl.swift
+++ b/Sources/PullMark/Core/ReviewControl.swift
@@ -12,17 +12,17 @@ enum ReviewVerdict: String, CaseIterable, Identifiable {
var label: String {
switch self {
- case .comment: return "Comment"
- case .approve: return "Approve"
- case .requestChanges: return "Request changes"
+ case .comment: return String(localized: "Comment")
+ case .approve: return String(localized: "Approve")
+ case .requestChanges: return String(localized: "Request changes")
}
}
var help: String {
switch self {
- case .comment: return "Submit general feedback without explicit approval"
- case .approve: return "Approve merging these changes"
- case .requestChanges: return "Ask for changes before this can merge"
+ case .comment: return String(localized: "Submit general feedback without explicit approval")
+ case .approve: return String(localized: "Approve merging these changes")
+ case .requestChanges: return String(localized: "Ask for changes before this can merge")
}
}
}
diff --git a/Sources/PullMark/Core/Theme.swift b/Sources/PullMark/Core/Theme.swift
index 588997f..d596c84 100644
--- a/Sources/PullMark/Core/Theme.swift
+++ b/Sources/PullMark/Core/Theme.swift
@@ -24,9 +24,9 @@ enum Theme: String, CaseIterable, Identifiable {
/// One-line descriptor shown under the theme's preview card.
var descriptor: String {
switch self {
- case .github: return "The classic look, exactly as on github.com"
- case .editorial: return "Bookish serif headers on warm paper"
- case .terminal: return "Monospace with a phosphor-green accent"
+ case .github: return String(localized: "The classic look, exactly as on github.com")
+ case .editorial: return String(localized: "Bookish serif headers on warm paper")
+ case .terminal: return String(localized: "Monospace with a phosphor-green accent")
}
}
diff --git a/Sources/PullMark/GitHub/PRCockpit.swift b/Sources/PullMark/GitHub/PRCockpit.swift
index ffef200..a6ef725 100644
--- a/Sources/PullMark/GitHub/PRCockpit.swift
+++ b/Sources/PullMark/GitHub/PRCockpit.swift
@@ -97,17 +97,26 @@ struct CheckItem: Equatable, Identifiable {
}
}
- /// "58s" / "3m 12s" / "1h 4m" between two ISO-8601 stamps.
+ /// "58s" / "3m 12s" / "1h 4m" between two ISO-8601 stamps —
+ /// abbreviated in the launch language's own units (ja: 3分12秒).
static func durationLabel(startedAt: String?, completedAt: String?) -> String? {
guard let startedAt, let completedAt,
let start = GitHubDate.parse(startedAt),
let end = GitHubDate.parse(completedAt) else { return nil }
let seconds = Int(end.timeIntervalSince(start).rounded())
+ return durationLabel(seconds: seconds)
+ }
+
+ /// Seconds-based core (the demo session feeds it directly so demo
+ /// checks render native units too, not baked English strings).
+ static func durationLabel(seconds: Int) -> String? {
guard seconds >= 0 else { return nil }
- if seconds < 60 { return "\(seconds)s" }
- let minutes = seconds / 60
- if minutes < 60 { return "\(minutes)m \(seconds % 60)s" }
- return "\(minutes / 60)h \(minutes % 60)m"
+ let formatter = DateComponentsFormatter()
+ formatter.unitsStyle = .abbreviated
+ formatter.allowedUnits = seconds < 60 ? [.second]
+ : seconds < 3600 ? [.minute, .second]
+ : [.hour, .minute]
+ return formatter.string(from: TimeInterval(seconds))
}
}
diff --git a/Sources/PullMark/Rendering/MarkdownWebView.swift b/Sources/PullMark/Rendering/MarkdownWebView.swift
index a4a66f3..0f037f5 100644
--- a/Sources/PullMark/Rendering/MarkdownWebView.swift
+++ b/Sources/PullMark/Rendering/MarkdownWebView.swift
@@ -314,6 +314,15 @@ struct MarkdownWebView: NSViewRepresentable {
forURLScheme: RemoteResourceSchemeHandler.scheme)
configuration.setURLSchemeHandler(context.coordinator.attachmentHandler,
forURLScheme: AttachmentSchemeHandler.scheme)
+ // Capture runs only: parallel instances overlap on cascaded
+ // frames, and WebKit suspends a fully occluded window's
+ // WebContent process — sometimes before first paint, which
+ // captured as a permanently blank pane. Keep rendering alive
+ // regardless of visibility while the generator drives us.
+ if CaptureChrome.isActive {
+ configuration.preferences.setValue(
+ false, forKey: "pageVisibilityBasedProcessSuppressionEnabled")
+ }
let webView = interactive
? ZoomableWebView(frame: .zero, configuration: configuration)
: PassthroughWebView(frame: .zero, configuration: configuration)
diff --git a/Sources/PullMark/Resources/app.js b/Sources/PullMark/Resources/app.js
index c889424..75f4465 100644
--- a/Sources/PullMark/Resources/app.js
+++ b/Sources/PullMark/Resources/app.js
@@ -5113,6 +5113,28 @@
var parts = host.getAttribute("data-pm-lines").split("-");
reveal(host, parseInt(parts[0], 10), parseInt(parts[1], 10));
});
+
+ // Screenshot-generator hook (pullmark://capture/reveal, gated
+ // Swift-side to capture runs): reveal the block containing a
+ // source line. Blocks aren't individually reachable through the
+ // accessibility tree — the click listener above is delegated —
+ // so scene scripts can't activate one without a real cursor.
+ window.__pmRevealBlock = function (line) {
+ // Mirror the click path: close any open editor first (edit-mode
+ // entry auto-reveals the focused block) or two editors stack.
+ if (revealState) { commitReveal(); }
+ var host = null;
+ content.querySelectorAll(".pm-editable[data-pm-lines]").forEach(function (el) {
+ if (host || el.style.display === "none") { return; }
+ var parts = el.getAttribute("data-pm-lines").split("-");
+ if (parseInt(parts[0], 10) <= line && line <= parseInt(parts[1], 10)) {
+ host = el;
+ }
+ });
+ if (!host) { return; }
+ var parts = host.getAttribute("data-pm-lines").split("-");
+ reveal(host, parseInt(parts[0], 10), parseInt(parts[1], 10));
+ };
}
var blameAnnotated = payload.blame && payload.blame.length && linesAnnotated;
diff --git a/Sources/PullMark/Views/AppToolbar.swift b/Sources/PullMark/Views/AppToolbar.swift
index d0b76e4..371e1c7 100644
--- a/Sources/PullMark/Views/AppToolbar.swift
+++ b/Sources/PullMark/Views/AppToolbar.swift
@@ -291,7 +291,7 @@ private struct LocalFileToolbarItems: CustomizableToolbarContent {
var body: some CustomizableToolbarContent {
ToolbarItem(id: "local-share") {
ShareSheetButton(mode: .document, state: state, surface: surface,
- help: "Share this document")
+ help: String(localized: "Share this document"))
}
ToolbarItem(id: "local-edit") {
EditToolbarToggle(surface: surface)
@@ -343,7 +343,7 @@ private struct RemoteDocToolbarItems: CustomizableToolbarContent {
}
ToolbarItem(id: "remote-share", showsByDefault: false) {
ShareSheetButton(mode: .link, state: state, surface: surface,
- help: "Share a link to this document on GitHub")
+ help: String(localized: "Share a link to this document on GitHub"))
}
ToolbarItem(id: "remote-reload", showsByDefault: false) {
ReloadToolbarButton(state: state,
@@ -372,7 +372,9 @@ private struct PRFileToolbarItems: CustomizableToolbarContent {
set: { surface?.setMode?($0) }
)) {
ForEach(surface?.modeOptions ?? [], id: \.self) { option in
- Text(option).tag(option)
+ // Options are Mode raw values (selection tokens);
+ // render the localized label, tag the token.
+ Text(PRFileView.Mode(rawValue: option)?.label ?? option).tag(option)
}
}
.pickerStyle(.segmented)
@@ -386,7 +388,7 @@ private struct PRFileToolbarItems: CustomizableToolbarContent {
ToolbarItem(id: "pr-layout") {
Picker("Layout", selection: $layoutRaw) {
ForEach(PRFileView.DiffLayout.allCases) { layout in
- Text(layout.rawValue).tag(layout.rawValue)
+ Text(layout.label).tag(layout.rawValue)
}
}
.pickerStyle(.menu)
@@ -398,9 +400,9 @@ private struct PRFileToolbarItems: CustomizableToolbarContent {
// Mode first: on an added file in Result mode both reasons are
// true, but the mode is why the picker does nothing HERE.
.help(surface?.showsLayout != true
- ? "Inline or side-by-side rendered diff — for the Rendered Diff view"
+ ? String(localized: "Inline or side-by-side rendered diff — for the Rendered Diff view")
: (surface?.layoutDisabledReason
- ?? "Inline or side-by-side rendered diff"))
+ ?? String(localized: "Inline or side-by-side rendered diff")))
}
// Unconditional (structure never follows the registration);
// blame annotates the Result view only, other modes disable it.
@@ -443,7 +445,7 @@ private struct PROverviewToolbarItems: CustomizableToolbarContent {
var body: some CustomizableToolbarContent {
ToolbarItem(id: "overview-share") {
ShareSheetButton(mode: .link, state: state, surface: surface,
- help: "Share a link to this pull request")
+ help: String(localized: "Share a link to this pull request"))
}
}
}
@@ -546,8 +548,8 @@ private struct EditToolbarToggle: View {
// The key equivalent lives on Edit → Edit Mode; binding it here too
// would give one combo two owners.
.help(surface?.editMode == true
- ? "Done editing\(shortcuts.hint(.editMode))"
- : "Edit this document\(shortcuts.hint(.editMode)) — then click any block")
+ ? String(localized: "Done editing\(shortcuts.hint(.editMode))")
+ : String(localized: "Edit this document\(shortcuts.hint(.editMode)) — then click any block"))
.disabled(surface?.editDisabled ?? true)
}
}
@@ -594,10 +596,10 @@ private struct CompareToolbarButton: View {
.background(MenuAnchorReader(box: anchor))
.disabled(surface?.compareAvailable != true)
.help(surface?.compareAvailable != true
- ? (surface?.compareUnavailableReason ?? "Comparing is unavailable here")
+ ? (surface?.compareUnavailableReason ?? String(localized: "Comparing is unavailable here"))
: surface?.compareHasChanges == true
- ? "This file has uncommitted changes — compare with a previous revision or branch"
- : "Compare with a previous revision or branch")
+ ? String(localized: "This file has uncommitted changes — compare with a previous revision or branch")
+ : String(localized: "Compare with a previous revision or branch"))
}
}
@@ -612,7 +614,7 @@ private struct ReloadToolbarButton: View {
Label("Reload", systemImage: "arrow.clockwise")
}
.disabled(disabledReason != nil)
- .help(disabledReason ?? "Reload this document")
+ .help(disabledReason ?? String(localized: "Reload this document"))
}
}
diff --git a/Sources/PullMark/Views/BlameHistorySheet.swift b/Sources/PullMark/Views/BlameHistorySheet.swift
index a6cc301..877e4f2 100644
--- a/Sources/PullMark/Views/BlameHistorySheet.swift
+++ b/Sources/PullMark/Views/BlameHistorySheet.swift
@@ -135,7 +135,7 @@ struct BlameHistorySheet: View {
.contentShape(Rectangle())
}
.buttonStyle(.plain)
- .help(entry.url != nil ? "Open commit on GitHub" : "Copy full SHA")
+ .help(entry.url != nil ? String(localized: "Open commit on GitHub") : String(localized: "Copy full SHA"))
}
private func activate(_ entry: HistoryEntry) {
diff --git a/Sources/PullMark/Views/CompareRevisionsSheet.swift b/Sources/PullMark/Views/CompareRevisionsSheet.swift
index 5f58ddd..fec98e5 100644
--- a/Sources/PullMark/Views/CompareRevisionsSheet.swift
+++ b/Sources/PullMark/Views/CompareRevisionsSheet.swift
@@ -24,10 +24,10 @@ struct CompareRevisionsSheet: View {
Text("Anything Git can resolve works: a branch, a tag, or a commit. Leave the new side empty to compare the working file.")
.font(.callout)
.foregroundStyle(.secondary)
- refRow(title: "Old side", text: $oldRef,
- placeholder: "branch, tag, or commit")
- refRow(title: "New side", text: $newRef,
- placeholder: "the working file")
+ refRow(title: String(localized: "Old side"), text: $oldRef,
+ placeholder: String(localized: "branch, tag, or commit"))
+ refRow(title: String(localized: "New side"), text: $newRef,
+ placeholder: String(localized: "the working file"))
HStack {
Spacer()
Button("Cancel") { dismiss() }
diff --git a/Sources/PullMark/Views/ContentView.swift b/Sources/PullMark/Views/ContentView.swift
index 7bc580c..fbf99c4 100644
--- a/Sources/PullMark/Views/ContentView.swift
+++ b/Sources/PullMark/Views/ContentView.swift
@@ -82,17 +82,17 @@ struct ContentView: View {
.sheet(isPresented: $updates.showReleaseNotes) {
// Version-less on purpose: the notes carry their versions as
// headings in the content, matching the post-update sheet.
- ReleaseNotesSheet(title: "What's New in PullMark",
+ ReleaseNotesSheet(title: String(localized: "What's New in PullMark"),
markdown: updates.availableNotes,
fullHistory: { await updates.releaseNotesHistory() })
}
.sheet(isPresented: $updates.showWhatsNew) {
- ReleaseNotesSheet(title: "What's New in PullMark",
+ ReleaseNotesSheet(title: String(localized: "What's New in PullMark"),
markdown: updates.whatsNewMarkdown,
fullHistory: { await updates.releaseNotesHistory() })
}
.sheet(isPresented: $updates.showHistory) {
- ReleaseNotesSheet(title: "PullMark Release Notes",
+ ReleaseNotesSheet(title: String(localized: "PullMark Release Notes"),
markdown: updates.historyMarkdown)
}
.alert("Something went wrong", isPresented: errorPresented) {
@@ -254,7 +254,7 @@ struct SidebarView: View {
CollapsibleSection(String(localized: "Open Files"), isExpanded: $filesExpanded,
headerActions: state.hasOpenFiles ? [
SectionHeaderAction(id: "close-all", symbol: "xmark.circle.fill",
- help: "Close All") { state.closeAllOpenFiles() }
+ help: String(localized: "Close All")) { state.closeAllOpenFiles() }
] : [], headerMenu: {
// Close All only — the menu mirrors the header's own
// affordances, and this header deliberately has no +
@@ -297,7 +297,7 @@ struct SidebarView: View {
CollapsibleSection(String(localized: "Locations"), isExpanded: $foldersExpanded,
headerActions: [
SectionHeaderAction(id: "add-folder", symbol: "plus",
- help: "Open Folder…") { state.openFolderPanel() }
+ help: String(localized: "Open Folder…")) { state.openFolderPanel() }
], headerMenu: {
AnyView(Group {
Button("Open Folder…") { state.openFolderPanel() }
@@ -321,7 +321,7 @@ struct SidebarView: View {
CollapsibleSection(String(localized: "Pull Requests"), isExpanded: $prsExpanded,
headerActions: [
SectionHeaderAction(id: "add-pr", symbol: "plus",
- help: "Open Pull Request…") { state.showAddPR = true }
+ help: String(localized: "Open Pull Request…")) { state.showAddPR = true }
], headerMenu: {
AnyView(Group {
Button("Open Pull Request…") { state.showAddPR = true }
@@ -515,7 +515,7 @@ private struct SidebarFileRow: View {
var body: some View {
let fonts = ChromeFonts(zoom: zoom)
- RemovableRow(help: isPreview ? "Dismiss Preview" : "Remove from Sidebar",
+ RemovableRow(help: isPreview ? String(localized: "Dismiss Preview") : String(localized: "Remove from Sidebar"),
remove: { isPreview ? state.dismissPreview()
: state.removeLocalFile(file) }) {
HStack(spacing: 4) {
@@ -550,7 +550,7 @@ private struct SidebarFileRow: View {
.font(fonts.caption)
.foregroundStyle(.secondary)
.labelStyle(.titleAndIcon)
- .help(count == 1 ? "1 margin note" : "\(count) margin notes")
+ .help(count == 1 ? String(localized: "1 margin note") : String(localized: "\(count) margin notes"))
.accessibilityLabel("\(count) margin note\(count == 1 ? "" : "s")")
}
}
@@ -588,7 +588,7 @@ private struct RemotePreviewRow: View {
var body: some View {
let fonts = ChromeFonts(zoom: zoom)
- RemovableRow(help: "Dismiss Preview",
+ RemovableRow(help: String(localized: "Dismiss Preview"),
remove: { state.dismissPreview() }) {
Label {
VStack(alignment: .leading, spacing: 1) {
@@ -875,8 +875,7 @@ private struct FolderRootGroup: View {
}
.tag(SidebarSelection.folder(folder.rootURL))
.help(folder.missing
- ? "Folder not found — last seen at "
- + PathAbbreviator.abbreviate(folder.rootURL.path)
+ ? String(localized: "Folder not found — last seen at \(PathAbbreviator.abbreviate(folder.rootURL.path))")
: PathAbbreviator.abbreviate(folder.rootURL.path))
.contextMenu {
Button("Remove from Sidebar") { state.removeFolder(folder.rootURL) }
@@ -1156,7 +1155,7 @@ private struct InboxRow: View {
.font(fonts.caption)
.foregroundStyle(.secondary)
.labelStyle(.titleAndIcon)
- .help(count == 1 ? "1 Markdown file" : "\(count) Markdown files")
+ .help(count == 1 ? String(localized: "1 Markdown file") : String(localized: "\(count) Markdown files"))
}
}
.contentShape(Rectangle())
@@ -1164,7 +1163,7 @@ private struct InboxRow: View {
// row still highlights and arrow keys merely select.
.simultaneousGesture(TapGesture().onEnded { state.openInboxItem(item) })
.help(state.inboxMDCount(item) == 0
- ? "No Markdown files in this pull request" : item.title)
+ ? String(localized: "No Markdown files in this pull request") : item.title)
.contextMenu {
Button("Open") { state.openInboxItem(item) }
Button("Reveal on GitHub") {
@@ -1190,7 +1189,7 @@ private struct RecentRow: View {
var body: some View {
let fonts = ChromeFonts(zoom: zoom)
- RemovableRow(help: "Remove from Recents",
+ RemovableRow(help: String(localized: "Remove from Recents"),
remove: { state.removeRecent(id: item.id) }) {
Label {
VStack(alignment: .leading, spacing: 1) {
@@ -1249,7 +1248,7 @@ private struct RecentRow: View {
switch item.kind {
case .file, .folder:
let path = item.path.map { PathAbbreviator.abbreviate($0) } ?? item.title
- return missing ? "File not found — last seen at \(path)" : path
+ return missing ? String(localized: "File not found — last seen at \(path)") : path
case .pr:
let status = item.prStatus.map { " — \($0.label)" } ?? ""
return "\(item.owner ?? "")/\(item.repo ?? "")#\(item.number ?? 0)\(status)"
@@ -1335,8 +1334,8 @@ private struct PRSidebarGroup: View {
.font(fonts.caption)
.monospacedDigit()
.foregroundStyle(.secondary)
- .help(count == 1 ? "1 changed Markdown file"
- : "\(count) changed Markdown files")
+ .help(count == 1 ? String(localized: "1 changed Markdown file")
+ : String(localized: "\(count) changed Markdown files"))
}
.tag(SidebarSelection.prOverview(session.id))
.help(status.label)
@@ -1409,8 +1408,8 @@ private struct PRNodeView: View {
.font(fonts.caption)
.foregroundStyle(.secondary)
.labelStyle(.titleAndIcon)
- .help(count == 1 ? "1 unresolved review comment"
- : "\(count) unresolved review comments")
+ .help(count == 1 ? String(localized: "1 unresolved review comment")
+ : String(localized: "\(count) unresolved review comments"))
.accessibilityLabel("\(count) unresolved review comment\(count == 1 ? "" : "s")")
}
}
diff --git a/Sources/PullMark/Views/KeyboardSettingsTab.swift b/Sources/PullMark/Views/KeyboardSettingsTab.swift
index 5bcb09e..73c73c2 100644
--- a/Sources/PullMark/Views/KeyboardSettingsTab.swift
+++ b/Sources/PullMark/Views/KeyboardSettingsTab.swift
@@ -175,8 +175,8 @@ struct KeyboardSettingsTab: View {
.padding(-2)
.opacity(recording == action ? 1 : 0))
.help(recording == action
- ? "Recording — press the new shortcut"
- : "Click, then press the new shortcut")
+ ? String(localized: "Recording — press the new shortcut")
+ : String(localized: "Click, then press the new shortcut"))
.accessibilityHidden(true) // the row carries the label
// Always present so the shortcut column stays flush; only
diff --git a/Sources/PullMark/Views/Lightbox.swift b/Sources/PullMark/Views/Lightbox.swift
index 4d59888..d76a9a3 100644
--- a/Sources/PullMark/Views/Lightbox.swift
+++ b/Sources/PullMark/Views/Lightbox.swift
@@ -476,20 +476,20 @@ private struct LightboxControls: View {
var body: some View {
HStack(spacing: 2) {
- barButton("minus.magnifyingglass", "Zoom out (-)") { model.zoomBy(0.8) }
+ barButton("minus.magnifyingglass", String(localized: "Zoom out (-)")) { model.zoomBy(0.8) }
percentControl
- barButton("plus.magnifyingglass", "Zoom in (+)") { model.zoomBy(1.25) }
- barButton("arrow.up.left.and.arrow.down.right", "Fit (0)") { model.fit() }
- barButton("1.magnifyingglass", "Actual size (1)") { model.setScale(1) }
+ barButton("plus.magnifyingglass", String(localized: "Zoom in (+)")) { model.zoomBy(1.25) }
+ barButton("arrow.up.left.and.arrow.down.right", String(localized: "Fit (0)")) { model.fit() }
+ barButton("1.magnifyingglass", String(localized: "Actual size (1)")) { model.setScale(1) }
divider
if content.kind == .diagram {
- barButton("square.and.arrow.down", "Save As…") {
+ barButton("square.and.arrow.down", String(localized: "Save As…")) {
popFormatMenu(from: saveAnchor.view,
svgTitle: "Save as SVG…", pngTitle: "Save as PNG…",
action: save)
}
.background(AnchorReader(box: saveAnchor))
- barButton("square.and.arrow.up", "Share") {
+ barButton("square.and.arrow.up", String(localized: "Share")) {
popFormatMenu(from: anchor.view,
svgTitle: "Share as SVG", pngTitle: "Share as PNG",
action: share)
diff --git a/Sources/PullMark/Views/LocalFileView.swift b/Sources/PullMark/Views/LocalFileView.swift
index 4801211..95dfcea 100644
--- a/Sources/PullMark/Views/LocalFileView.swift
+++ b/Sources/PullMark/Views/LocalFileView.swift
@@ -435,7 +435,7 @@ struct LocalFileView: View {
private var subtitle: String {
var parts = PathAbbreviator.abbreviate(file.url.deletingLastPathComponent().path)
if let currentBranch { parts += " · \(currentBranch)" }
- if editMode { parts += " · editing" }
+ if editMode { parts += " · " + String(localized: "editing") }
return parts
}
diff --git a/Sources/PullMark/Views/NavHistoryControl.swift b/Sources/PullMark/Views/NavHistoryControl.swift
index 4f4c8d9..878d4c1 100644
--- a/Sources/PullMark/Views/NavHistoryControl.swift
+++ b/Sources/PullMark/Views/NavHistoryControl.swift
@@ -16,14 +16,12 @@ struct NavHistoryControl: View {
state: state, direction: -1,
symbol: "chevron.backward", label: "Back",
enabled: state.canGoBack,
- help: "Show the previous document\(shortcuts.hint(.goBack))"
- + " — click and hold to see history")
+ help: String(localized: "Show the previous document\(shortcuts.hint(.goBack)) — click and hold to see history"))
NavHistoryButton(
state: state, direction: 1,
symbol: "chevron.forward", label: "Forward",
enabled: state.canGoForward,
- help: "Show the next document\(shortcuts.hint(.goForward))"
- + " — click and hold to see history")
+ help: String(localized: "Show the next document\(shortcuts.hint(.goForward)) — click and hold to see history"))
}
}
}
diff --git a/Sources/PullMark/Views/OpenQuicklyPalette.swift b/Sources/PullMark/Views/OpenQuicklyPalette.swift
index b4b13cd..e8600e4 100644
--- a/Sources/PullMark/Views/OpenQuicklyPalette.swift
+++ b/Sources/PullMark/Views/OpenQuicklyPalette.swift
@@ -106,7 +106,7 @@ struct OpenQuicklyPalette: View {
items.append(QuickItem(
id: "h:" + heading.slug,
title: heading.title,
- subtitle: "Heading · \(document.exportBaseName)",
+ subtitle: String(localized: "Heading · \(document.exportBaseName)"),
icon: "number",
action: { document.proxy.scrollToAnchor(heading.slug) }))
}
@@ -139,7 +139,7 @@ struct OpenQuicklyPalette: View {
items.append(QuickItem(
id: "pr:" + session.id,
title: refTitle,
- subtitle: "Pull request · \(session.details.title)",
+ subtitle: String(localized: "Pull request · \(session.details.title)"),
icon: "arrow.triangle.pull",
action: { state.selection = .prOverview(session.id) }))
for file in session.markdownFiles {
@@ -155,7 +155,7 @@ struct OpenQuicklyPalette: View {
items.append(QuickItem(
id: "in:" + item.id,
title: item.title,
- subtitle: "Review requested · \(item.ref.owner)/\(item.ref.repo)#\(item.ref.number)",
+ subtitle: String(localized: "Review requested · \(item.ref.owner)/\(item.ref.repo)#\(item.ref.number)"),
icon: "tray",
action: { state.openInboxItem(item) }))
}
@@ -163,7 +163,7 @@ struct OpenQuicklyPalette: View {
items.append(QuickItem(
id: "r:" + recent.id,
title: recent.title,
- subtitle: "Recent",
+ subtitle: String(localized: "Recent"),
icon: "clock",
action: { state.openRecent(recent) }))
}
@@ -210,15 +210,15 @@ struct OpenQuicklyPalette: View {
let url = URL(fileURLWithPath: path)
return [QuickItem(
id: "direct:path:" + path,
- title: "Open " + url.lastPathComponent,
+ title: String(localized: "Open \(url.lastPathComponent)"),
subtitle: PathAbbreviator.abbreviate(path),
icon: direct.isDirectory ? "folder" : "doc.text",
action: { state.add(url: url) })]
case .pullRequest(let ref):
return [QuickItem(
id: "direct:pr:\(ref.owner)/\(ref.repo)/\(ref.number)",
- title: "Open \(ref.owner)/\(ref.repo) #\(ref.number)",
- subtitle: "Pull request",
+ title: String(localized: "Open \(ref.owner)/\(ref.repo) #\(ref.number)"),
+ subtitle: String(localized: "Pull request"),
icon: "arrow.triangle.pull",
action: {
Task {
@@ -233,14 +233,14 @@ struct OpenQuicklyPalette: View {
case .remoteDoc(let link):
return [QuickItem(
id: "direct:remote:\(link.owner)/\(link.repo)@\(link.ref)/\(link.path)",
- title: "Open " + ((link.path as NSString).lastPathComponent),
- subtitle: "\(link.owner)/\(link.repo) @ \(link.ref) — from GitHub",
+ title: String(localized: "Open \((link.path as NSString).lastPathComponent)"),
+ subtitle: String(localized: "\(link.owner)/\(link.repo) @ \(link.ref) — from GitHub"),
icon: "book.closed",
action: { state.openGitHubDoc(link, pin: true) })]
case .remoteRepo(let owner, let repo, let ref):
return [QuickItem(
id: "direct:repo:\(owner)/\(repo)@\(ref ?? "")",
- title: "Browse \(owner)/\(repo)",
+ title: String(localized: "Browse \(owner)/\(repo)"),
subtitle: ref.map { "GitHub repo @ \($0)" } ?? "GitHub repo",
icon: "book.closed",
action: {
diff --git a/Sources/PullMark/Views/PRCockpitHeader.swift b/Sources/PullMark/Views/PRCockpitHeader.swift
index bc242e1..0cc9769 100644
--- a/Sources/PullMark/Views/PRCockpitHeader.swift
+++ b/Sources/PullMark/Views/PRCockpitHeader.swift
@@ -136,8 +136,9 @@ private struct ChecksCapsule: View {
case .awaitingApproval:
return String(localized: "A workflow is waiting for approval")
case .passed(let passed, let skipped):
- return skipped > 0 ? "\(passed) passed, \(skipped) skipped"
- : "\(passed) passed"
+ return skipped > 0
+ ? String(localized: "\(passed) passed, \(skipped) skipped")
+ : String(localized: "\(passed) passed")
}
}
@@ -250,7 +251,7 @@ private struct CheckRow: View {
.background(hovering && check.detailsUrl != nil
? AnyShapeStyle(.quaternary) : AnyShapeStyle(.clear),
in: RoundedRectangle(cornerRadius: 5))
- .help(check.detailsUrl == nil ? "" : "Open on GitHub")
+ .help(check.detailsUrl == nil ? "" : String(localized: "Open on GitHub"))
}
@State private var hovering = false
diff --git a/Sources/PullMark/Views/PRStatus.swift b/Sources/PullMark/Views/PRStatus.swift
index cb4df2d..433cf64 100644
--- a/Sources/PullMark/Views/PRStatus.swift
+++ b/Sources/PullMark/Views/PRStatus.swift
@@ -24,7 +24,12 @@ enum PRStatus: String, Codable, CaseIterable {
var label: String {
switch self {
case .draft: return String(localized: "Draft")
- case .open: return String(localized: "Open")
+ // Distinct key from the "Open" ACTION buttons: this is the PR
+ // state, an adjective — German needs "Offen" here but "Öffnen"
+ // there, and sharing one key made the chip conjugate wrong
+ // (same collision ja carried as 開く). English falls back to
+ // the value since there is no en.lproj.
+ case .open: return NSLocalizedString("pr-status-open", value: "Open", comment: "PR state chip: the pull request is open")
case .closed: return String(localized: "Closed")
case .merged: return String(localized: "Merged")
case .deleted: return String(localized: "Unavailable")
diff --git a/Sources/PullMark/Views/PRViews.swift b/Sources/PullMark/Views/PRViews.swift
index a2f87c9..ca63a66 100644
--- a/Sources/PullMark/Views/PRViews.swift
+++ b/Sources/PullMark/Views/PRViews.swift
@@ -267,8 +267,8 @@ struct PROverviewView: View {
if !prDiscussionEnabled, hiddenCommentCount(session) > 0 {
let count = hiddenCommentCount(session)
Text(count == 1
- ? "1 unresolved review comment on files not shown in PullMark"
- : "\(count) unresolved review comments on files not shown in PullMark")
+ ? String(localized: "1 unresolved review comment on files not shown in PullMark")
+ : String(localized: "\(count) unresolved review comments on files not shown in PullMark"))
.font(.callout)
.foregroundStyle(.secondary)
}
@@ -336,12 +336,27 @@ struct PRFileView: View {
case sourceDiff = "Source Diff"
case result = "Result"
var id: String { rawValue }
+ // Raw values are selection tokens (SurfaceToolbar round-trips
+ // them); display goes through the localized label.
+ var label: String {
+ switch self {
+ case .renderedDiff: return String(localized: "Rendered Diff")
+ case .sourceDiff: return String(localized: "Source Diff")
+ case .result: return String(localized: "Result")
+ }
+ }
}
enum DiffLayout: String, CaseIterable, Identifiable {
case inline = "Inline"
case split = "Side by Side"
var id: String { rawValue }
+ var label: String {
+ switch self {
+ case .inline: return String(localized: "Inline")
+ case .split: return String(localized: "Side by Side")
+ }
+ }
}
@State private var mode: Mode = .renderedDiff
@@ -424,7 +439,7 @@ struct PRFileView: View {
// A brand-new file renders inline regardless: split mode would show
// an all-hatched old column against the untinted document.
surface.layoutDisabledReason = file?.status == "added"
- ? "New files always render inline — there is no old side to compare"
+ ? String(localized: "New files always render inline — there is no old side to compare")
: nil
surface.blameAvailable = mode == .result
state.registerSurfaceToolbar(surface)
diff --git a/Sources/PullMark/Views/RemoteDocView.swift b/Sources/PullMark/Views/RemoteDocView.swift
index cea829c..8648978 100644
--- a/Sources/PullMark/Views/RemoteDocView.swift
+++ b/Sources/PullMark/Views/RemoteDocView.swift
@@ -203,12 +203,12 @@ struct RemoteDocView: View {
ref: session.displayRef,
path: path)
if RemoteDocLink.isCommitSHA(session.displayRef) {
- surface.reloadDisabledReason = "This document was opened at a "
- + "specific commit — its content can't change"
+ surface.reloadDisabledReason = String(localized:
+ "This document was opened at a specific commit — its content can't change")
}
}
surface.compareAvailable = !loading && loadError == nil
- surface.compareUnavailableReason = "The document hasn't finished loading"
+ surface.compareUnavailableReason = String(localized: "The document hasn't finished loading")
surface.popCompare = { popCompareMenu(from: $0) }
state.registerSurfaceToolbar(surface)
}
diff --git a/Sources/PullMark/Views/ReviewPopover.swift b/Sources/PullMark/Views/ReviewPopover.swift
index 4fdca8a..864357b 100644
--- a/Sources/PullMark/Views/ReviewPopover.swift
+++ b/Sources/PullMark/Views/ReviewPopover.swift
@@ -53,8 +53,10 @@ struct ReviewToolbarButton: View {
// so the popover arrow can point at the actual button.
.background(TrackedViewCapture { tracker.buttonView = $0 })
.help((count == 0
- ? "Review these changes — summary, verdict, and your pending comments"
- : "Finish your review — \(count) pending comment\(count == 1 ? "" : "s")")
+ ? String(localized: "Review these changes — summary, verdict, and your pending comments")
+ : count == 1
+ ? String(localized: "Finish your review — 1 pending comment")
+ : String(localized: "Finish your review — \(count) pending comments"))
+ shortcuts.hint(.reviewChanges))
}
}
@@ -371,8 +373,8 @@ struct ReviewPopover: View {
// VoiceOver hears which comment dies, not the glyph's name.
.accessibilityLabel("Discard comment, \(comment.path) \(comment.lineDescription)")
.help(comment.serverID != nil
- ? "Discard this comment from the pending review on GitHub"
- : "Discard this comment")
+ ? String(localized: "Discard this comment from the pending review on GitHub")
+ : String(localized: "Discard this comment"))
}
.padding(6)
.background(.quaternary.opacity(0.5), in: RoundedRectangle(cornerRadius: 6))
diff --git a/Sources/PullMark/Views/SettingsView.swift b/Sources/PullMark/Views/SettingsView.swift
index 1d45301..7b618dd 100644
--- a/Sources/PullMark/Views/SettingsView.swift
+++ b/Sources/PullMark/Views/SettingsView.swift
@@ -306,7 +306,7 @@ struct GeneralSettingsTab: View {
updates.detectUpdateMethodIfNeeded()
}
.sheet(isPresented: $showAvailableNotes) {
- ReleaseNotesSheet(title: "What's New in PullMark",
+ ReleaseNotesSheet(title: String(localized: "What's New in PullMark"),
markdown: updates.availableNotes)
}
}
diff --git a/Tests/PullMarkTests/DemoSessionTests.swift b/Tests/PullMarkTests/DemoSessionTests.swift
index 041e798..99b31fe 100644
--- a/Tests/PullMarkTests/DemoSessionTests.swift
+++ b/Tests/PullMarkTests/DemoSessionTests.swift
@@ -18,7 +18,11 @@ import Testing
@Test func demoDefaultsSuiteIsNotTheRealDomain() {
#expect(DemoMode.defaultsSuiteName != "app.pullmark.PullMark")
- #expect(DemoMode.defaultsSuiteName.hasSuffix(".demo"))
+ // Per-process since the parallel screenshot generator: shared
+ // demo suites let one instance's startup wipe reset another's
+ // live state (see DemoMode.defaultsSuiteName).
+ #expect(DemoMode.defaultsSuiteName.hasPrefix("app.pullmark.PullMark.demo."))
+ #expect(Int32(DemoMode.defaultsSuiteName.split(separator: ".").last ?? "") != nil)
}
// MARK: - Patch / document consistency
diff --git a/loc/_inventory.json b/loc/_inventory.json
index 5011e44..65ec4f5 100644
--- a/loc/_inventory.json
+++ b/loc/_inventory.json
@@ -16,8 +16,12 @@
"%@ words · %lld min": "Sources/PullMark/Views/PageAccessories.swift",
"%@ — previewing; double-click to keep it with its repo": "Sources/PullMark/Views/ContentView.swift",
"%@, but the push failed: %@": "Sources/PullMark/Views/CommitSheet.swift",
+ "%@/%@ @ %@ — from GitHub": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
+ "%lld Markdown files": "Sources/PullMark/Views/ContentView.swift",
"%lld Markdown files changed": "Sources/PullMark/Views/PRViews.swift",
+ "%lld changed Markdown files": "Sources/PullMark/Views/ContentView.swift",
"%lld files": "Sources/PullMark/Views/PRViews.swift",
+ "%lld margin notes": "Sources/PullMark/Views/ContentView.swift",
"%lld more reviewers": "Sources/PullMark/Views/PRCockpitHeader.swift",
"%lld more…": "Sources/PullMark/Views/SearchPalette.swift",
"%lld not yet on GitHub": "Sources/PullMark/Views/ReviewPopover.swift",
@@ -25,16 +29,27 @@
"%lld of %lld done": "Sources/PullMark/Views/PRCockpitHeader.swift",
"%lld of %lld failing": "Sources/PullMark/Views/PRCockpitHeader.swift",
"%lld other files not shown": "Sources/PullMark/Views/PRViews.swift",
+ "%lld passed": "Sources/PullMark/Views/PRCockpitHeader.swift",
+ "%lld passed, %lld skipped": "Sources/PullMark/Views/PRCockpitHeader.swift",
+ "%lld unresolved review comments": "Sources/PullMark/Views/ContentView.swift",
+ "%lld unresolved review comments on files not shown in PullMark": "Sources/PullMark/Views/PRViews.swift",
+ "1 Markdown file": "Sources/PullMark/Views/ContentView.swift",
"1 Markdown file changed": "Sources/PullMark/Views/PRViews.swift",
+ "1 changed Markdown file": "Sources/PullMark/Views/ContentView.swift",
"1 file": "Sources/PullMark/Views/PRViews.swift",
+ "1 margin note": "Sources/PullMark/Views/ContentView.swift",
"1 more reviewer": "Sources/PullMark/Views/PRCockpitHeader.swift",
"1 other file not shown": "Sources/PullMark/Views/PRViews.swift",
+ "1 unresolved review comment": "Sources/PullMark/Views/ContentView.swift",
+ "1 unresolved review comment on files not shown in PullMark": "Sources/PullMark/Views/PRViews.swift",
+ "A classic reading measure": "Sources/PullMark/Core/ContentWidth.swift",
"A clean margin, numbers on demand in Source": "Sources/PullMark/Views/SettingsView.swift",
"A workflow is waiting for approval": "Sources/PullMark/Views/PRCockpitHeader.swift",
"Abandon review": "Sources/PullMark/Views/ReviewPopover.swift",
"Abandon this review?": "Sources/PullMark/Views/ReviewPopover.swift",
"About PullMark": "Sources/PullMark/App/PullMarkApp.swift",
"Actual Size": "Sources/PullMark/App/PullMarkApp.swift",
+ "Actual size (1)": "Sources/PullMark/Views/Lightbox.swift",
"Add Margin Note": "Sources/PullMark/App/PullMarkApp.swift",
"Add a margin note on the block you're reading": "Sources/PullMark/Views/AppToolbar.swift",
"Added": "Sources/PullMark/Views/CommitSheet.swift",
@@ -48,14 +63,19 @@
"Anything Git can resolve works: a branch, a tag, or a commit. Leave the new side empty to compare the working file.": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Appearance": "Sources/PullMark/App/PullMarkApp.swift",
"Applies to the whole file, not a specific line": "Sources/PullMark/Views/PRViews.swift",
+ "Approve": "Sources/PullMark/Core/ReviewControl.swift",
+ "Approve merging these changes": "Sources/PullMark/Core/ReviewControl.swift",
"Approved": "Sources/PullMark/Views/PRCockpitHeader.swift",
+ "Ask for changes before this can merge": "Sources/PullMark/Core/ReviewControl.swift",
"Ask on first click": "Sources/PullMark/Views/SettingsView.swift",
"Awaiting review from %@": "Sources/PullMark/Views/PRCockpitHeader.swift",
"Back": "Sources/PullMark/App/PullMarkApp.swift",
"Blame": "Sources/PullMark/Views/PageAccessories.swift",
+ "Bookish serif headers on warm paper": "Sources/PullMark/Core/Theme.swift",
"Branch name": "Sources/PullMark/Views/CommitSheet.swift",
"Branches": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Branches and worktrees": "Sources/PullMark/Views/RemoteDocView.swift",
+ "Browse %@/%@": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
"Browse Repo Files": "Sources/PullMark/Views/ContentView.swift",
"Browse Repo Files…": "Sources/PullMark/Views/ContentView.swift",
"Built-In Keys": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
@@ -78,13 +98,14 @@
"Clear Recents": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel.": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
"Click to type a zoom level": "Sources/PullMark/Views/Lightbox.swift",
+ "Click, then press the new shortcut": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
"Clicking files in Locations:": "Sources/PullMark/Views/SettingsView.swift",
"Close": "Sources/PullMark/App/AppLinkRouter.swift",
"Close All": "Sources/PullMark/Views/ContentView.swift",
"Close All Files": "Sources/PullMark/App/PullMarkApp.swift",
"Closed": "Sources/PullMark/Views/PRStatus.swift",
"Command": "Sources/PullMark/Core/KeyboardShortcuts.swift",
- "Comment": "Sources/PullMark/Views/PRViews.swift",
+ "Comment": "Sources/PullMark/Core/ReviewControl.swift",
"Comment on %@": "Sources/PullMark/Views/PRViews.swift",
"Comment on File": "Sources/PullMark/Views/AppToolbar.swift",
"Comment on any local Markdown document the way you'd comment on a PR. Notes save into the file itself as `` comments — ordinary HTML comments that stay out of rendered Markdown, shown by PullMark as bubbles pinned to their spot, and written so agents can read and act on them. [How margin notes work](https://pullmark.app/docs/experimental/margin-notes/)": "Sources/PullMark/Views/SettingsView.swift",
@@ -101,7 +122,9 @@
"Committed 1 file on new branch “%@”": "Sources/PullMark/Views/CommitSheet.swift",
"Compare": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Compare Revisions": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
+ "Compare with a previous revision or branch": "Sources/PullMark/Views/AppToolbar.swift",
"Comparing ": "Sources/PullMark/Views/LocalFileView.swift",
+ "Comparing is unavailable here": "Sources/PullMark/Views/AppToolbar.swift",
"Comparing with %@": "Sources/PullMark/Views/LocalFileView.swift",
"Connected": "Sources/PullMark/Views/GitHubSetupSheet.swift",
"Connection status…": "Sources/PullMark/Views/PRViews.swift",
@@ -120,6 +143,7 @@
"Copy GitHub links as:": "Sources/PullMark/Views/SettingsView.swift",
"Copy Path": "Sources/PullMark/App/PullMarkApp.swift",
"Copy as Markdown": "Sources/PullMark/App/PullMarkApp.swift",
+ "Copy full SHA": "Sources/PullMark/Views/BlameHistorySheet.swift",
"Could not abandon the review: %@": "Sources/PullMark/App/AppState.swift",
"Could not create the PDF: %@": "Sources/PullMark/App/DocumentExport.swift",
"Could not delete the comment: %@": "Sources/PullMark/Views/ThreadCardActions.swift",
@@ -154,12 +178,15 @@
"Deleted": "Sources/PullMark/Views/CommitSheet.swift",
"Determining how this copy was installed…": "Sources/PullMark/Views/PageAccessories.swift",
"Discard the pending review and all its comments, on GitHub too": "Sources/PullMark/Views/ReviewPopover.swift",
+ "Discard this comment": "Sources/PullMark/Views/ReviewPopover.swift",
+ "Discard this comment from the pending review on GitHub": "Sources/PullMark/Views/ReviewPopover.swift",
"Dismiss": "Sources/PullMark/Views/PageAccessories.swift",
"Dismiss Preview": "Sources/PullMark/Views/ContentView.swift",
"Dismiss — PullMark won't ask again unless you make it the default": "Sources/PullMark/Views/PageAccessories.swift",
"Dismiss — this version won't be suggested again": "Sources/PullMark/Views/PageAccessories.swift",
"Don't ask again for this repository": "Sources/PullMark/Views/CommitSheet.swift",
"Done": "Sources/PullMark/Views/GitHubSetupSheet.swift",
+ "Done editing%@": "Sources/PullMark/Views/AppToolbar.swift",
"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder": "Sources/PullMark/App/PullMarkApp.swift",
"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder": "Sources/PullMark/Views/SettingsView.swift",
"Down Arrow": "Sources/PullMark/Core/KeyboardShortcuts.swift",
@@ -171,6 +198,7 @@
"Each block's starting source line, in the margin of rendered documents and diffs — hover a number for the block's full range. Rendered text wraps freely, so numbering is per block, not per visual line. The raw source view always shows its own line numbers.": "Sources/PullMark/Views/SettingsView.swift",
"Edit": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Edit Mode": "Sources/PullMark/App/PullMarkApp.swift",
+ "Edit this document%@ — then click any block": "Sources/PullMark/Views/AppToolbar.swift",
"Enable margin notes": "Sources/PullMark/Views/SettingsView.swift",
"End": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Escape": "Sources/PullMark/Core/KeyboardShortcuts.swift",
@@ -184,6 +212,7 @@
"Features land here before their design is settled. **Beta** features get a real compatibility effort between versions and are likely to graduate. [About experimental features](https://pullmark.app/docs/experimental/)": "Sources/PullMark/Views/SettingsView.swift",
"File": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"File Margin Note…": "Sources/PullMark/App/PullMarkApp.swift",
+ "File not found — last seen at %@": "Sources/PullMark/Views/ContentView.swift",
"Fill in a known branch, tag, or commit": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Find Next": "Sources/PullMark/App/PullMarkApp.swift",
"Find Previous": "Sources/PullMark/App/PullMarkApp.swift",
@@ -192,7 +221,9 @@
"Finish your review · %lld": "Sources/PullMark/Core/ReviewControl.swift",
"Finish your review — %lld pending comments": "Sources/PullMark/Core/ReviewControl.swift",
"Finish your review — 1 pending comment": "Sources/PullMark/Core/ReviewControl.swift",
+ "Fit (0)": "Sources/PullMark/Views/Lightbox.swift",
"Flip Diff Layout": "Sources/PullMark/Core/KeyboardShortcuts.swift",
+ "Folder not found — last seen at %@": "Sources/PullMark/Views/ContentView.swift",
"Forward": "Sources/PullMark/App/PullMarkApp.swift",
"Forward Delete": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Full Width": "Sources/PullMark/Core/ContentWidth.swift",
@@ -203,6 +234,7 @@
"GitHub CLI": "Sources/PullMark/GitHub/SystemGitCredentials.swift",
"GitHub Markdown links:": "Sources/PullMark/Views/SettingsView.swift",
"Go": "Sources/PullMark/App/PullMarkApp.swift",
+ "Heading · %@": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
"Hidden": "Sources/PullMark/Views/SettingsView.swift",
"Hide Hidden Files": "Sources/PullMark/App/PullMarkApp.swift",
"Hide Margin Notes": "Sources/PullMark/App/PullMarkApp.swift",
@@ -219,6 +251,10 @@
"In a pull request": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"In a pull request file": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"In a pull request file's Result view": "Sources/PullMark/Core/KeyboardShortcuts.swift",
+ "Inline": "Sources/PullMark/Views/PRViews.swift",
+ "Inline Diffs": "Sources/PullMark/App/PullMarkApp.swift",
+ "Inline or side-by-side rendered diff": "Sources/PullMark/Views/AppToolbar.swift",
+ "Inline or side-by-side rendered diff — for the Rendered Diff view": "Sources/PullMark/Views/AppToolbar.swift",
"Install pullmark Command…": "Sources/PullMark/Views/SettingsView.swift",
"Jump to another Markdown file in this pull request": "Sources/PullMark/Views/PRViews.swift",
"Jump to any file, heading, or pull request": "Sources/PullMark/App/PullMarkApp.swift",
@@ -232,6 +268,8 @@
"Large repo — not all files shown": "Sources/PullMark/Views/ContentView.swift",
"Last seen at %@. ": "Sources/PullMark/Views/ContentView.swift",
"Layout": "Sources/PullMark/Views/AppToolbar.swift",
+ "Leave a note about the whole document, at the top": "Sources/PullMark/App/PullMarkApp.swift",
+ "Leave a note on the block you're reading — it's saved into the file as a comment": "Sources/PullMark/App/PullMarkApp.swift",
"Left Arrow": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Light": "Sources/PullMark/Core/Appearance.swift",
"Light, Dark, or match the system — the window and every rendered page follow, and each theme brings its own light and dark looks.": "Sources/PullMark/Views/SettingsView.swift",
@@ -242,6 +280,7 @@
"Line numbers shown": "Sources/PullMark/Views/SettingsView.swift",
"Loading repo files…": "Sources/PullMark/Views/ContentView.swift",
"Locations": "Sources/PullMark/Views/ContentView.swift",
+ "Longer lines, more on screen": "Sources/PullMark/Core/ContentWidth.swift",
"Make Default Again": "Sources/PullMark/Views/PageAccessories.swift",
"Make PullMark the Default": "Sources/PullMark/Views/SettingsView.swift",
"Make the document bigger": "Sources/PullMark/Views/AppToolbar.swift",
@@ -259,13 +298,17 @@
"Merged": "Sources/PullMark/Views/PRStatus.swift",
"Mission Control": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Modified": "Sources/PullMark/Views/CommitSheet.swift",
+ "Monospace with a phosphor-green accent": "Sources/PullMark/Core/Theme.swift",
"Move PullMark to your Applications folder?": "Sources/PullMark/App/DMGGreeter.swift",
"Move to Applications": "Sources/PullMark/App/DMGGreeter.swift",
"Move to Trash": "Sources/PullMark/App/DMGGreeter.swift",
+ "New files always render inline — there is no old side to compare": "Sources/PullMark/Views/PRViews.swift",
+ "New side": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Next File": "Sources/PullMark/Views/PRViews.swift",
"Next Markdown file in this pull request": "Sources/PullMark/Views/PRViews.swift",
"Next match": "Sources/PullMark/Views/PageAccessories.swift",
"No Markdown files found in %@.": "Sources/PullMark/App/AppState.swift",
+ "No Markdown files in this pull request": "Sources/PullMark/Views/ContentView.swift",
"No changes to commit.": "Sources/PullMark/Views/CommitSheet.swift",
"No headings": "Sources/PullMark/Views/PageAccessories.swift",
"None": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
@@ -277,8 +320,11 @@
"Notes are written so agents can read and act on them. Paste the snippet into your agent's instructions file (CLAUDE.md, AGENTS.md, …) and \"address the margin notes in this file\" becomes a complete handoff.": "Sources/PullMark/Views/MarginNotesIntroSheet.swift",
"OK": "Sources/PullMark/Views/ContentView.swift",
"Off shows a quiet banner instead — the notes stay one click away": "Sources/PullMark/Views/SettingsView.swift",
+ "Old side": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Only requests that change Markdown": "Sources/PullMark/Views/SettingsView.swift",
"Open": "Sources/PullMark/Views/ContentView.swift",
+ "Open %@": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
+ "Open %@/%@ #%lld": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
"Open Branch Separately": "Sources/PullMark/Views/RemoteDocView.swift",
"Open File or Folder": "Sources/PullMark/Views/AppToolbar.swift",
"Open Files": "Sources/PullMark/Views/ContentView.swift",
@@ -299,6 +345,7 @@
"Open a GitHub pull request": "Sources/PullMark/Views/AppToolbar.swift",
"Open a Markdown file or a GitHub pull request": "Sources/PullMark/Views/ContentView.swift",
"Open a folder containing Markdown files": "Sources/PullMark/App/AppState.swift",
+ "Open commit on GitHub": "Sources/PullMark/Views/BlameHistorySheet.swift",
"Open files, folders, and worktrees from the shell — [about the pullmark command](https://pullmark.app/docs/cli/).": "Sources/PullMark/Views/SettingsView.swift",
"Open in Browser": "Sources/PullMark/Views/RemoteDocView.swift",
"Open in PullMark": "Sources/PullMark/Views/RemoteDocView.swift",
@@ -331,7 +378,10 @@
"Print…": "Sources/PullMark/App/PullMarkApp.swift",
"Private repositories, commenting, and reviewing are ready.": "Sources/PullMark/Views/GitHubSetupSheet.swift",
"Pull Requests": "Sources/PullMark/Core/KeyboardShortcuts.swift",
+ "Pull request": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
+ "Pull request · %@": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
"PullMark %@ is available.": "Sources/PullMark/Views/PageAccessories.swift",
+ "PullMark Release Notes": "Sources/PullMark/Views/ContentView.swift",
"PullMark Website": "Sources/PullMark/App/PullMarkApp.swift",
"PullMark borrows the GitHub credentials your own tools already have — the GitHub CLI or a git credential helper. It has no login of its own, stores nothing, and never sees a password.": "Sources/PullMark/Views/GitHubSetupSheet.swift",
"PullMark borrows the credentials your own tools already have — the GitHub CLI or a git credential helper. It has no login of its own, stores nothing, and never sees a password. [About GitHub access](https://pullmark.app/docs/troubleshooting/#github-access)": "Sources/PullMark/Views/SettingsView.swift",
@@ -348,14 +398,18 @@
"Re-read this file from disk": "Sources/PullMark/App/PullMarkApp.swift",
"Reaction state unavailable — try refreshing the PR.": "Sources/PullMark/Views/ThreadCardActions.swift",
"Reading": "Sources/PullMark/Views/SettingsView.swift",
+ "Recent": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
"Recents": "Sources/PullMark/Views/ContentView.swift",
+ "Recording — press the new shortcut": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
"Redo": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Refresh": "Sources/PullMark/Views/PageAccessories.swift",
"Refresh Folder": "Sources/PullMark/App/PullMarkApp.swift",
+ "Relaunch Now": "Sources/PullMark/Views/SettingsView.swift",
"Release Notes": "Sources/PullMark/App/PullMarkApp.swift",
"Release notes couldn't be loaded — they're also at github.com/jedijashwa/pullmark/releases.": "Sources/PullMark/App/PullMarkApp.swift",
"Reload": "Sources/PullMark/Views/AppToolbar.swift",
"Reload Document": "Sources/PullMark/App/PullMarkApp.swift",
+ "Reload this document": "Sources/PullMark/Views/AppToolbar.swift",
"Remember my selection": "Sources/PullMark/Views/RemoteDocView.swift",
"Remote Branches": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"Remove from Recents": "Sources/PullMark/Views/ContentView.swift",
@@ -369,6 +423,7 @@
"Report a Bug…": "Sources/PullMark/App/PullMarkApp.swift",
"Report an Issue…": "Sources/PullMark/App/AppLinkRouter.swift",
"Request a Feature…": "Sources/PullMark/App/PullMarkApp.swift",
+ "Request changes": "Sources/PullMark/Core/ReviewControl.swift",
"Required": "Sources/PullMark/Views/PRCockpitHeader.swift",
"Reset the zoom to 100%": "Sources/PullMark/App/PullMarkApp.swift",
"Restore Defaults": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
@@ -392,13 +447,16 @@
"Review changes": "Sources/PullMark/Core/ReviewControl.swift",
"Review comments couldn't be loaded — existing threads may be missing.": "Sources/PullMark/Views/PageAccessories.swift",
"Review requested from %@": "Sources/PullMark/Views/PRCockpitHeader.swift",
+ "Review requested · %@/%@#%lld": "Sources/PullMark/Views/OpenQuicklyPalette.swift",
"Review required": "Sources/PullMark/Views/PRCockpitHeader.swift",
"Review submitted.": "Sources/PullMark/Views/ReviewPopover.swift",
"Review summary (optional)": "Sources/PullMark/Views/ReviewPopover.swift",
+ "Review these changes — summary, verdict, and your pending comments": "Sources/PullMark/Views/ReviewPopover.swift",
"Review verdict": "Sources/PullMark/Views/ReviewPopover.swift",
"Reviewing": "Sources/PullMark/Views/SettingsView.swift",
"Right Arrow": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Runs “%@” and relaunches PullMark": "Sources/PullMark/Views/PageAccessories.swift",
+ "Save As…": "Sources/PullMark/Views/Lightbox.swift",
"Save the rendered document as a PDF": "Sources/PullMark/App/PullMarkApp.swift",
"Save the rendered document as a self-contained HTML file": "Sources/PullMark/App/PullMarkApp.swift",
"Saved as a pending review — visible only to you until you submit": "Sources/PullMark/Views/ReviewPopover.swift",
@@ -409,6 +467,9 @@
"Set Up…": "Sources/PullMark/Views/PRViews.swift",
"Set up the GitHub CLI": "Sources/PullMark/Views/GitHubSetupSheet.swift",
"Share": "Sources/PullMark/Views/AppToolbar.swift",
+ "Share a link to this document on GitHub": "Sources/PullMark/Views/AppToolbar.swift",
+ "Share a link to this pull request": "Sources/PullMark/Views/AppToolbar.swift",
+ "Share this document": "Sources/PullMark/Views/AppToolbar.swift",
"Shift": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Show": "Sources/PullMark/Views/SettingsView.swift",
"Show Alpha Features": "Sources/PullMark/Views/SettingsView.swift",
@@ -425,7 +486,9 @@
"Show review discussion on the PR overview": "Sources/PullMark/Views/SettingsView.swift",
"Show review requests in the sidebar": "Sources/PullMark/Views/SettingsView.swift",
"Show the next document": "Sources/PullMark/App/PullMarkApp.swift",
+ "Show the next document%@ — click and hold to see history": "Sources/PullMark/Views/NavHistoryControl.swift",
"Show the previous document": "Sources/PullMark/App/PullMarkApp.swift",
+ "Show the previous document%@ — click and hold to see history": "Sources/PullMark/Views/NavHistoryControl.swift",
"Show the raw Markdown behind the rendered document": "Sources/PullMark/Views/AppToolbar.swift",
"Show who last changed each block (git blame)": "Sources/PullMark/Views/PageAccessories.swift",
"Show/Hide Hidden Files": "Sources/PullMark/Core/KeyboardShortcuts.swift",
@@ -436,6 +499,8 @@
"Showing 500 of %lld changed files — Markdown files are preselected either way.": "Sources/PullMark/Views/CommitSheet.swift",
"Showing the first %lld Markdown files": "Sources/PullMark/Views/ContentView.swift",
"Shown": "Sources/PullMark/Views/SettingsView.swift",
+ "Side by Side": "Sources/PullMark/Views/PRViews.swift",
+ "Side-by-Side Diffs": "Sources/PullMark/App/PullMarkApp.swift",
"Sign in to GitHub": "Sources/PullMark/Views/GitHubSetupSheet.swift",
"Sign notes as:": "Sources/PullMark/Views/SettingsView.swift",
"Something went wrong": "Sources/PullMark/Views/ContentView.swift",
@@ -445,6 +510,7 @@
"Spotlight": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Stage and commit changes in this file's repository": "Sources/PullMark/App/PullMarkApp.swift",
"Standard": "Sources/PullMark/Core/ContentWidth.swift",
+ "Submit general feedback without explicit approval": "Sources/PullMark/Core/ReviewControl.swift",
"Submit review": "Sources/PullMark/Views/ReviewPopover.swift",
"Submit the review with the selected verdict (⌘↩)": "Sources/PullMark/Views/ReviewPopover.swift",
"Support PullMark ❤️": "Sources/PullMark/App/PullMarkApp.swift",
@@ -453,15 +519,18 @@
"System": "Sources/PullMark/Core/AppLanguage.swift",
"Tab": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Tags": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
- "Takes effect the next time PullMark opens.": "Sources/PullMark/Views/SettingsView.swift",
+ "Takes effect after PullMark relaunches.": "Sources/PullMark/Views/SettingsView.swift",
"Teach your agent": "Sources/PullMark/Views/SettingsView.swift",
"Tell your agent": "Sources/PullMark/Views/MarginNotesIntroSheet.swift",
"Temporarily show the raw Markdown behind the rendered document": "Sources/PullMark/App/PullMarkApp.swift",
+ "Text uses the whole window": "Sources/PullMark/Core/ContentWidth.swift",
"That link needs a different version of PullMark": "Sources/PullMark/App/AppLinkRouter.swift",
"The @name your notes carry — empty uses your GitHub login, or this Mac's account name when signed out": "Sources/PullMark/Views/SettingsView.swift",
"The GitHub CLI is installed but signed out. Run this in your terminal — it opens a browser to sign in:": "Sources/PullMark/Views/GitHubSetupSheet.swift",
"The PR session is no longer available — the draft could not be saved to disk.": "Sources/PullMark/Views/ThreadCardActions.swift",
+ "The classic look, exactly as on github.com": "Sources/PullMark/Core/Theme.swift",
"The comment will be removed from GitHub. Replies from others will stay.": "Sources/PullMark/Views/ThreadCardActions.swift",
+ "The document hasn't finished loading": "Sources/PullMark/Views/RemoteDocView.swift",
"The document's headings, in a sidebar": "Sources/PullMark/App/PullMarkApp.swift",
"The pull request overview (%@ #%lld)": "Sources/PullMark/Views/PRViews.swift",
"The pullmark command is installed": "Sources/PullMark/Views/SettingsView.swift",
@@ -469,12 +538,15 @@
"Themes restyle rendered Markdown and diffs, and follow the Light/Dark appearance. Drop .css files into the Themes folder to add your own — they apply on top of the GitHub look. Quick Look previews follow your theme too (custom themes fall back to their GitHub base there).": "Sources/PullMark/Views/SettingsView.swift",
"These keys are fixed and can't be changed.": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
"This comment is still syncing with GitHub — try discarding it again in a moment.": "Sources/PullMark/App/AppState.swift",
+ "This document was opened at a specific commit — its content can't change": "Sources/PullMark/Views/RemoteDocView.swift",
+ "This file has uncommitted changes — compare with a previous revision or branch": "Sources/PullMark/Views/AppToolbar.swift",
"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest": "Sources/PullMark/Views/ContentView.swift",
"This pull request was updated on GitHub.": "Sources/PullMark/Views/PageAccessories.swift",
"This repository has no GitHub remote.": "Sources/PullMark/Views/ContentView.swift",
"This version (%@) doesn't know %@ — it may point at a feature from a newer release, or one that has moved. Checking for updates usually resolves it.": "Sources/PullMark/App/AppLinkRouter.swift",
"Thread state unavailable — try refreshing the PR.": "Sources/PullMark/Views/ThreadCardActions.swift",
"Turn Off": "Sources/PullMark/Views/MarginNotesIntroSheet.swift",
+ "Turn on margin notes in Settings → Experimental": "Sources/PullMark/App/PullMarkApp.swift",
"Unavailable": "Sources/PullMark/Views/PRStatus.swift",
"Untracked": "Sources/PullMark/Views/CommitSheet.swift",
"Up Arrow": "Sources/PullMark/Core/KeyboardShortcuts.swift",
@@ -498,6 +570,7 @@
"What clicking a link to a Markdown file on GitHub does — hold ⌘ while clicking for the other behavior": "Sources/PullMark/Views/SettingsView.swift",
"What pressing space in Finder shows for Markdown files": "Sources/PullMark/Views/SettingsView.swift",
"What's New": "Sources/PullMark/Views/PageAccessories.swift",
+ "What's New in PullMark": "Sources/PullMark/Views/ContentView.swift",
"While the find bar is open": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"Whole file": "Sources/PullMark/GitHub/ReviewThreads.swift",
"Wide": "Sources/PullMark/Core/ContentWidth.swift",
@@ -510,7 +583,10 @@
"Your custom shortcuts will be removed. This can't be undone.": "Sources/PullMark/Views/KeyboardSettingsTab.swift",
"Zoom In": "Sources/PullMark/App/PullMarkApp.swift",
"Zoom Out": "Sources/PullMark/App/PullMarkApp.swift",
+ "Zoom in (+)": "Sources/PullMark/Views/Lightbox.swift",
+ "Zoom out (-)": "Sources/PullMark/Views/Lightbox.swift",
"and %lld more": "Sources/PullMark/Views/PRCockpitHeader.swift",
+ "branch, tag, or commit": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
"confirming sheets": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"cycling windows": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"dismissing sheets": "Sources/PullMark/Core/KeyboardShortcuts.swift",
@@ -521,6 +597,7 @@
"opened by %@": "Sources/PullMark/Views/PRViews.swift",
"the Help menu": "Sources/PullMark/Core/KeyboardShortcuts.swift",
"the app switcher": "Sources/PullMark/Core/KeyboardShortcuts.swift",
+ "the working file": "Sources/PullMark/Views/CompareRevisionsSheet.swift",
" · was {r}": "Sources/PullMark/Rendering/PageStrings.swift",
"(empty)": "Sources/PullMark/Rendering/PageStrings.swift",
"Add a margin note": "Sources/PullMark/Rendering/PageStrings.swift",
@@ -538,7 +615,6 @@
"Comment on old lines {a}–{b}": "Sources/PullMark/Rendering/PageStrings.swift",
"Comment on the pull request conversation": "Sources/PullMark/Rendering/PageStrings.swift",
"Conversation": "Sources/PullMark/Rendering/PageStrings.swift",
- "Copy full SHA": "Sources/PullMark/Rendering/PageStrings.swift",
"Couldn't load this image from GitHub · ": "Sources/PullMark/Rendering/PageStrings.swift",
"File comments": "Sources/PullMark/Rendering/PageStrings.swift",
"Front matter": "Sources/PullMark/Rendering/PageStrings.swift",
diff --git a/loc/de.lproj/Localizable.strings b/loc/de.lproj/Localizable.strings
index 280dbd5..b306690 100644
--- a/loc/de.lproj/Localizable.strings
+++ b/loc/de.lproj/Localizable.strings
@@ -1,8 +1,10 @@
// PullMark — German (de) app strings. Spec: docs/specs/app-i18n.md.
// Keys are the English source strings; see loc/_inventory.json.
// Register: du-form; macOS menu names per Apple (Ablage/Bearbeiten/
-// Darstellung/Gehe zu); sidebar section names (Open Files, Locations,
-// Recents) stay English because they are not localizable in the app.
+// Darstellung/Gehe zu); sidebar section names follow Finder's German
+// (Locations = Orte, Recents = Zuletzt benutzt), with Open Files as
+// Geöffnete Dateien — only Pull Requests stays English, as in German
+// developer usage.
" (none)" = " (ohne)";
"%lld Markdown files changed" = "%lld Markdown-Dateien geändert";
@@ -74,10 +76,10 @@
"Choose the file to compare with — it becomes the old side." = "Wähl die Datei zum Vergleichen — sie wird die alte Seite.";
"Choose which items the toolbar shows, and their order" = "Wähle, welche Elemente die Symbolleiste zeigt, und in welcher Reihenfolge";
"Clear Menu" = "Menü löschen";
-"Clear Recents" = "Recents leeren";
+"Clear Recents" = "„Zuletzt benutzt“ leeren";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "Klick ein Kürzel an oder wähl eine Zeile und drück Return, dann tipp die neuen Tasten. Löschen entfernt ein Kürzel, Escape bricht ab.";
"Click to type a zoom level" = "Klicken, um eine Zoomstufe einzutippen";
-"Clicking files in Locations:" = "Klick auf Dateien in Locations:";
+"Clicking files in Locations:" = "Klick auf Dateien in „Orte“:";
"Close" = "Schließen";
"Close All" = "Alle schließen";
"Close All Files" = "Alle Dateien schließen";
@@ -153,8 +155,8 @@
"Dismiss — this version won't be suggested again" = "Ausblenden — diese Version wird nicht wieder vorgeschlagen";
"Don't ask again for this repository" = "Für dieses Repository nicht mehr fragen";
"Done" = "Fertig";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Dotfiles und versteckte Ordner in Locations — wie ⇧⌘. im Finder";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Dotfiles und versteckte Ordner in Locations — ⇧⌘. schaltet das auch um, wie im Finder";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Dotfiles und versteckte Ordner in „Orte“ — wie ⇧⌘. im Finder";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Dotfiles und versteckte Ordner in „Orte“ — ⇧⌘. schaltet das auch um, wie im Finder";
"Down Arrow" = "Pfeil nach unten";
"Download" = "Herunterladen";
"Downloads the update, verifies its signature, and installs it in place" = "Lädt das Update, prüft seine Signatur und installiert es an Ort und Stelle";
@@ -201,7 +203,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "Blendet Review-Anfragen ohne Markdown-Dateien aus — PullMark hat dazu nichts zu zeigen";
"History" = "Historie";
"Home" = "Pos1";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Fahr über einen beliebigen Block für die Notizblase (markier vorher Text, um ihn zu zitieren), oder drück ⌥⌘M. Bearbeiten und Löschen geht an jeder Blase; eine Notiz zu löschen ist, wie sie aufgelöst wird. Open-Files-Zeilen zeigen einen Chip mit der Zahl, solange ein Dokument noch Notizen trägt, und Darstellung → Randnotizen ausblenden räumt die Seite fürs saubere Lesen frei.";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Fahr über einen beliebigen Block für die Notizblase (markier vorher Text, um ihn zu zitieren), oder drück ⌥⌘M. Bearbeiten und Löschen geht an jeder Blase; eine Notiz zu löschen ist, wie sie aufgelöst wird. Zeilen in „Geöffnete Dateien“ zeigen einen Chip mit der Zahl, solange ein Dokument noch Notizen trägt, und Darstellung → Randnotizen ausblenden räumt die Seite fürs saubere Lesen frei.";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "Wie weit Text sich strecken darf, bevor er umbricht. Standard hält das klassische, buchähnliche Lesemaß; Wide bringt mehr auf den Schirm und deckelt die Zeilenlänge trotzdem; Full Width gibt dem Dokument das ganze Fenster — praktisch im Vollbild. Gilt überall, sofort, und verträgt sich mit jedem Theme.";
"How wide the rendered text column runs" = "Wie breit die gerenderte Textspalte läuft";
"In a local document" = "In einem lokalen Dokument";
@@ -226,7 +228,7 @@
"Line %lld (old)" = "Zeile %lld (alt)";
"Line numbers" = "Zeilennummern";
"Loading repo files…" = "Repo-Dateien werden geladen…";
-"Locations" = "Locations";
+"Locations" = "Orte";
"Make Default Again" = "Wieder zum Standard machen";
"Make PullMark the Default" = "PullMark zum Standard machen";
"Make the document bigger" = "Das Dokument größer machen";
@@ -264,7 +266,7 @@
"Open" = "Öffnen";
"Open Branch Separately" = "Branch separat öffnen";
"Open File or Folder" = "Datei oder Ordner öffnen";
-"Open Files" = "Open Files";
+"Open Files" = "Geöffnete Dateien";
"Open File…" = "Datei öffnen…";
"Open Folder…" = "Ordner öffnen…";
"Open Fully" = "Ganz öffnen";
@@ -306,7 +308,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "Auf Commit %@ festgesetzt — die Spitze des Refs beim letzten Abruf dieser Session.";
"Posts immediately — file comments can't join a pending review." = "Wird sofort gesendet — Dateikommentare können nicht Teil eines ausstehenden Reviews sein.";
"Preview First" = "Erst Vorschau";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Erst Vorschau zeigt eine Datei mit einem Klick, ohne sie zu behalten — ein kursiver Eintrag (in Open Files oder unter seinem GitHub-Repository), den die nächste Vorschau ersetzt. Doppelklick auf eine Datei, oder fang einfach an zu tippen, und sie bleibt offen. Ganz öffnen behält jede Datei, die du anklickst.";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Erst Vorschau zeigt eine Datei mit einem Klick, ohne sie zu behalten — ein kursiver Eintrag (in „Geöffnete Dateien“ oder unter seinem GitHub-Repository), den die nächste Vorschau ersetzt. Doppelklick auf eine Datei, oder fang einfach an zu tippen, und sie bleibt offen. Ganz öffnen behält jede Datei, die du anklickst.";
"Previous File" = "Vorherige Datei";
"Previous Markdown file in this pull request" = "Vorherige Markdown-Datei in diesem Pull Request";
"Previous match" = "Vorheriger Treffer";
@@ -331,7 +333,7 @@
"Re-read this file from disk" = "Diese Datei neu von der Platte lesen";
"Reaction state unavailable — try refreshing the PR." = "Reaktionsstatus nicht verfügbar — aktualisier den PR.";
"Reading" = "Lesen";
-"Recents" = "Recents";
+"Recents" = "Zuletzt benutzt";
"Redo" = "Wiederholen";
"Refresh" = "Aktualisieren";
"Refresh Folder" = "Ordner aktualisieren";
@@ -341,7 +343,7 @@
"Reload Document" = "Dokument neu laden";
"Remember my selection" = "Meine Auswahl merken";
"Remote Branches" = "Remote-Branches";
-"Remove from Recents" = "Aus Recents entfernen";
+"Remove from Recents" = "Aus „Zuletzt benutzt“ entfernen";
"Remove from Sidebar" = "Aus der Seitenleiste entfernen";
"Remove the PullMark disk image?" = "Das PullMark-Disk-Image entfernen?";
"Rendered" = "Gerendert";
@@ -364,7 +366,7 @@
"Retry Upload" = "Upload erneut versuchen";
"Return" = "Return";
"Reveal in Finder" = "Im Finder zeigen";
-"Reveal in Location" = "In Location zeigen";
+"Reveal in Location" = "Im Ort zeigen";
"Reveal on GitHub" = "Auf GitHub zeigen";
"Reveal resolved review conversations in the Result view" = "Aufgelöste Review-Unterhaltungen in der Ergebnis-Ansicht zeigen";
"Revert Last Edit" = "Letzte Änderung zurücknehmen";
@@ -449,7 +451,7 @@
"Themes restyle rendered Markdown and diffs, and follow the Light/Dark appearance. Drop .css files into the Themes folder to add your own — they apply on top of the GitHub look. Quick Look previews follow your theme too (custom themes fall back to their GitHub base there)." = "Themes gestalten gerendertes Markdown und Diffs um und folgen der Hell/Dunkel-Einstellung. Leg .css-Dateien in den Themes-Ordner, um eigene hinzuzufügen — sie legen sich über den GitHub-Look. Quick-Look-Vorschauen folgen deinem Theme auch (eigene Themes fallen dort auf ihre GitHub-Basis zurück).";
"These keys are fixed and can't be changed." = "Diese Tasten sind fest und lassen sich nicht ändern.";
"This comment is still syncing with GitHub — try discarding it again in a moment." = "Dieser Kommentar synchronisiert noch mit GitHub — versuch es gleich noch einmal zu verwerfen.";
-"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "Dieser Ordner hat mehr Markdown-Dateien, als PullMark scannt — öffne einen Unterordner als eigene Location, um den Rest zu sehen";
+"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "Dieser Ordner hat mehr Markdown-Dateien, als PullMark scannt — öffne einen Unterordner als eigenen Ort, um den Rest zu sehen";
"This pull request was updated on GitHub." = "Dieser Pull Request wurde auf GitHub aktualisiert.";
"This repository has no GitHub remote." = "Dieses Repository hat kein GitHub-Remote.";
"This version (%@) doesn't know %@ — it may point at a feature from a newer release, or one that has moved. Checking for updates usually resolves it." = "Diese Version (%@) kennt %@ nicht — es zeigt vielleicht auf ein Feature aus einer neueren Version oder auf eines, das umgezogen ist. Nach Updates suchen löst das meistens.";
@@ -480,7 +482,7 @@
"With a folder selected" = "Mit einem ausgewählten Ordner";
"With a local file or folder in a GitHub repository selected" = "Mit einer lokalen Datei oder einem Ordner aus einem GitHub-Repository ausgewählt";
"With a local file or folder selected" = "Mit einer lokalen Datei oder einem Ordner ausgewählt";
-"With files in Open Files" = "Mit Dateien in Open Files";
+"With files in Open Files" = "Mit Dateien in „Geöffnete Dateien“";
"Works with private repos using your existing gh or git credentials." = "Funktioniert mit privaten Repos über deine vorhandenen gh- oder git-Zugangsdaten.";
"You're on %@." = "Du bist auf %@.";
"Your custom shortcuts will be removed. This can't be undone." = "Deine eigenen Kürzel werden entfernt. Das lässt sich nicht widerrufen.";
@@ -608,3 +610,80 @@
"Untracked" = "Nicht versioniert";
"git credential helper" = "git credential helper";
"Relaunch Now" = "Jetzt neu starten";
+"A classic reading measure" = "Ein klassisches Lesemaß";
+"Approve" = "Genehmigen";
+"Approve merging these changes" = "Das Zusammenführen dieser Änderungen genehmigen";
+"Ask for changes before this can merge" = "Änderungen verlangen, bevor das hier zusammengeführt werden kann";
+"Bookish serif headers on warm paper" = "Buchähnliche Serifen-Überschriften auf warmem Papier";
+"Inline" = "Inline";
+"Longer lines, more on screen" = "Längere Zeilen, mehr auf dem Schirm";
+"Monospace with a phosphor-green accent" = "Monospace mit einem Akzent in Phosphorgrün";
+"Request changes" = "Änderungen anfordern";
+"Side by Side" = "Nebeneinander";
+"Submit general feedback without explicit approval" = "Allgemeines Feedback ohne ausdrückliche Genehmigung abschicken";
+"Text uses the whole window" = "Der Text nutzt das ganze Fenster";
+"The classic look, exactly as on github.com" = "Der klassische Look, genau wie auf github.com";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ — von GitHub";
+"%lld Markdown files" = "%lld Markdown-Dateien";
+"%lld changed Markdown files" = "%lld geänderte Markdown-Dateien";
+"%lld margin notes" = "%lld Randnotizen";
+"%lld passed" = "%lld bestanden";
+"%lld passed, %lld skipped" = "%lld bestanden, %lld übersprungen";
+"%lld unresolved review comments" = "%lld unaufgelöste Review-Kommentare";
+"%lld unresolved review comments on files not shown in PullMark" = "%lld unaufgelöste Review-Kommentare an Dateien, die PullMark nicht zeigt";
+"1 Markdown file" = "1 Markdown-Datei";
+"1 changed Markdown file" = "1 geänderte Markdown-Datei";
+"1 margin note" = "1 Randnotiz";
+"1 unresolved review comment" = "1 unaufgelöster Review-Kommentar";
+"1 unresolved review comment on files not shown in PullMark" = "1 unaufgelöster Review-Kommentar an Dateien, die PullMark nicht zeigt";
+"Actual size (1)" = "Tatsächliche Größe (1)";
+"Browse %@/%@" = "%@/%@ durchstöbern";
+"Click, then press the new shortcut" = "Klicken, dann das neue Kürzel drücken";
+"Compare with a previous revision or branch" = "Mit einer früheren Revision oder einem Branch vergleichen";
+"Comparing is unavailable here" = "Vergleichen ist hier nicht verfügbar";
+"Discard this comment" = "Diesen Kommentar verwerfen";
+"Discard this comment from the pending review on GitHub" = "Diesen Kommentar aus dem ausstehenden Review auf GitHub verwerfen";
+"Done editing%@" = "Bearbeiten beenden%@";
+"Edit this document%@ — then click any block" = "Dieses Dokument bearbeiten%@ — dann einen beliebigen Block anklicken";
+"File not found — last seen at %@" = "Datei nicht gefunden — zuletzt gesehen unter %@";
+"Fit (0)" = "Einpassen (0)";
+"Folder not found — last seen at %@" = "Ordner nicht gefunden — zuletzt gesehen unter %@";
+"Heading · %@" = "Überschrift · %@";
+"Inline Diffs" = "Inline-Diffs";
+"Inline or side-by-side rendered diff" = "Gerendertes Diff inline oder nebeneinander";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "Gerendertes Diff inline oder nebeneinander — für die Ansicht „Gerendertes Diff“";
+"Leave a note about the whole document, at the top" = "Eine Notiz zum ganzen Dokument anbringen, ganz oben";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "Eine Notiz an dem Block anbringen, den du gerade liest — sie wird als -Kommentar in der Datei gesichert";
+"New files always render inline — there is no old side to compare" = "Neue Dateien werden immer inline gerendert — es gibt keine alte Seite zum Vergleichen";
+"New side" = "Neue Seite";
+"No Markdown files in this pull request" = "Keine Markdown-Dateien in diesem Pull Request";
+"Old side" = "Alte Seite";
+"Open %@" = "%@ öffnen";
+"Open %@/%@ #%lld" = "%@/%@ #%lld öffnen";
+"Open commit on GitHub" = "Commit auf GitHub öffnen";
+"Pull request" = "Pull Request";
+"Pull request · %@" = "Pull Request · %@";
+"PullMark Release Notes" = "PullMark Release Notes";
+"Recent" = "Zuletzt benutzt";
+"Recording — press the new shortcut" = "Aufnahme — drück das neue Kürzel";
+"Reload this document" = "Dieses Dokument neu laden";
+"Review requested · %@/%@#%lld" = "Review angefragt · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "Diese Änderungen reviewen — Zusammenfassung, Urteil und deine ausstehenden Kommentare";
+"Save As…" = "Sichern unter…";
+"Share a link to this document on GitHub" = "Einen Link zu diesem Dokument auf GitHub teilen";
+"Share a link to this pull request" = "Einen Link zu diesem Pull Request teilen";
+"Share this document" = "Dieses Dokument teilen";
+"Show the next document%@ — click and hold to see history" = "Das nächste Dokument zeigen%@ — klicken und halten für die Historie";
+"Show the previous document%@ — click and hold to see history" = "Das vorherige Dokument zeigen%@ — klicken und halten für die Historie";
+"Side-by-Side Diffs" = "Diffs nebeneinander";
+"The document hasn't finished loading" = "Das Dokument ist noch nicht fertig geladen";
+"This document was opened at a specific commit — its content can't change" = "Dieses Dokument wurde an einem bestimmten Commit geöffnet — sein Inhalt kann sich nicht ändern";
+"This file has uncommitted changes — compare with a previous revision or branch" = "Diese Datei hat nicht committete Änderungen — mit einer früheren Revision oder einem Branch vergleichen";
+"Turn on margin notes in Settings → Experimental" = "Randnotizen in Einstellungen → Experimentell einschalten";
+"What's New in PullMark" = "Neuerungen in PullMark";
+"Zoom in (+)" = "Einzoomen (+)";
+"Zoom out (-)" = "Auszoomen (-)";
+"branch, tag, or commit" = "Branch, Tag oder Commit";
+"the working file" = "die Arbeitsdatei";
+"editing" = "wird bearbeitet";
+"pr-status-open" = "Offen";
diff --git a/loc/es.lproj/Localizable.strings b/loc/es.lproj/Localizable.strings
index 110d348..35927cf 100644
--- a/loc/es.lproj/Localizable.strings
+++ b/loc/es.lproj/Localizable.strings
@@ -75,7 +75,7 @@
"Clear Recents" = "Vaciar recientes";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "Haz clic en un atajo, o selecciona una fila y pulsa Retorno, y luego teclea las teclas nuevas. Pulsa Eliminar para quitar un atajo, Esc para cancelar.";
"Click to type a zoom level" = "Haz clic para escribir un nivel de zoom";
-"Clicking files in Locations:" = "Al hacer clic en archivos de Locations:";
+"Clicking files in Locations:" = "Al hacer clic en archivos de Ubicaciones:";
"Close" = "Cerrar";
"Close All" = "Cerrar todo";
"Close All Files" = "Cerrar todos los archivos";
@@ -138,7 +138,7 @@
"Current branch" = "Rama actual";
"Custom themes" = "Temas personalizados";
"Customize Toolbar…" = "Personalizar barra de herramientas…";
-"Dark" = "Dark";
+"Dark" = "Oscuro";
"Default diff layout:" = "Disposición del diff por defecto:";
"Delete" = "Eliminar";
"Delete comment" = "Eliminar comentario";
@@ -151,8 +151,8 @@
"Dismiss — this version won't be suggested again" = "Descartar — esta versión no se volverá a sugerir";
"Don't ask again for this repository" = "No volver a preguntar para este repositorio";
"Done" = "Listo";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Los dotfiles y las carpetas ocultas en Locations — como ⇧⌘. en el Finder";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Los dotfiles y las carpetas ocultas en Locations — ⇧⌘. también lo alterna, como en el Finder";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Los dotfiles y las carpetas ocultas en Ubicaciones — como ⇧⌘. en el Finder";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Los dotfiles y las carpetas ocultas en Ubicaciones — ⇧⌘. también lo alterna, como en el Finder";
"Down Arrow" = "Flecha abajo";
"Download" = "Descargar";
"Downloads the update, verifies its signature, and installs it in place" = "Descarga la actualización, verifica su firma y la instala en el sitio";
@@ -199,7 +199,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "Oculta las solicitudes de revisión sin archivos Markdown — PullMark no tiene nada que mostrar de ellas";
"History" = "Historial";
"Home" = "Inicio";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Pasa el cursor por cualquier bloque para ver el globo de nota (selecciona texto antes para citarlo), o pulsa ⌥⌘M. Edita y borra desde cada globo; borrar una nota es la forma de darla por resuelta. Las filas de Open Files llevan un chip con la cuenta mientras el documento aún cargue notas, y Visualización → Ocultar las notas al margen despeja la página para leer limpio.";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Pasa el cursor por cualquier bloque para ver el globo de nota (selecciona texto antes para citarlo), o pulsa ⌥⌘M. Edita y borra desde cada globo; borrar una nota es la forma de darla por resuelta. Las filas de Archivos abiertos llevan un chip con la cuenta mientras el documento aún cargue notas, y Visualización → Ocultar las notas al margen despeja la página para leer limpio.";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "Hasta dónde puede estirarse el texto antes de saltar de línea. Standard mantiene la medida clásica de un libro; Wide encaja más en pantalla y sigue limitando el largo de línea; Full Width le da al documento toda la ventana — útil en pantalla completa. Se aplica en todas partes, en vivo, y se lleva bien con cualquier tema.";
"How wide the rendered text column runs" = "Cuánto se ensancha la columna de texto renderizado";
"In a local document" = "En un documento local";
@@ -218,13 +218,13 @@
"Last seen at %@. " = "Visto por última vez en %@. ";
"Layout" = "Disposición";
"Left Arrow" = "Flecha izquierda";
-"Light" = "Light";
+"Light" = "Claro";
"Light, Dark, or match the system — the window and every rendered page follow, and each theme brings its own light and dark looks." = "Light, Dark o seguir al sistema — la ventana y todas las páginas renderizadas lo siguen, y cada tema trae su propio aspecto claro y oscuro.";
"Line %lld (new)" = "Línea %lld (nueva)";
"Line %lld (old)" = "Línea %lld (antigua)";
"Line numbers" = "Números de línea";
"Loading repo files…" = "Cargando los archivos del repo…";
-"Locations" = "Locations";
+"Locations" = "Ubicaciones";
"Make Default Again" = "Volver a hacerlo la app por defecto";
"Make PullMark the Default" = "Hacer que PullMark sea la app por defecto";
"Make the document bigger" = "Amplía el documento";
@@ -262,7 +262,7 @@
"Open" = "Abrir";
"Open Branch Separately" = "Abrir la rama por separado";
"Open File or Folder" = "Abrir archivo o carpeta";
-"Open Files" = "Open Files";
+"Open Files" = "Archivos abiertos";
"Open File…" = "Abrir archivo…";
"Open Folder…" = "Abrir carpeta…";
"Open Fully" = "Abrir del todo";
@@ -304,7 +304,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "Fijado al commit %@ — la punta de la ref en el último fetch de esta sesión.";
"Posts immediately — file comments can't join a pending review." = "Se publica al instante — los comentarios de archivo no pueden unirse a una revisión pendiente.";
"Preview First" = "Vista previa primero";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Vista previa primero muestra un archivo con un clic sin conservarlo — una sola entrada en cursiva (en Open Files, o bajo su repositorio de GitHub) que la siguiente vista previa reemplaza. Haz doble clic en un archivo, o simplemente empieza a editarlo, para dejarlo abierto. Abrir del todo conserva cada archivo en el que haces clic.";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Vista previa primero muestra un archivo con un clic sin conservarlo — una sola entrada en cursiva (en Archivos abiertos, o bajo su repositorio de GitHub) que la siguiente vista previa reemplaza. Haz doble clic en un archivo, o simplemente empieza a editarlo, para dejarlo abierto. Abrir del todo conserva cada archivo en el que haces clic.";
"Previous File" = "Archivo anterior";
"Previous Markdown file in this pull request" = "Archivo Markdown anterior de este pull request";
"Previous match" = "Coincidencia anterior";
@@ -478,7 +478,7 @@
"With a folder selected" = "Con una carpeta seleccionada";
"With a local file or folder in a GitHub repository selected" = "Con un archivo o carpeta local de un repositorio de GitHub seleccionado";
"With a local file or folder selected" = "Con un archivo o carpeta local seleccionado";
-"With files in Open Files" = "Con archivos en Open Files";
+"With files in Open Files" = "Cuando hay archivos en Archivos abiertos";
"Works with private repos using your existing gh or git credentials." = "Funciona con repos privados usando tus credenciales de gh o git existentes.";
"You're on %@." = "Estás en %@.";
"Your custom shortcuts will be removed. This can't be undone." = "Se eliminarán tus atajos personalizados. Esto no se puede deshacer.";
@@ -606,3 +606,80 @@
"Untracked" = "Sin seguimiento";
"git credential helper" = "asistente de credenciales de git";
"Relaunch Now" = "Reiniciar ahora";
+"A classic reading measure" = "Una medida de lectura clásica";
+"Approve" = "Aprobar";
+"Approve merging these changes" = "Aprueba la fusión de estos cambios";
+"Ask for changes before this can merge" = "Pide cambios antes de que esto pueda fusionarse";
+"Bookish serif headers on warm paper" = "Títulos con serifa de libro, sobre papel cálido";
+"Inline" = "En línea";
+"Longer lines, more on screen" = "Líneas más largas, más en pantalla";
+"Monospace with a phosphor-green accent" = "Monoespaciada con un acento verde fósforo";
+"Request changes" = "Solicitar cambios";
+"Side by Side" = "Lado a lado";
+"Submit general feedback without explicit approval" = "Envía comentarios generales sin aprobación explícita";
+"Text uses the whole window" = "El texto ocupa toda la ventana";
+"The classic look, exactly as on github.com" = "El aspecto clásico, igual que en github.com";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ — desde GitHub";
+"%lld Markdown files" = "%lld archivos Markdown";
+"%lld changed Markdown files" = "%lld archivos Markdown modificados";
+"%lld margin notes" = "%lld notas al margen";
+"%lld passed" = "%lld superadas";
+"%lld passed, %lld skipped" = "%lld superadas, %lld omitidas";
+"%lld unresolved review comments" = "%lld comentarios de revisión sin resolver";
+"%lld unresolved review comments on files not shown in PullMark" = "%lld comentarios de revisión sin resolver en archivos que no se muestran en PullMark";
+"1 Markdown file" = "1 archivo Markdown";
+"1 changed Markdown file" = "1 archivo Markdown modificado";
+"1 margin note" = "1 nota al margen";
+"1 unresolved review comment" = "1 comentario de revisión sin resolver";
+"1 unresolved review comment on files not shown in PullMark" = "1 comentario de revisión sin resolver en archivos que no se muestran en PullMark";
+"Actual size (1)" = "Tamaño real (1)";
+"Browse %@/%@" = "Explorar %@/%@";
+"Click, then press the new shortcut" = "Haz clic y luego pulsa el atajo nuevo";
+"Compare with a previous revision or branch" = "Comparar con una revisión anterior o una rama";
+"Comparing is unavailable here" = "Aquí no se puede comparar";
+"Discard this comment" = "Descartar este comentario";
+"Discard this comment from the pending review on GitHub" = "Descartar este comentario de la revisión pendiente en GitHub";
+"Done editing%@" = "Terminar de editar%@";
+"Edit this document%@ — then click any block" = "Editar este documento%@ — luego haz clic en cualquier bloque";
+"File not found — last seen at %@" = "Archivo no encontrado — visto por última vez en %@";
+"Fit (0)" = "Ajustar (0)";
+"Folder not found — last seen at %@" = "Carpeta no encontrada — vista por última vez en %@";
+"Heading · %@" = "Encabezado · %@";
+"Inline Diffs" = "Diffs en línea";
+"Inline or side-by-side rendered diff" = "Diff renderizado en línea o lado a lado";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "Diff renderizado en línea o lado a lado — para la vista Diff renderizado";
+"Leave a note about the whole document, at the top" = "Deja una nota sobre todo el documento, arriba del todo";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "Deja una nota en el bloque que estás leyendo — se guarda en el archivo como un comentario ";
+"New files always render inline — there is no old side to compare" = "Los archivos nuevos siempre se renderizan en línea — no hay lado antiguo con el que comparar";
+"New side" = "Lado nuevo";
+"No Markdown files in this pull request" = "Sin archivos Markdown en este pull request";
+"Old side" = "Lado antiguo";
+"Open %@" = "Abrir %@";
+"Open %@/%@ #%lld" = "Abrir %@/%@ #%lld";
+"Open commit on GitHub" = "Abrir el commit en GitHub";
+"Pull request" = "Pull request";
+"Pull request · %@" = "Pull request · %@";
+"PullMark Release Notes" = "Notas de versión de PullMark";
+"Recent" = "Reciente";
+"Recording — press the new shortcut" = "Grabando — pulsa el atajo nuevo";
+"Reload this document" = "Recargar este documento";
+"Review requested · %@/%@#%lld" = "Revisión solicitada · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "Revisa estos cambios — resumen, veredicto y tus comentarios pendientes";
+"Save As…" = "Guardar como…";
+"Share a link to this document on GitHub" = "Compartir un enlace a este documento en GitHub";
+"Share a link to this pull request" = "Compartir un enlace a este pull request";
+"Share this document" = "Compartir este documento";
+"Show the next document%@ — click and hold to see history" = "Muestra el documento siguiente%@ — mantén pulsado para ver el historial";
+"Show the previous document%@ — click and hold to see history" = "Muestra el documento anterior%@ — mantén pulsado para ver el historial";
+"Side-by-Side Diffs" = "Diffs lado a lado";
+"The document hasn't finished loading" = "El documento aún no ha terminado de cargarse";
+"This document was opened at a specific commit — its content can't change" = "Este documento se abrió en un commit concreto — su contenido no puede cambiar";
+"This file has uncommitted changes — compare with a previous revision or branch" = "Este archivo tiene cambios sin commitear — compara con una revisión anterior o una rama";
+"Turn on margin notes in Settings → Experimental" = "Activa las notas al margen en Ajustes → Experimental";
+"What's New in PullMark" = "Novedades de PullMark";
+"Zoom in (+)" = "Acercar (+)";
+"Zoom out (-)" = "Alejar (-)";
+"branch, tag, or commit" = "rama, etiqueta o commit";
+"the working file" = "el archivo de trabajo";
+"editing" = "editando";
+"pr-status-open" = "Abierto";
diff --git a/loc/fr.lproj/Localizable.strings b/loc/fr.lproj/Localizable.strings
index 59df574..3085f45 100644
--- a/loc/fr.lproj/Localizable.strings
+++ b/loc/fr.lproj/Localizable.strings
@@ -71,7 +71,7 @@
"Clear Recents" = "Effacer les récents";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "Cliquez un raccourci, ou sélectionnez une ligne et appuyez sur Retour, puis tapez les nouvelles touches. Appuyez sur Supprimer pour retirer un raccourci, sur Échap pour annuler.";
"Click to type a zoom level" = "Cliquez pour saisir un niveau de zoom";
-"Clicking files in Locations:" = "Clic sur un fichier dans Locations :";
+"Clicking files in Locations:" = "Clic sur un fichier dans Emplacements :";
"Close" = "Fermer";
"Close All" = "Tout fermer";
"Close All Files" = "Fermer tous les fichiers";
@@ -147,8 +147,8 @@
"Dismiss — this version won't be suggested again" = "Ignorer — cette version ne sera plus proposée";
"Don't ask again for this repository" = "Ne plus demander pour ce dépôt";
"Done" = "Terminé";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Les dotfiles et dossiers cachés dans Locations — comme ⇧⌘. dans le Finder";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Les dotfiles et dossiers cachés dans Locations — ⇧⌘. bascule aussi ce réglage, comme dans le Finder";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Les dotfiles et dossiers cachés dans Emplacements — comme ⇧⌘. dans le Finder";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Les dotfiles et dossiers cachés dans Emplacements — ⇧⌘. bascule aussi ce réglage, comme dans le Finder";
"Down Arrow" = "Flèche bas";
"Download" = "Télécharger";
"Downloads the update, verifies its signature, and installs it in place" = "Télécharge la mise à jour, vérifie sa signature et l'installe sur place";
@@ -195,7 +195,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "Masque les demandes de révision sans fichier Markdown — PullMark n'a rien à y montrer";
"History" = "Historique";
"Home" = "Début";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Survolez n'importe quel bloc pour faire apparaître la bulle de note (sélectionnez du texte d'abord pour le citer), ou appuyez sur ⌥⌘M. Modifiez et supprimez depuis chaque bulle ; supprimer une note, c'est ainsi qu'on la résout. Les lignes d'Open Files portent une pastille de compte tant que le document contient encore des notes, et Présentation → Masquer les notes de marge nettoie la page pour lire au propre.";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Survolez n'importe quel bloc pour faire apparaître la bulle de note (sélectionnez du texte d'abord pour le citer), ou appuyez sur ⌥⌘M. Modifiez et supprimez depuis chaque bulle ; supprimer une note, c'est ainsi qu'on la résout. Les lignes de Fichiers ouverts portent une pastille de compte tant que le document contient encore des notes, et Présentation → Masquer les notes de marge nettoie la page pour lire au propre.";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "Jusqu'où le texte peut s'étirer avant de se replier. Standard garde la justification classique, façon livre ; Wide met plus de texte à l'écran tout en plafonnant la longueur de ligne ; Full Width donne toute la fenêtre au document — pratique en plein écran. S'applique partout, en direct, et se compose avec n'importe quel thème.";
"How wide the rendered text column runs" = "Largeur de la colonne de texte rendu";
"In a local document" = "Dans un document local";
@@ -220,7 +220,7 @@
"Line %lld (old)" = "Ligne %lld (ancienne)";
"Line numbers" = "Numéros de ligne";
"Loading repo files…" = "Chargement des fichiers du dépôt…";
-"Locations" = "Locations";
+"Locations" = "Emplacements";
"Make Default Again" = "Redéfinir par défaut";
"Make PullMark the Default" = "Définir PullMark par défaut";
"Make the document bigger" = "Agrandit le document";
@@ -258,7 +258,7 @@
"Open" = "Ouvrir";
"Open Branch Separately" = "Ouvrir la branche à part";
"Open File or Folder" = "Ouvrir un fichier ou un dossier";
-"Open Files" = "Open Files";
+"Open Files" = "Fichiers ouverts";
"Open File…" = "Ouvrir un fichier…";
"Open Folder…" = "Ouvrir un dossier…";
"Open Fully" = "Ouvrir complètement";
@@ -300,7 +300,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "Épinglé au commit %@ — la pointe de la référence lors de la dernière récupération de cette session.";
"Posts immediately — file comments can't join a pending review." = "Publie immédiatement — les commentaires de fichier ne peuvent pas rejoindre une révision en attente.";
"Preview First" = "Aperçu d'abord";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Aperçu d'abord montre un fichier d'un seul clic sans le conserver — une seule entrée en italique (dans Open Files, ou sous son dépôt GitHub) que le prochain aperçu remplace. Double-cliquez un fichier, ou commencez simplement à le modifier, pour le garder ouvert. Ouvrir complètement conserve chaque fichier que vous cliquez.";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Aperçu d'abord montre un fichier d'un seul clic sans le conserver — une seule entrée en italique (dans Fichiers ouverts, ou sous son dépôt GitHub) que le prochain aperçu remplace. Double-cliquez un fichier, ou commencez simplement à le modifier, pour le garder ouvert. Ouvrir complètement conserve chaque fichier que vous cliquez.";
"Previous File" = "Fichier précédent";
"Previous Markdown file in this pull request" = "Fichier Markdown précédent de cette pull request";
"Previous match" = "Occurrence précédente";
@@ -358,7 +358,7 @@
"Retry Upload" = "Réessayer l'envoi";
"Return" = "Retour";
"Reveal in Finder" = "Afficher dans le Finder";
-"Reveal in Location" = "Afficher dans Locations";
+"Reveal in Location" = "Afficher dans Emplacements";
"Reveal on GitHub" = "Afficher sur GitHub";
"Reveal resolved review conversations in the Result view" = "Affiche les conversations de révision résolues dans la vue Résultat";
"Revert Last Edit" = "Annuler la dernière modification";
@@ -443,7 +443,7 @@
"Themes restyle rendered Markdown and diffs, and follow the Light/Dark appearance. Drop .css files into the Themes folder to add your own — they apply on top of the GitHub look. Quick Look previews follow your theme too (custom themes fall back to their GitHub base there)." = "Les thèmes restylent le Markdown rendu et les diffs, et suivent l'apparence claire/sombre. Déposez des fichiers .css dans le dossier Themes pour ajouter les vôtres — ils s'appliquent par-dessus le look GitHub. Les aperçus Quick Look suivent aussi votre thème (les thèmes personnalisés y retombent sur leur base GitHub).";
"These keys are fixed and can't be changed." = "Ces touches sont fixes et ne peuvent pas être modifiées.";
"This comment is still syncing with GitHub — try discarding it again in a moment." = "Ce commentaire est encore en cours de synchronisation avec GitHub — réessayez de le supprimer dans un instant.";
-"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "Ce dossier contient plus de fichiers Markdown que PullMark n'en analyse — ouvrez un sous-dossier comme Location à part pour voir le reste";
+"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "Ce dossier contient plus de fichiers Markdown que PullMark n'en analyse — ouvrez un sous-dossier comme emplacement à part pour voir le reste";
"This pull request was updated on GitHub." = "Cette pull request a été mise à jour sur GitHub.";
"This repository has no GitHub remote." = "Ce dépôt n'a aucun remote GitHub.";
"This version (%@) doesn't know %@ — it may point at a feature from a newer release, or one that has moved. Checking for updates usually resolves it." = "Cette version (%@) ne connaît pas %@ — le lien pointe peut-être vers une fonctionnalité d'une version plus récente, ou vers une fonctionnalité qui a bougé. Rechercher les mises à jour suffit généralement à régler ça.";
@@ -474,7 +474,7 @@
"With a folder selected" = "Avec un dossier sélectionné";
"With a local file or folder in a GitHub repository selected" = "Avec un fichier ou dossier local d'un dépôt GitHub sélectionné";
"With a local file or folder selected" = "Avec un fichier ou dossier local sélectionné";
-"With files in Open Files" = "Avec des fichiers dans Open Files";
+"With files in Open Files" = "Avec des fichiers dans la section Fichiers ouverts";
"Works with private repos using your existing gh or git credentials." = "Fonctionne avec les dépôts privés grâce à vos identifiants gh ou git existants.";
"You're on %@." = "Vous êtes sur %@.";
"Your custom shortcuts will be removed. This can't be undone." = "Vos raccourcis personnalisés seront supprimés. Cette action est irréversible.";
@@ -602,3 +602,80 @@
"Untracked" = "Non suivi";
"git credential helper" = "assistant d'identification git";
"Relaunch Now" = "Relancer maintenant";
+"A classic reading measure" = "Une justification classique";
+"Approve" = "Approuver";
+"Approve merging these changes" = "Approuver la fusion de ces modifications";
+"Ask for changes before this can merge" = "Demander des modifications avant que cela puisse être fusionné";
+"Bookish serif headers on warm paper" = "Des titres à empattements façon livre, sur papier chaud";
+"Inline" = "En ligne";
+"Longer lines, more on screen" = "Des lignes plus longues, plus de texte à l'écran";
+"Monospace with a phosphor-green accent" = "Du monospace avec un accent vert phosphore";
+"Request changes" = "Demander des modifications";
+"Side by Side" = "Côte à côte";
+"Submit general feedback without explicit approval" = "Envoyer un retour général sans approbation explicite";
+"Text uses the whole window" = "Le texte occupe toute la fenêtre";
+"The classic look, exactly as on github.com" = "Le look classique, exactement comme sur github.com";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ — depuis GitHub";
+"%lld Markdown files" = "%lld fichiers Markdown";
+"%lld changed Markdown files" = "%lld fichiers Markdown modifiés";
+"%lld margin notes" = "%lld notes de marge";
+"%lld passed" = "%lld réussies";
+"%lld passed, %lld skipped" = "%lld réussies, %lld ignorées";
+"%lld unresolved review comments" = "%lld commentaires de révision non résolus";
+"%lld unresolved review comments on files not shown in PullMark" = "%lld commentaires de révision non résolus sur des fichiers que PullMark n'affiche pas";
+"1 Markdown file" = "1 fichier Markdown";
+"1 changed Markdown file" = "1 fichier Markdown modifié";
+"1 margin note" = "1 note de marge";
+"1 unresolved review comment" = "1 commentaire de révision non résolu";
+"1 unresolved review comment on files not shown in PullMark" = "1 commentaire de révision non résolu sur des fichiers que PullMark n'affiche pas";
+"Actual size (1)" = "Taille réelle (1)";
+"Browse %@/%@" = "Parcourir %@/%@";
+"Click, then press the new shortcut" = "Cliquez, puis appuyez sur le nouveau raccourci";
+"Compare with a previous revision or branch" = "Comparer avec une version antérieure ou une branche";
+"Comparing is unavailable here" = "La comparaison n'est pas disponible ici";
+"Discard this comment" = "Supprimer ce commentaire";
+"Discard this comment from the pending review on GitHub" = "Supprimer ce commentaire de la révision en attente sur GitHub";
+"Done editing%@" = "Terminer la modification%@";
+"Edit this document%@ — then click any block" = "Modifier ce document%@ — cliquez ensuite n'importe quel bloc";
+"File not found — last seen at %@" = "Fichier introuvable — vu pour la dernière fois à %@";
+"Fit (0)" = "Ajuster (0)";
+"Folder not found — last seen at %@" = "Dossier introuvable — vu pour la dernière fois à %@";
+"Heading · %@" = "Titre · %@";
+"Inline Diffs" = "Diffs en ligne";
+"Inline or side-by-side rendered diff" = "Diff rendu en ligne ou côte à côte";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "Diff rendu en ligne ou côte à côte — pour la vue Diff rendu";
+"Leave a note about the whole document, at the top" = "Laisser une note sur le document entier, tout en haut";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "Laisser une note sur le bloc que vous lisez — elle est enregistrée dans le fichier sous forme de commentaire ";
+"New files always render inline — there is no old side to compare" = "Les nouveaux fichiers sont toujours rendus en ligne — il n'y a pas de côté ancien à comparer";
+"New side" = "Côté nouveau";
+"No Markdown files in this pull request" = "Aucun fichier Markdown dans cette pull request";
+"Old side" = "Côté ancien";
+"Open %@" = "Ouvrir %@";
+"Open %@/%@ #%lld" = "Ouvrir %@/%@ #%lld";
+"Open commit on GitHub" = "Ouvrir le commit sur GitHub";
+"Pull request" = "Pull request";
+"Pull request · %@" = "Pull request · %@";
+"PullMark Release Notes" = "Notes de version de PullMark";
+"Recent" = "Récent";
+"Recording — press the new shortcut" = "Enregistrement — appuyez sur le nouveau raccourci";
+"Reload this document" = "Recharger ce document";
+"Review requested · %@/%@#%lld" = "Révision demandée · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "Réviser ces modifications — résumé, verdict et vos commentaires en attente";
+"Save As…" = "Enregistrer sous…";
+"Share a link to this document on GitHub" = "Partager un lien vers ce document sur GitHub";
+"Share a link to this pull request" = "Partager un lien vers cette pull request";
+"Share this document" = "Partager ce document";
+"Show the next document%@ — click and hold to see history" = "Affiche le document suivant%@ — cliquez et maintenez pour voir l'historique";
+"Show the previous document%@ — click and hold to see history" = "Affiche le document précédent%@ — cliquez et maintenez pour voir l'historique";
+"Side-by-Side Diffs" = "Diffs côte à côte";
+"The document hasn't finished loading" = "Le document n'a pas fini de charger";
+"This document was opened at a specific commit — its content can't change" = "Ce document a été ouvert à un commit précis — son contenu ne peut pas changer";
+"This file has uncommitted changes — compare with a previous revision or branch" = "Ce fichier a des modifications non committées — comparez avec une version antérieure ou une branche";
+"Turn on margin notes in Settings → Experimental" = "Activez les notes de marge dans Réglages → Expérimental";
+"What's New in PullMark" = "Nouveautés de PullMark";
+"Zoom in (+)" = "Zoom avant (+)";
+"Zoom out (-)" = "Zoom arrière (-)";
+"branch, tag, or commit" = "branche, tag ou commit";
+"the working file" = "le fichier de travail";
+"editing" = "édition";
+"pr-status-open" = "Ouverte";
diff --git a/loc/ja.lproj/Localizable.strings b/loc/ja.lproj/Localizable.strings
index 198a4ed..e44909f 100644
--- a/loc/ja.lproj/Localizable.strings
+++ b/loc/ja.lproj/Localizable.strings
@@ -74,7 +74,7 @@
"Clear Recents" = "最近使った項目を消去";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "ショートカットをクリックするか、行を選んで Return を押してから、新しいキーを入力します。Delete で割り当てを外し、Esc で取り消します。";
"Click to type a zoom level" = "クリックでズーム率を入力";
-"Clicking files in Locations:" = "Locations 内のファイルをクリックしたとき:";
+"Clicking files in Locations:" = "「場所」内のファイルをクリックしたとき:";
"Close" = "閉じる";
"Close All" = "すべて閉じる";
"Close All Files" = "すべてのファイルを閉じる";
@@ -150,8 +150,8 @@
"Dismiss — this version won't be suggested again" = "閉じる — このバージョンはもう案内されません";
"Don't ask again for this repository" = "このリポジトリではもう尋ねない";
"Done" = "完了";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Locations 内のドットファイルと隠しフォルダ — Finder の ⇧⌘. と同じです";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Locations 内のドットファイルと隠しフォルダ — Finder と同じく ⇧⌘. でも切り替えられます";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "「場所」内のドットファイルと隠しフォルダ — Finder の ⇧⌘. と同じです";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "「場所」内のドットファイルと隠しフォルダ — Finder と同じく ⇧⌘. でも切り替えられます";
"Down Arrow" = "下矢印";
"Download" = "ダウンロード";
"Downloads the update, verifies its signature, and installs it in place" = "アップデートをダウンロードし、署名を検証して、その場にインストールします";
@@ -198,7 +198,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "Markdown ファイルを含まないレビューリクエストを隠します — PullMark に見せられるものがないからです";
"History" = "履歴";
"Home" = "Home";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "どれかのブロックにホバーするとノートの吹き出しが出ます(先にテキストを選択すれば引用されます)。⌥⌘M でも構いません。編集と削除は各吹き出しから。ノートを削除することが、解決するということです。文書がまだノートを抱えているあいだ、Open Files の行には件数のチップが付き、表示 → マージンノートを非表示 はきれいに読むためにページを片づけます。";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "どれかのブロックにホバーするとノートの吹き出しが出ます(先にテキストを選択すれば引用されます)。⌥⌘M でも構いません。編集と削除は各吹き出しから。ノートを削除することが、解決するということです。文書がまだノートを抱えているあいだ、「開いているファイル」の行には件数のチップが付き、表示 → マージンノートを非表示 はきれいに読むためにページを片づけます。";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "折り返すまでにテキストがどこまで広がるか。Standard は本のような古典的な行長を保ち、Wide は行長に上限を残したまま画面に載る量を増やし、Full Width は文書にウィンドウ全体を与えます — フルスクリーンで重宝します。どこにでもその場で効き、どのテーマとも素直に組み合わさります。";
"How wide the rendered text column runs" = "レンダリングされたテキスト段の幅";
"In a local document" = "ローカル文書で";
@@ -223,7 +223,7 @@
"Line %lld (old)" = "%lld 行目 (旧)";
"Line numbers" = "行番号";
"Loading repo files…" = "リポジトリのファイルを読み込んでいます…";
-"Locations" = "Locations";
+"Locations" = "場所";
"Make Default Again" = "もう一度デフォルトにする";
"Make PullMark the Default" = "PullMark をデフォルトにする";
"Make the document bigger" = "文書を大きくします";
@@ -261,7 +261,7 @@
"Open" = "開く";
"Open Branch Separately" = "ブランチを別に開く";
"Open File or Folder" = "ファイルまたはフォルダを開く";
-"Open Files" = "Open Files";
+"Open Files" = "開いているファイル";
"Open File…" = "ファイルを開く…";
"Open Folder…" = "フォルダを開く…";
"Open Fully" = "完全に開く";
@@ -303,7 +303,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "コミット %@ に固定されています — このセッションが最後に取得した時点の ref の先端です。";
"Posts immediately — file comments can't join a pending review." = "すぐに投稿されます — ファイルへのコメントは保留中のレビューに加えられません。";
"Preview First" = "プレビュー優先";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "「プレビュー優先」は、クリック 1 回でファイルを見せながら、手元には残しません — 斜体の項目がひとつ(Open Files、またはその GitHub リポジトリの下に)現れ、次のプレビューがそれを置き換えます。ファイルをダブルクリックするか、編集を始めるだけで、開いたままになります。「完全に開く」は、クリックしたファイルをすべて残します。";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "「プレビュー優先」は、クリック 1 回でファイルを見せながら、手元には残しません — 斜体の項目がひとつ(「開いているファイル」、またはその GitHub リポジトリの下に)現れ、次のプレビューがそれを置き換えます。ファイルをダブルクリックするか、編集を始めるだけで、開いたままになります。「完全に開く」は、クリックしたファイルをすべて残します。";
"Previous File" = "前のファイル";
"Previous Markdown file in this pull request" = "このプルリクエストの前の Markdown ファイル";
"Previous match" = "前の一致";
@@ -477,7 +477,7 @@
"With a folder selected" = "フォルダを選んでいるとき";
"With a local file or folder in a GitHub repository selected" = "GitHub リポジトリ内のローカルのファイルかフォルダを選んでいるとき";
"With a local file or folder selected" = "ローカルのファイルかフォルダを選んでいるとき";
-"With files in Open Files" = "Open Files にファイルがあるとき";
+"With files in Open Files" = "「開いているファイル」にファイルがあるとき";
"Works with private repos using your existing gh or git credentials." = "既存の gh または git の認証情報を使って、プライベートリポジトリでも動きます。";
"You're on %@." = "現在 %@ にいます。";
"Your custom shortcuts will be removed. This can't be undone." = "カスタムのショートカットは削除されます。この操作は取り消せません。";
@@ -605,3 +605,80 @@
"Untracked" = "未追跡";
"git credential helper" = "git 認証ヘルパー";
"Relaunch Now" = "今すぐ再起動";
+"A classic reading measure" = "古典的な行長";
+"Approve" = "承認";
+"Approve merging these changes" = "これらの変更のマージを承認します";
+"Ask for changes before this can merge" = "マージできるようになる前に、変更を求めます";
+"Bookish serif headers on warm paper" = "本のようなセリフ体の見出しと、温かみのある紙";
+"Inline" = "インライン";
+"Longer lines, more on screen" = "行は長く、画面に載る量は多く";
+"Monospace with a phosphor-green accent" = "等幅フォントに、蛍光グリーンのアクセント";
+"Request changes" = "変更をリクエスト";
+"Side by Side" = "並べて表示";
+"Submit general feedback without explicit approval" = "明確な承認はせずに、全体的なフィードバックを送ります";
+"Text uses the whole window" = "テキストがウィンドウいっぱいに";
+"The classic look, exactly as on github.com" = "github.com そのままの、おなじみの見た目";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ — GitHub から";
+"%lld Markdown files" = "Markdown ファイル %lld 個";
+"%lld changed Markdown files" = "変更された Markdown ファイル %lld 個";
+"%lld margin notes" = "マージンノート %lld 件";
+"%lld passed" = "%lld 件成功";
+"%lld passed, %lld skipped" = "%lld 件成功、%lld 件スキップ";
+"%lld unresolved review comments" = "未解決のレビューコメント %lld 件";
+"%lld unresolved review comments on files not shown in PullMark" = "PullMark に表示されないファイルの未解決レビューコメント %lld 件";
+"1 Markdown file" = "Markdown ファイル 1 個";
+"1 changed Markdown file" = "変更された Markdown ファイル 1 個";
+"1 margin note" = "マージンノート 1 件";
+"1 unresolved review comment" = "未解決のレビューコメント 1 件";
+"1 unresolved review comment on files not shown in PullMark" = "PullMark に表示されないファイルの未解決レビューコメント 1 件";
+"Actual size (1)" = "実際のサイズ (1)";
+"Browse %@/%@" = "%@/%@ をブラウズ";
+"Click, then press the new shortcut" = "クリックしてから、新しいショートカットを押します";
+"Compare with a previous revision or branch" = "以前のリビジョンやブランチと比較します";
+"Comparing is unavailable here" = "ここでは比較できません";
+"Discard this comment" = "このコメントを破棄";
+"Discard this comment from the pending review on GitHub" = "GitHub 上の保留中のレビューから、このコメントを破棄します";
+"Done editing%@" = "編集を終了%@";
+"Edit this document%@ — then click any block" = "この文書を編集%@ — あとはどれかのブロックをクリック";
+"File not found — last seen at %@" = "ファイルが見つかりません — 最後に見かけたのは %@ でした";
+"Fit (0)" = "ウインドウに合わせる (0)";
+"Folder not found — last seen at %@" = "フォルダが見つかりません — 最後に見かけたのは %@ でした";
+"Heading · %@" = "見出し · %@";
+"Inline Diffs" = "差分をインライン表示";
+"Inline or side-by-side rendered diff" = "レンダリング差分をインラインまたは並べて表示";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "レンダリング差分をインラインまたは並べて表示 — 「レンダリング差分」ビュー用です";
+"Leave a note about the whole document, at the top" = "文書全体についてのノートを、いちばん上に残します";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "いま読んでいるブロックにノートを残します — コメントとしてファイルに保存されます";
+"New files always render inline — there is no old side to compare" = "新規ファイルはつねにインラインで表示されます — 比較する古い側がありません";
+"New side" = "新しい側";
+"No Markdown files in this pull request" = "このプルリクエストに Markdown ファイルはありません";
+"Old side" = "古い側";
+"Open %@" = "%@ を開く";
+"Open %@/%@ #%lld" = "%@/%@ #%lld を開く";
+"Open commit on GitHub" = "GitHub でコミットを開く";
+"Pull request" = "プルリクエスト";
+"Pull request · %@" = "プルリクエスト · %@";
+"PullMark Release Notes" = "PullMark のリリースノート";
+"Recent" = "最近使った項目";
+"Recording — press the new shortcut" = "記録中 — 新しいショートカットを押してください";
+"Reload this document" = "この文書を再読み込みします";
+"Review requested · %@/%@#%lld" = "レビュー依頼 · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "これらの変更をレビューします — 要約、判定、そしてあなたの保留中のコメント";
+"Save As…" = "別名で保存…";
+"Share a link to this document on GitHub" = "GitHub 上のこの文書へのリンクを共有します";
+"Share a link to this pull request" = "このプルリクエストへのリンクを共有します";
+"Share this document" = "この文書を共有します";
+"Show the next document%@ — click and hold to see history" = "次の文書を表示します%@ — クリックしたままにすると履歴が出ます";
+"Show the previous document%@ — click and hold to see history" = "前の文書を表示します%@ — クリックしたままにすると履歴が出ます";
+"Side-by-Side Diffs" = "差分を並べて表示";
+"The document hasn't finished loading" = "文書の読み込みがまだ終わっていません";
+"This document was opened at a specific commit — its content can't change" = "この文書は特定のコミットで開かれています — 内容が変わることはありません";
+"This file has uncommitted changes — compare with a previous revision or branch" = "このファイルには未コミットの変更があります — 以前のリビジョンやブランチと比較します";
+"Turn on margin notes in Settings → Experimental" = "設定 → 実験的機能 でマージンノートをオンにしてください";
+"What's New in PullMark" = "PullMark の新機能";
+"Zoom in (+)" = "拡大 (+)";
+"Zoom out (-)" = "縮小 (-)";
+"branch, tag, or commit" = "ブランチ、タグ、コミット";
+"the working file" = "作業中のファイル";
+"editing" = "編集中";
+"pr-status-open" = "オープン";
diff --git a/loc/nl.lproj/Localizable.strings b/loc/nl.lproj/Localizable.strings
index 9daaba1..7057121 100644
--- a/loc/nl.lproj/Localizable.strings
+++ b/loc/nl.lproj/Localizable.strings
@@ -74,7 +74,7 @@
"Clear Recents" = "Wis recente onderdelen";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "Klik op een sneltoets, of selecteer een rij en druk op Return, en typ de nieuwe toetsen. Druk op Verwijder om een sneltoets te wissen, op Escape om te annuleren.";
"Click to type a zoom level" = "Klik om een zoomniveau te typen";
-"Clicking files in Locations:" = "Klikken op bestanden in Locations:";
+"Clicking files in Locations:" = "Klikken op bestanden in Locaties:";
"Close" = "Sluit";
"Close All" = "Sluit alles";
"Close All Files" = "Sluit alle bestanden";
@@ -137,7 +137,7 @@
"Current branch" = "Huidige branch";
"Custom themes" = "Eigen thema's";
"Customize Toolbar…" = "Pas toolbar aan…";
-"Dark" = "Dark";
+"Dark" = "Donker";
"Default diff layout:" = "Standaard diff-indeling:";
"Delete" = "Verwijder";
"Delete comment" = "Verwijder comment";
@@ -150,8 +150,8 @@
"Dismiss — this version won't be suggested again" = "Negeer — deze versie wordt niet opnieuw voorgesteld";
"Don't ask again for this repository" = "Vraag dit niet meer voor deze repository";
"Done" = "Gereed";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Dotfiles en verborgen mappen in Locations — net als ⇧⌘. in de Finder";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Dotfiles en verborgen mappen in Locations — ⇧⌘. schakelt dit ook, net als in de Finder";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Dotfiles en verborgen mappen in Locaties — net als ⇧⌘. in de Finder";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Dotfiles en verborgen mappen in Locaties — ⇧⌘. schakelt dit ook, net als in de Finder";
"Down Arrow" = "Pijl omlaag";
"Download" = "Download";
"Downloads the update, verifies its signature, and installs it in place" = "Downloadt de update, controleert de handtekening en installeert hem ter plekke";
@@ -198,7 +198,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "Verbergt reviewverzoeken zonder Markdown-bestanden — PullMark heeft er niets voor te tonen";
"History" = "Geschiedenis";
"Home" = "Home";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Hover over een blok voor het notitieballonnetje (selecteer eerst tekst om die te citeren), of druk op ⌥⌘M. Bewerken en verwijderen doe je vanuit elk ballonnetje; een notitie verwijderen is hoe je haar afhandelt. Rijen in Open Files dragen een chip met het aantal notities zolang een document ze nog bevat, en Weergave → Verberg margin notes maakt de pagina leeg om schoon te lezen.";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Hover over een blok voor het notitieballonnetje (selecteer eerst tekst om die te citeren), of druk op ⌥⌘M. Bewerken en verwijderen doe je vanuit elk ballonnetje; een notitie verwijderen is hoe je haar afhandelt. Rijen in Geopende bestanden dragen een chip met het aantal notities zolang een document ze nog bevat, en Weergave → Verberg margin notes maakt de pagina leeg om schoon te lezen.";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "Hoe ver tekst mag uitlopen voordat hij afbreekt. Standard houdt de klassieke, boekachtige leesbreedte aan; Wide past meer op het scherm en begrenst de regellengte nog steeds; Full Width geeft het document het hele venster — handig in volledig scherm. Geldt overal, live, en combineert met elk thema.";
"How wide the rendered text column runs" = "Hoe breed de gerenderde tekstkolom loopt";
"In a local document" = "In een lokaal document";
@@ -217,13 +217,13 @@
"Last seen at %@. " = "Laatst gezien op %@. ";
"Layout" = "Indeling";
"Left Arrow" = "Pijl links";
-"Light" = "Light";
+"Light" = "Licht";
"Light, Dark, or match the system — the window and every rendered page follow, and each theme brings its own light and dark looks." = "Light, Dark of gelijk aan het systeem — het venster en elke gerenderde pagina volgen, en elk thema brengt zijn eigen lichte en donkere gedaante mee.";
"Line %lld (new)" = "Regel %lld (nieuw)";
"Line %lld (old)" = "Regel %lld (oud)";
"Line numbers" = "Regelnummers";
"Loading repo files…" = "Repo-bestanden laden…";
-"Locations" = "Locations";
+"Locations" = "Locaties";
"Make Default Again" = "Maak weer standaard";
"Make PullMark the Default" = "Maak PullMark de standaard";
"Make the document bigger" = "Maak het document groter";
@@ -261,7 +261,7 @@
"Open" = "Open";
"Open Branch Separately" = "Open branch apart";
"Open File or Folder" = "Open bestand of map";
-"Open Files" = "Open Files";
+"Open Files" = "Geopende bestanden";
"Open File…" = "Open bestand…";
"Open Folder…" = "Open map…";
"Open Fully" = "Volledig openen";
@@ -303,7 +303,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "Vastgezet op commit %@ — de tip van de ref bij de laatste fetch van deze sessie.";
"Posts immediately — file comments can't join a pending review." = "Wordt meteen geplaatst — bestandscomments kunnen niet mee in een pending review.";
"Preview First" = "Eerst previewen";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Eerst previewen toont een bestand met één klik zonder het vast te houden — één cursieve regel (in Open Files, of onder de bijbehorende GitHub-repo) die de volgende preview vervangt. Dubbelklik een bestand, of begin gewoon te typen, om het open te houden. Volledig openen houdt elk bestand dat je aanklikt.";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Eerst previewen toont een bestand met één klik zonder het vast te houden — één cursieve regel (in Geopende bestanden, of onder de bijbehorende GitHub-repo) die de volgende preview vervangt. Dubbelklik een bestand, of begin gewoon te typen, om het open te houden. Volledig openen houdt elk bestand dat je aanklikt.";
"Previous File" = "Vorig bestand";
"Previous Markdown file in this pull request" = "Vorig Markdown-bestand in deze pull request";
"Previous match" = "Vorig resultaat";
@@ -328,7 +328,7 @@
"Re-read this file from disk" = "Lees dit bestand opnieuw van schijf";
"Reaction state unavailable — try refreshing the PR." = "Reactiestatus niet beschikbaar — ververs de PR.";
"Reading" = "Lezen";
-"Recents" = "Recents";
+"Recents" = "Recent";
"Redo" = "Herhaal";
"Refresh" = "Ververs";
"Refresh Folder" = "Ververs map";
@@ -338,7 +338,7 @@
"Reload Document" = "Herlaad document";
"Remember my selection" = "Onthoud mijn keuze";
"Remote Branches" = "Remote branches";
-"Remove from Recents" = "Verwijder uit Recents";
+"Remove from Recents" = "Verwijder uit Recent";
"Remove from Sidebar" = "Verwijder uit zijbalk";
"Remove the PullMark disk image?" = "PullMark-schijfkopie verwijderen?";
"Rendered" = "Gerenderd";
@@ -361,7 +361,7 @@
"Retry Upload" = "Upload opnieuw";
"Return" = "Return";
"Reveal in Finder" = "Toon in Finder";
-"Reveal in Location" = "Toon in Locations";
+"Reveal in Location" = "Toon in Locaties";
"Reveal on GitHub" = "Toon op GitHub";
"Reveal resolved review conversations in the Result view" = "Toon opgeloste reviewconversaties in de Resultaat-weergave";
"Revert Last Edit" = "Draai laatste bewerking terug";
@@ -477,7 +477,7 @@
"With a folder selected" = "Met een map geselecteerd";
"With a local file or folder in a GitHub repository selected" = "Met een lokaal bestand of lokale map in een GitHub-repository geselecteerd";
"With a local file or folder selected" = "Met een lokaal bestand of lokale map geselecteerd";
-"With files in Open Files" = "Met bestanden in Open Files";
+"With files in Open Files" = "Met bestanden onder Geopende bestanden";
"Works with private repos using your existing gh or git credentials." = "Werkt met privérepo's via je bestaande gh- of git-credentials.";
"You're on %@." = "Je zit op %@.";
"Your custom shortcuts will be removed. This can't be undone." = "Je eigen sneltoetsen worden verwijderd. Dit kan niet ongedaan worden gemaakt.";
@@ -605,3 +605,80 @@
"Untracked" = "Niet gevolgd";
"git credential helper" = "git credential helper";
"Relaunch Now" = "Nu opnieuw starten";
+"A classic reading measure" = "Een klassieke leesbreedte";
+"Approve" = "Keur goed";
+"Approve merging these changes" = "Keur het mergen van deze wijzigingen goed";
+"Ask for changes before this can merge" = "Vraag wijzigingen voordat dit gemerged kan worden";
+"Bookish serif headers on warm paper" = "Boekachtige koppen met schreef, op warm papier";
+"Inline" = "Inline";
+"Longer lines, more on screen" = "Langere regels, meer op het scherm";
+"Monospace with a phosphor-green accent" = "Monospace met een fosforgroen accent";
+"Request changes" = "Vraag wijzigingen";
+"Side by Side" = "Naast elkaar";
+"Submit general feedback without explicit approval" = "Dien algemene feedback in zonder expliciete goedkeuring";
+"Text uses the whole window" = "Tekst gebruikt het hele venster";
+"The classic look, exactly as on github.com" = "De klassieke look, precies als op github.com";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ — van GitHub";
+"%lld Markdown files" = "%lld Markdown-bestanden";
+"%lld changed Markdown files" = "%lld gewijzigde Markdown-bestanden";
+"%lld margin notes" = "%lld margin notes";
+"%lld passed" = "%lld geslaagd";
+"%lld passed, %lld skipped" = "%lld geslaagd, %lld overgeslagen";
+"%lld unresolved review comments" = "%lld onopgeloste reviewcomments";
+"%lld unresolved review comments on files not shown in PullMark" = "%lld onopgeloste reviewcomments op bestanden die PullMark niet toont";
+"1 Markdown file" = "1 Markdown-bestand";
+"1 changed Markdown file" = "1 gewijzigd Markdown-bestand";
+"1 margin note" = "1 margin note";
+"1 unresolved review comment" = "1 onopgeloste reviewcomment";
+"1 unresolved review comment on files not shown in PullMark" = "1 onopgeloste reviewcomment op bestanden die PullMark niet toont";
+"Actual size (1)" = "Werkelijke grootte (1)";
+"Browse %@/%@" = "Blader door %@/%@";
+"Click, then press the new shortcut" = "Klik en druk dan op de nieuwe sneltoets";
+"Compare with a previous revision or branch" = "Vergelijk met een eerdere revisie of branch";
+"Comparing is unavailable here" = "Vergelijken is hier niet beschikbaar";
+"Discard this comment" = "Verwijder deze comment";
+"Discard this comment from the pending review on GitHub" = "Verwijder deze comment uit de pending review op GitHub";
+"Done editing%@" = "Klaar met bewerken%@";
+"Edit this document%@ — then click any block" = "Bewerk dit document%@ — klik daarna op een blok";
+"File not found — last seen at %@" = "Bestand niet gevonden — laatst gezien op %@";
+"Fit (0)" = "Passend (0)";
+"Folder not found — last seen at %@" = "Map niet gevonden — laatst gezien op %@";
+"Heading · %@" = "Kop · %@";
+"Inline Diffs" = "Inline diffs";
+"Inline or side-by-side rendered diff" = "Gerenderde diff inline of naast elkaar";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "Gerenderde diff inline of naast elkaar — voor de weergave Gerenderde diff";
+"Leave a note about the whole document, at the top" = "Laat een notitie over het hele document achter, bovenaan";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "Laat een notitie achter bij het blok dat je leest — die wordt in het bestand bewaard als een -comment";
+"New files always render inline — there is no old side to compare" = "Nieuwe bestanden worden altijd inline gerenderd — er is geen oude kant om mee te vergelijken";
+"New side" = "Nieuwe kant";
+"No Markdown files in this pull request" = "Geen Markdown-bestanden in deze pull request";
+"Old side" = "Oude kant";
+"Open %@" = "Open %@";
+"Open %@/%@ #%lld" = "Open %@/%@ #%lld";
+"Open commit on GitHub" = "Open commit op GitHub";
+"Pull request" = "Pull request";
+"Pull request · %@" = "Pull request · %@";
+"PullMark Release Notes" = "PullMark-releasenotes";
+"Recent" = "Recent";
+"Recording — press the new shortcut" = "Opnemen — druk op de nieuwe sneltoets";
+"Reload this document" = "Herlaad dit document";
+"Review requested · %@/%@#%lld" = "Review gevraagd · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "Review deze wijzigingen — samenvatting, oordeel en je pending comments";
+"Save As…" = "Bewaar als…";
+"Share a link to this document on GitHub" = "Deel een link naar dit document op GitHub";
+"Share a link to this pull request" = "Deel een link naar deze pull request";
+"Share this document" = "Deel dit document";
+"Show the next document%@ — click and hold to see history" = "Toon het volgende document%@ — klik en houd vast voor de geschiedenis";
+"Show the previous document%@ — click and hold to see history" = "Toon het vorige document%@ — klik en houd vast voor de geschiedenis";
+"Side-by-Side Diffs" = "Diffs naast elkaar";
+"The document hasn't finished loading" = "Het document is nog niet klaar met laden";
+"This document was opened at a specific commit — its content can't change" = "Dit document is op een specifieke commit geopend — de inhoud kan niet veranderen";
+"This file has uncommitted changes — compare with a previous revision or branch" = "Dit bestand heeft niet-gecommitte wijzigingen — vergelijk met een eerdere revisie of branch";
+"Turn on margin notes in Settings → Experimental" = "Zet margin notes aan in Instellingen → Experimenteel";
+"What's New in PullMark" = "Wat is er nieuw in PullMark";
+"Zoom in (+)" = "Zoom in (+)";
+"Zoom out (-)" = "Zoom uit (-)";
+"branch, tag, or commit" = "branch, tag of commit";
+"the working file" = "het werkbestand";
+"editing" = "wordt bewerkt";
+"pr-status-open" = "Open";
diff --git a/loc/pt-BR.lproj/Localizable.strings b/loc/pt-BR.lproj/Localizable.strings
index c53e5be..099e547 100644
--- a/loc/pt-BR.lproj/Localizable.strings
+++ b/loc/pt-BR.lproj/Localizable.strings
@@ -70,10 +70,10 @@
"Choose the file to compare with — it becomes the old side." = "Escolha o arquivo com que comparar — ele vira o lado antigo.";
"Choose which items the toolbar shows, and their order" = "Escolha quais itens a barra de ferramentas mostra, e em que ordem";
"Clear Menu" = "Limpar Menu";
-"Clear Recents" = "Limpar Recents";
+"Clear Recents" = "Limpar Recentes";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "Clique num atalho, ou selecione uma linha e pressione Return, depois digite as teclas novas. Pressione Apagar para remover um atalho, Escape para cancelar.";
"Click to type a zoom level" = "Clique para digitar um nível de zoom";
-"Clicking files in Locations:" = "Clicar em arquivos em Locations:";
+"Clicking files in Locations:" = "Clicar em arquivos em Localizações:";
"Close" = "Fechar";
"Close All" = "Fechar Tudo";
"Close All Files" = "Fechar Todos os Arquivos";
@@ -136,7 +136,7 @@
"Current branch" = "Branch atual";
"Custom themes" = "Temas personalizados";
"Customize Toolbar…" = "Personalizar Barra de Ferramentas…";
-"Dark" = "Dark";
+"Dark" = "Escuro";
"Default diff layout:" = "Layout padrão do diff:";
"Delete" = "Apagar";
"Delete comment" = "Apagar comentário";
@@ -149,8 +149,8 @@
"Dismiss — this version won't be suggested again" = "Dispensar — esta versão não será sugerida de novo";
"Don't ask again for this repository" = "Não perguntar de novo para este repositório";
"Done" = "Concluído";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Dotfiles e pastas ocultas em Locations — como ⇧⌘. no Finder";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Dotfiles e pastas ocultas em Locations — ⇧⌘. também alterna isto, como no Finder";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Dotfiles e pastas ocultas em Localizações — como ⇧⌘. no Finder";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Dotfiles e pastas ocultas em Localizações — ⇧⌘. também alterna isto, como no Finder";
"Down Arrow" = "Seta para baixo";
"Download" = "Baixar";
"Downloads the update, verifies its signature, and installs it in place" = "Baixa a atualização, verifica sua assinatura e a instala no lugar";
@@ -197,7 +197,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "Esconde solicitações de revisão sem arquivos Markdown — o PullMark não tem nada a mostrar para elas";
"History" = "Histórico";
"Home" = "Início";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Passe o mouse sobre qualquer bloco para ver o balão de nota (selecione texto antes para citá-lo), ou pressione ⌥⌘M. Edite e apague a partir de cada balão; apagar uma nota é como ela se resolve. As linhas de Open Files mostram um chip com a contagem enquanto um documento ainda carrega notas, e Visualizar → Ocultar Notas de Margem limpa a página para uma leitura sem nada.";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "Passe o mouse sobre qualquer bloco para ver o balão de nota (selecione texto antes para citá-lo), ou pressione ⌥⌘M. Edite e apague a partir de cada balão; apagar uma nota é como ela se resolve. As linhas de Arquivos Abertos mostram um chip com a contagem enquanto um documento ainda carrega notas, e Visualizar → Ocultar Notas de Margem limpa a página para uma leitura sem nada.";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "O quanto o texto pode se esticar antes de quebrar. Standard mantém a clássica medida de livro; Wide cabe mais na tela e ainda limita o comprimento da linha; Full Width dá ao documento a janela inteira — útil em tela cheia. Vale em todo lugar, ao vivo, e combina com qualquer tema.";
"How wide the rendered text column runs" = "A largura da coluna de texto renderizado";
"In a local document" = "Num documento local";
@@ -216,13 +216,13 @@
"Last seen at %@. " = "Visto pela última vez em %@. ";
"Layout" = "Layout";
"Left Arrow" = "Seta para a esquerda";
-"Light" = "Light";
+"Light" = "Claro";
"Light, Dark, or match the system — the window and every rendered page follow, and each theme brings its own light and dark looks." = "Light, Dark ou acompanhar o sistema — a janela e cada página renderizada seguem junto, e cada tema traz seus próprios visuais claro e escuro.";
"Line %lld (new)" = "Linha %lld (nova)";
"Line %lld (old)" = "Linha %lld (antiga)";
"Line numbers" = "Números de linha";
"Loading repo files…" = "Carregando os arquivos do repositório…";
-"Locations" = "Locations";
+"Locations" = "Localizações";
"Make Default Again" = "Tornar Padrão de Novo";
"Make PullMark the Default" = "Tornar o PullMark o Padrão";
"Make the document bigger" = "Aumentar o documento";
@@ -260,7 +260,7 @@
"Open" = "Abrir";
"Open Branch Separately" = "Abrir a Branch Separadamente";
"Open File or Folder" = "Abrir Arquivo ou Pasta";
-"Open Files" = "Open Files";
+"Open Files" = "Arquivos Abertos";
"Open File…" = "Abrir Arquivo…";
"Open Folder…" = "Abrir Pasta…";
"Open Fully" = "Abrir por Completo";
@@ -302,7 +302,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "Fixado no commit %@ — a ponta do ref no último fetch desta sessão.";
"Posts immediately — file comments can't join a pending review." = "Publica imediatamente — comentários de arquivo não entram numa revisão pendente.";
"Preview First" = "Prévia Primeiro";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Prévia Primeiro mostra um arquivo com um clique sem mantê-lo — uma única entrada em itálico (em Open Files, ou sob o repositório do GitHub dele) que a próxima prévia substitui. Dê um duplo clique num arquivo, ou simplesmente comece a editar, para mantê-lo aberto. Abrir por Completo mantém cada arquivo em que você clica.";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "Prévia Primeiro mostra um arquivo com um clique sem mantê-lo — uma única entrada em itálico (em Arquivos Abertos, ou sob o repositório do GitHub dele) que a próxima prévia substitui. Dê um duplo clique num arquivo, ou simplesmente comece a editar, para mantê-lo aberto. Abrir por Completo mantém cada arquivo em que você clica.";
"Previous File" = "Arquivo Anterior";
"Previous Markdown file in this pull request" = "Arquivo Markdown anterior neste pull request";
"Previous match" = "Ocorrência anterior";
@@ -327,7 +327,7 @@
"Re-read this file from disk" = "Reler este arquivo do disco";
"Reaction state unavailable — try refreshing the PR." = "Estado da reação indisponível — tente atualizar o PR.";
"Reading" = "Leitura";
-"Recents" = "Recents";
+"Recents" = "Recentes";
"Redo" = "Refazer";
"Refresh" = "Atualizar";
"Refresh Folder" = "Atualizar Pasta";
@@ -337,7 +337,7 @@
"Reload Document" = "Recarregar Documento";
"Remember my selection" = "Lembrar minha escolha";
"Remote Branches" = "Branches Remotas";
-"Remove from Recents" = "Remover de Recents";
+"Remove from Recents" = "Remover dos Recentes";
"Remove from Sidebar" = "Remover da Barra Lateral";
"Remove the PullMark disk image?" = "Remover a imagem de disco do PullMark?";
"Rendered" = "Renderizado";
@@ -360,7 +360,7 @@
"Retry Upload" = "Reenviar";
"Return" = "Return";
"Reveal in Finder" = "Mostrar no Finder";
-"Reveal in Location" = "Mostrar no Location";
+"Reveal in Location" = "Mostrar na Localização";
"Reveal on GitHub" = "Mostrar no GitHub";
"Reveal resolved review conversations in the Result view" = "Mostra as conversas de revisão resolvidas na visão Resultado";
"Revert Last Edit" = "Reverter Última Edição";
@@ -445,7 +445,7 @@
"Themes restyle rendered Markdown and diffs, and follow the Light/Dark appearance. Drop .css files into the Themes folder to add your own — they apply on top of the GitHub look. Quick Look previews follow your theme too (custom themes fall back to their GitHub base there)." = "Os temas reestilizam o Markdown e os diffs renderizados, e seguem a aparência Light/Dark. Solte arquivos .css na pasta Themes para adicionar os seus — eles se aplicam por cima do visual do GitHub. As prévias do Quick Look também seguem seu tema (temas personalizados voltam para a base GitHub por lá).";
"These keys are fixed and can't be changed." = "Estas teclas são fixas e não podem ser mudadas.";
"This comment is still syncing with GitHub — try discarding it again in a moment." = "Este comentário ainda está sincronizando com o GitHub — tente descartá-lo de novo daqui a pouco.";
-"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "Esta pasta tem mais arquivos Markdown do que o PullMark escaneia — abra uma subpasta como seu próprio Location para ver o resto";
+"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "Esta pasta tem mais arquivos Markdown do que o PullMark escaneia — abra uma subpasta como sua própria Localização para ver o resto";
"This pull request was updated on GitHub." = "Este pull request foi atualizado no GitHub.";
"This repository has no GitHub remote." = "Este repositório não tem um remote do GitHub.";
"This version (%@) doesn't know %@ — it may point at a feature from a newer release, or one that has moved. Checking for updates usually resolves it." = "Esta versão (%@) não conhece %@ — pode ser que aponte para um recurso de uma release mais nova, ou para um que mudou de lugar. Buscar atualizações costuma resolver.";
@@ -476,7 +476,7 @@
"With a folder selected" = "Com uma pasta selecionada";
"With a local file or folder in a GitHub repository selected" = "Com um arquivo ou pasta local num repositório do GitHub selecionado";
"With a local file or folder selected" = "Com um arquivo ou pasta local selecionado";
-"With files in Open Files" = "Com arquivos em Open Files";
+"With files in Open Files" = "Com arquivos em Arquivos Abertos";
"Works with private repos using your existing gh or git credentials." = "Funciona com repositórios privados usando suas credenciais existentes do gh ou do git.";
"You're on %@." = "Você está em %@.";
"Your custom shortcuts will be removed. This can't be undone." = "Seus atalhos personalizados serão removidos. Isto não pode ser desfeito.";
@@ -604,3 +604,80 @@
"Untracked" = "Não rastreado";
"git credential helper" = "auxiliar de credenciais do git";
"Relaunch Now" = "Reiniciar agora";
+"A classic reading measure" = "Uma medida de leitura clássica";
+"Approve" = "Aprovar";
+"Approve merging these changes" = "Aprovar a mesclagem destas alterações";
+"Ask for changes before this can merge" = "Pedir alterações antes que isso possa ser mesclado";
+"Bookish serif headers on warm paper" = "Títulos serifados de livro, sobre papel de tom quente";
+"Inline" = "Em linha";
+"Longer lines, more on screen" = "Linhas mais longas, mais na tela";
+"Monospace with a phosphor-green accent" = "Monoespaçada com um toque de verde fósforo";
+"Request changes" = "Solicitar alterações";
+"Side by Side" = "Lado a lado";
+"Submit general feedback without explicit approval" = "Enviar feedback geral sem aprovação explícita";
+"Text uses the whole window" = "O texto usa a janela inteira";
+"The classic look, exactly as on github.com" = "O visual clássico, exatamente como em github.com";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ — do GitHub";
+"%lld Markdown files" = "%lld arquivos Markdown";
+"%lld changed Markdown files" = "%lld arquivos Markdown alterados";
+"%lld margin notes" = "%lld notas de margem";
+"%lld passed" = "%lld bem-sucedidas";
+"%lld passed, %lld skipped" = "%lld bem-sucedidas, %lld puladas";
+"%lld unresolved review comments" = "%lld comentários de revisão não resolvidos";
+"%lld unresolved review comments on files not shown in PullMark" = "%lld comentários de revisão não resolvidos em arquivos que o PullMark não mostra";
+"1 Markdown file" = "1 arquivo Markdown";
+"1 changed Markdown file" = "1 arquivo Markdown alterado";
+"1 margin note" = "1 nota de margem";
+"1 unresolved review comment" = "1 comentário de revisão não resolvido";
+"1 unresolved review comment on files not shown in PullMark" = "1 comentário de revisão não resolvido em arquivos que o PullMark não mostra";
+"Actual size (1)" = "Tamanho real (1)";
+"Browse %@/%@" = "Navegar por %@/%@";
+"Click, then press the new shortcut" = "Clique e então pressione o atalho novo";
+"Compare with a previous revision or branch" = "Comparar com uma revisão anterior ou uma branch";
+"Comparing is unavailable here" = "Comparar não está disponível aqui";
+"Discard this comment" = "Descartar este comentário";
+"Discard this comment from the pending review on GitHub" = "Descartar este comentário da revisão pendente no GitHub";
+"Done editing%@" = "Concluir a edição%@";
+"Edit this document%@ — then click any block" = "Editar este documento%@ — depois clique em qualquer bloco";
+"File not found — last seen at %@" = "Arquivo não encontrado — visto pela última vez em %@";
+"Fit (0)" = "Ajustar (0)";
+"Folder not found — last seen at %@" = "Pasta não encontrada — vista pela última vez em %@";
+"Heading · %@" = "Título · %@";
+"Inline Diffs" = "Diffs em Linha";
+"Inline or side-by-side rendered diff" = "Diff renderizado em linha ou lado a lado";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "Diff renderizado em linha ou lado a lado — para a visão Diff Renderizado";
+"Leave a note about the whole document, at the top" = "Deixe uma nota sobre o documento inteiro, no topo";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "Deixe uma nota no bloco que você está lendo — ela é salva no arquivo como um comentário ";
+"New files always render inline — there is no old side to compare" = "Arquivos novos sempre são renderizados em linha — não há lado antigo para comparar";
+"New side" = "Lado novo";
+"No Markdown files in this pull request" = "Nenhum arquivo Markdown neste pull request";
+"Old side" = "Lado antigo";
+"Open %@" = "Abrir %@";
+"Open %@/%@ #%lld" = "Abrir %@/%@ #%lld";
+"Open commit on GitHub" = "Abrir o commit no GitHub";
+"Pull request" = "Pull request";
+"Pull request · %@" = "Pull request · %@";
+"PullMark Release Notes" = "Notas de Versão do PullMark";
+"Recent" = "Recente";
+"Recording — press the new shortcut" = "Gravando — pressione o atalho novo";
+"Reload this document" = "Recarregar este documento";
+"Review requested · %@/%@#%lld" = "Revisão solicitada · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "Revisar estas alterações — resumo, veredito e seus comentários pendentes";
+"Save As…" = "Salvar Como…";
+"Share a link to this document on GitHub" = "Compartilhar um link para este documento no GitHub";
+"Share a link to this pull request" = "Compartilhar um link para este pull request";
+"Share this document" = "Compartilhar este documento";
+"Show the next document%@ — click and hold to see history" = "Mostrar o próximo documento%@ — clique e segure para ver o histórico";
+"Show the previous document%@ — click and hold to see history" = "Mostrar o documento anterior%@ — clique e segure para ver o histórico";
+"Side-by-Side Diffs" = "Diffs Lado a Lado";
+"The document hasn't finished loading" = "O documento ainda não terminou de carregar";
+"This document was opened at a specific commit — its content can't change" = "Este documento foi aberto num commit específico — seu conteúdo não pode mudar";
+"This file has uncommitted changes — compare with a previous revision or branch" = "Este arquivo tem alterações não commitadas — compare com uma revisão anterior ou uma branch";
+"Turn on margin notes in Settings → Experimental" = "Ative as notas de margem em Ajustes → Experimental";
+"What's New in PullMark" = "Novidades do PullMark";
+"Zoom in (+)" = "Mais zoom (+)";
+"Zoom out (-)" = "Menos zoom (-)";
+"branch, tag, or commit" = "branch, tag ou commit";
+"the working file" = "o arquivo de trabalho";
+"editing" = "editando";
+"pr-status-open" = "Aberto";
diff --git a/loc/zh-Hans.lproj/Localizable.strings b/loc/zh-Hans.lproj/Localizable.strings
index fdcee43..b3f4fa5 100644
--- a/loc/zh-Hans.lproj/Localizable.strings
+++ b/loc/zh-Hans.lproj/Localizable.strings
@@ -74,7 +74,7 @@
"Clear Recents" = "清除最近使用";
"Click a shortcut, or select a row and press Return, then type the new keys. Press Delete to remove a shortcut, Esc to cancel." = "点击某条快捷键,或选中一行按 Return,然后按下新的按键。按删除键可移除快捷键,按 Escape 取消。";
"Click to type a zoom level" = "点击可输入缩放比例";
-"Clicking files in Locations:" = "点击 Locations 中的文件:";
+"Clicking files in Locations:" = "点击“位置”中的文件:";
"Close" = "关闭";
"Close All" = "全部关闭";
"Close All Files" = "关闭所有文件";
@@ -150,8 +150,8 @@
"Dismiss — this version won't be suggested again" = "忽略——不会再推荐这个版本";
"Don't ask again for this repository" = "不再为此仓库询问";
"Done" = "完成";
-"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "Locations 中的点文件和隐藏文件夹——与访达里的 ⇧⌘. 相同";
-"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "Locations 中的点文件和隐藏文件夹——⇧⌘. 同样可以切换,和访达一样";
+"Dotfiles and hidden folders in Locations — like ⇧⌘. in Finder" = "“位置”中的点文件和隐藏文件夹——与访达里的 ⇧⌘. 相同";
+"Dotfiles and hidden folders in Locations — ⇧⌘. toggles this too, like Finder" = "“位置”中的点文件和隐藏文件夹——⇧⌘. 同样可以切换,和访达一样";
"Down Arrow" = "下箭头";
"Download" = "下载";
"Downloads the update, verifies its signature, and installs it in place" = "下载更新、校验签名,并就地安装";
@@ -198,7 +198,7 @@
"Hide review requests with no Markdown files — PullMark has nothing to show for them" = "隐藏不含 Markdown 文件的审查请求——PullMark 对它们无可展示";
"History" = "历史";
"Home" = "Home";
-"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "悬停任意区块即可看到批注气泡(先选中文字即可引用它),也可以按 ⌥⌘M。在每个气泡上编辑和删除;删除一条批注就是解决它。文档还带着批注时,Open Files 中的行会显示一枚计数标签;想清净阅读时,用“显示”菜单里的 隐藏页边批注 清屏。";
+"Hover any block for the note bubble (select text first to quote it), or press ⌥⌘M. Edit and delete from each bubble; deleting a note is how it's resolved. Open Files rows show a count chip while a document still carries notes, and View → Hide Margin Notes clears the page for clean reading." = "悬停任意区块即可看到批注气泡(先选中文字即可引用它),也可以按 ⌥⌘M。在每个气泡上编辑和删除;删除一条批注就是解决它。文档还带着批注时,“打开的文件”中的行会显示一枚计数标签;想清净阅读时,用“显示”菜单里的 隐藏页边批注 清屏。";
"How far text may stretch before it wraps. Standard keeps the classic book-like measure; Wide fits more on screen and still caps the line length; Full Width gives the document the whole window — handy in full screen. Applies everywhere, live, and plays with any theme." = "文字在折行前可以伸展多远。Standard 保持经典的书本式行长;Wide 在屏幕上容纳更多内容,同时仍为行长设上限;Full Width 把整个窗口都交给文档——全屏时很好用。处处生效、即时生效,也与任何主题相处融洽。";
"How wide the rendered text column runs" = "渲染文本栏的宽度";
"In a local document" = "在本地文档中";
@@ -223,7 +223,7 @@
"Line %lld (old)" = "第 %lld 行(旧)";
"Line numbers" = "行号";
"Loading repo files…" = "正在载入仓库文件…";
-"Locations" = "Locations";
+"Locations" = "位置";
"Make Default Again" = "重新设为默认";
"Make PullMark the Default" = "把 PullMark 设为默认";
"Make the document bigger" = "放大文档";
@@ -261,7 +261,7 @@
"Open" = "打开";
"Open Branch Separately" = "单独打开分支";
"Open File or Folder" = "打开文件或文件夹";
-"Open Files" = "Open Files";
+"Open Files" = "打开的文件";
"Open File…" = "打开文件…";
"Open Folder…" = "打开文件夹…";
"Open Fully" = "完整打开";
@@ -303,7 +303,7 @@
"Pinned to commit %@ — the ref's tip as of this session's last fetch." = "已钉在提交 %@ 上——即本次会话最后一次抓取时该 ref 的顶端。";
"Posts immediately — file comments can't join a pending review." = "立即发表——文件评论无法加入待提交审查。";
"Preview First" = "先预览";
-"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "“先预览”让单击即可查看文件而不保留它——只有一条斜体条目(在 Open Files 中,或在它所属的 GitHub 仓库下),下一次预览会把它替换掉。双击文件,或者直接开始编辑,就能把它保持打开。“完整打开”则会保留你点击的每一个文件。";
+"Preview First shows a file with one click without keeping it — one italicized entry (in Open Files, or under its GitHub repo) that the next preview replaces. Double-click a file, or just start editing, to keep it open. Open Fully keeps every file you click." = "“先预览”让单击即可查看文件而不保留它——只有一条斜体条目(在“打开的文件”中,或在它所属的 GitHub 仓库下),下一次预览会把它替换掉。双击文件,或者直接开始编辑,就能把它保持打开。“完整打开”则会保留你点击的每一个文件。";
"Previous File" = "上一个文件";
"Previous Markdown file in this pull request" = "此拉取请求中的上一个 Markdown 文件";
"Previous match" = "上一个匹配项";
@@ -361,7 +361,7 @@
"Retry Upload" = "重试上传";
"Return" = "Return";
"Reveal in Finder" = "在访达中显示";
-"Reveal in Location" = "在 Locations 中显示";
+"Reveal in Location" = "在“位置”中显示";
"Reveal on GitHub" = "在 GitHub 上显示";
"Reveal resolved review conversations in the Result view" = "在“结果”视图中显示已解决的审查会话";
"Revert Last Edit" = "还原上次编辑";
@@ -446,7 +446,7 @@
"Themes restyle rendered Markdown and diffs, and follow the Light/Dark appearance. Drop .css files into the Themes folder to add your own — they apply on top of the GitHub look. Quick Look previews follow your theme too (custom themes fall back to their GitHub base there)." = "主题会重新装点渲染后的 Markdown 和差异,并跟随浅色/深色外观。把 .css 文件放进 Themes 文件夹即可添加自己的主题——它们叠加在 GitHub 外观之上。快速查看预览也跟随你的主题(自定义主题在那里回落到它们的 GitHub 基底)。";
"These keys are fixed and can't be changed." = "这些按键是固定的,无法更改。";
"This comment is still syncing with GitHub — try discarding it again in a moment." = "该评论仍在与 GitHub 同步——请稍后再试着丢弃它。";
-"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "这个文件夹的 Markdown 文件多于 PullMark 扫描的上限——把子文件夹作为独立的 Location 打开即可看到其余部分";
+"This folder has more Markdown files than PullMark scans — open a subfolder as its own Location to see the rest" = "这个文件夹的 Markdown 文件多于 PullMark 扫描的上限——把子文件夹作为独立的“位置”打开即可看到其余部分";
"This pull request was updated on GitHub." = "此拉取请求在 GitHub 上有更新。";
"This repository has no GitHub remote." = "此仓库没有 GitHub 远端。";
"This version (%@) doesn't know %@ — it may point at a feature from a newer release, or one that has moved. Checking for updates usually resolves it." = "此版本(%@)不认识 %@——它可能指向某个更新版本中的功能,或指向已经挪走的功能。检查更新通常就能解决。";
@@ -477,7 +477,7 @@
"With a folder selected" = "选中文件夹时";
"With a local file or folder in a GitHub repository selected" = "选中位于 GitHub 仓库中的本地文件或文件夹时";
"With a local file or folder selected" = "选中本地文件或文件夹时";
-"With files in Open Files" = "Open Files 中有文件时";
+"With files in Open Files" = "“打开的文件”中有文件时";
"Works with private repos using your existing gh or git credentials." = "使用你现有的 gh 或 git 凭据即可处理私有仓库。";
"You're on %@." = "你当前在 %@ 上。";
"Your custom shortcuts will be removed. This can't be undone." = "你自定的快捷键将被移除。此操作无法撤销。";
@@ -605,3 +605,80 @@
"Untracked" = "未跟踪";
"git credential helper" = "git 凭证助手";
"Relaunch Now" = "立即重新启动";
+"A classic reading measure" = "经典的阅读行长";
+"Approve" = "批准";
+"Approve merging these changes" = "批准合并这些更改";
+"Ask for changes before this can merge" = "在能够合并之前先要求做出更改";
+"Bookish serif headers on warm paper" = "书本般的衬线标题,落在暖色纸面上";
+"Inline" = "内联";
+"Longer lines, more on screen" = "行更长,屏幕上容纳更多";
+"Monospace with a phosphor-green accent" = "等宽字体,点缀一抹荧光绿";
+"Request changes" = "请求更改";
+"Side by Side" = "并排";
+"Submit general feedback without explicit approval" = "提交总体反馈,但不做明确批准";
+"Text uses the whole window" = "文字用满整个窗口";
+"The classic look, exactly as on github.com" = "经典外观,与 github.com 上一模一样";
+"%@/%@ @ %@ — from GitHub" = "%@/%@ @ %@ —— 来自 GitHub";
+"%lld Markdown files" = "%lld 个 Markdown 文件";
+"%lld changed Markdown files" = "%lld 个已更改的 Markdown 文件";
+"%lld margin notes" = "%lld 条页边批注";
+"%lld passed" = "%lld 项通过";
+"%lld passed, %lld skipped" = "%lld 项通过,%lld 项跳过";
+"%lld unresolved review comments" = "%lld 条未解决的审查评论";
+"%lld unresolved review comments on files not shown in PullMark" = "%lld 条未解决的审查评论位于 PullMark 未显示的文件上";
+"1 Markdown file" = "1 个 Markdown 文件";
+"1 changed Markdown file" = "1 个已更改的 Markdown 文件";
+"1 margin note" = "1 条页边批注";
+"1 unresolved review comment" = "1 条未解决的审查评论";
+"1 unresolved review comment on files not shown in PullMark" = "1 条未解决的审查评论位于 PullMark 未显示的文件上";
+"Actual size (1)" = "实际大小(1)";
+"Browse %@/%@" = "浏览 %@/%@";
+"Click, then press the new shortcut" = "点击,然后按下新的快捷键";
+"Compare with a previous revision or branch" = "与更早的修订版本或分支比较";
+"Comparing is unavailable here" = "此处无法比较";
+"Discard this comment" = "丢弃这条评论";
+"Discard this comment from the pending review on GitHub" = "从 GitHub 上的待提交审查中丢弃这条评论";
+"Done editing%@" = "结束编辑%@";
+"Edit this document%@ — then click any block" = "编辑这篇文档%@——然后点击任意区块";
+"File not found — last seen at %@" = "找不到文件——上次出现于 %@";
+"Fit (0)" = "适合窗口(0)";
+"Folder not found — last seen at %@" = "找不到文件夹——上次出现于 %@";
+"Heading · %@" = "标题 · %@";
+"Inline Diffs" = "内联差异";
+"Inline or side-by-side rendered diff" = "渲染差异的内联或并排布局";
+"Inline or side-by-side rendered diff — for the Rendered Diff view" = "渲染差异的内联或并排布局——用于“渲染差异”视图";
+"Leave a note about the whole document, at the top" = "在最上方为整篇文档留下一条批注";
+"Leave a note on the block you're reading — it's saved into the file as a comment" = "在你正在阅读的区块上留下一条批注——它会以 注释的形式存进文件";
+"New files always render inline — there is no old side to compare" = "新文件始终以内联方式渲染——没有可供比较的旧的一侧";
+"New side" = "新的一侧";
+"No Markdown files in this pull request" = "此拉取请求中没有 Markdown 文件";
+"Old side" = "旧的一侧";
+"Open %@" = "打开 %@";
+"Open %@/%@ #%lld" = "打开 %@/%@ #%lld";
+"Open commit on GitHub" = "在 GitHub 上打开该提交";
+"Pull request" = "拉取请求";
+"Pull request · %@" = "拉取请求 · %@";
+"PullMark Release Notes" = "PullMark 发行说明";
+"Recent" = "最近使用";
+"Recording — press the new shortcut" = "正在录制——请按下新的快捷键";
+"Reload this document" = "重新载入这篇文档";
+"Review requested · %@/%@#%lld" = "请求审查 · %@/%@#%lld";
+"Review these changes — summary, verdict, and your pending comments" = "审查这些更改——总结、结论,以及你待提交的评论";
+"Save As…" = "存储为…";
+"Share a link to this document on GitHub" = "共享指向 GitHub 上这篇文档的链接";
+"Share a link to this pull request" = "共享指向此拉取请求的链接";
+"Share this document" = "共享这篇文档";
+"Show the next document%@ — click and hold to see history" = "显示下一篇文档%@——点住不放可查看历史";
+"Show the previous document%@ — click and hold to see history" = "显示上一篇文档%@——点住不放可查看历史";
+"Side-by-Side Diffs" = "并排差异";
+"The document hasn't finished loading" = "文档尚未载入完成";
+"This document was opened at a specific commit — its content can't change" = "这篇文档是在某个特定提交上打开的——它的内容不会改变";
+"This file has uncommitted changes — compare with a previous revision or branch" = "此文件有未提交的更改——可与更早的修订版本或分支比较";
+"Turn on margin notes in Settings → Experimental" = "在“设置 → 实验性功能”中开启页边批注";
+"What's New in PullMark" = "PullMark 新增功能";
+"Zoom in (+)" = "放大(+)";
+"Zoom out (-)" = "缩小(-)";
+"branch, tag, or commit" = "分支、标签或提交";
+"the working file" = "工作区文件";
+"editing" = "编辑中";
+"pr-status-open" = "开启";
diff --git a/scripts/check-site-i18n.py b/scripts/check-site-i18n.py
index c713d3a..c0ec2db 100755
--- a/scripts/check-site-i18n.py
+++ b/scripts/check-site-i18n.py
@@ -11,6 +11,9 @@
and the i18n.css/i18n.js includes
* locale pages reference shared assets absolutely (no ../ or bare
relative src/href that would resolve inside the locale dir)
+ * app screenshots are served in the page's own language: localized
+ pages from /img//, English from /img/ — and every referenced
+ image file exists on disk (a bad path silently 404s to alt text)
* sitemap.xml covers exactly the shipped URL set
Exit code 0 = clean; 1 = problems (each printed on its own line).
@@ -100,6 +103,18 @@ def check_page(code, base):
problem(f"{rel}: switcher aria-current is "
f"{cur.group(1) if cur else 'missing'}, want {want_lang}")
+ # Image references (src, srcset, meta content, JSON-LD — anywhere in
+ # the document; the charset stops before ?v= cache-busters). Every
+ # file must exist, and app screenshots (app-*.png, the generator's
+ # output) must come from the page's own language directory.
+ img_dir = "/img/" if code == "en" else f"/img/{LOCALES[code]}/"
+ for ref in set(re.findall(r'(?:https://pullmark\.app)?(/img/[A-Za-z0-9._/\-]+)', s)):
+ if not (ROOT / ref.lstrip("/")).exists():
+ problem(f"{rel}: referenced image missing on disk: {ref}")
+ name = ref.rsplit("/", 1)[-1]
+ if name.startswith("app-") and ref != f"{img_dir}{name}":
+ problem(f"{rel}: app screenshot {ref} must be {img_dir}{name}")
+
if code != "en":
# Locale pages must not fetch assets relative to the locale dir.
for attr, value in re.findall(r'(src|href)="([^"]+)"', s):
@@ -136,7 +151,8 @@ def main():
print(f"\n{len(problems)} problem(s).")
return 1
total = len(BASES) * (len(LOCALES) + 1)
- print(f"site i18n OK: {total} pages verified, sitemap consistent.")
+ print(f"site i18n OK: {total} pages verified (incl. per-language "
+ f"screenshot refs), sitemap consistent.")
return 0
diff --git a/scripts/check-strings.py b/scripts/check-strings.py
index 518161b..87a6527 100755
--- a/scripts/check-strings.py
+++ b/scripts/check-strings.py
@@ -96,7 +96,7 @@ def scan_swift_literal(s, start):
# every interpolated call site when introduced (spec: app-i18n).
INT_EXPR = re.compile(
r"^(?:"
- r"[\w.]*[cC]ount|overflow|minutes|hours|days|line|number|original|index"
+ r"[\w.]*[cC]ount|overflow|minutes|hours|days|line|number|original|index|passed|skipped"
r"|[\w.]*[cC]ount [-+] \d+|index [-+] \d+|line [-+] \d+"
r"|\w+ - [\w.]*[cC]ount|hidden|md|other|status|failing|done|total"
r"|[\w.]+\.(?:minutes|number|status|line|originalLine)"
diff --git a/scripts/drive/README.md b/scripts/drive/README.md
index bbe2e26..6b7747a 100644
--- a/scripts/drive/README.md
+++ b/scripts/drive/README.md
@@ -13,12 +13,16 @@ step.
focus. Use it for menus, buttons, checkboxes, links: anything with a
name and an AXPress action. This is the default for everything it
can express.
-2. **Pid-targeted raw events (`pclick.swift`, `pkey.swift`)** — CGEvents
+2. **Pid-targeted raw events (`pkey.swift`, `ptype.swift`)** — CGEvents
delivered straight to a pid with `CGEvent.postToPid`. The visible
- cursor never moves, but see the residue below: a fully inactive app
- discards them, so they only help when the target app is already
- active and you need a raw event AX can't express (exact-coordinate
- clicks, key events with modifiers).
+ cursor never moves. A fully inactive app normally DISCARDS key
+ events (no key window to route to); PullMark's `-pm.captureChrome`
+ flag nominates one, which is how the screenshot generator types
+ into backgrounded instances. Pid-posted MOUSE events go nowhere
+ useful in this app — SwiftUI rows and WKWebView content both drop
+ them (a `pclick.swift` existed briefly and was removed for lying
+ about that) — use `ax.swift select-row` or the app's
+ `pullmark://capture/…` channel instead.
3. **Global HID events (`click.swift`, `key.swift`, `drag.swift`,
`hover.swift`, `gscroll.swift`) — last resort.** They move the real
cursor and land on whatever is frontmost, locking the human out
@@ -48,16 +52,52 @@ step.
windows for a pressable element whose AXTitle/AXDescription matches
(exact match preferred, substring accepted) and AXPress it. Reaches
SwiftUI toolbar buttons and web-content links/checkboxes alike.
-- Both check `AXIsProcessTrusted()` and fail with a one-line error if
+- `ax.swift menuitem ` — like `menu`, but finds the item
+ anywhere in the menu bar (Apple menu excluded). For localized runs:
+ top-level menu names are system-localized, item titles resolve from
+ `loc/` — so the caller passes just the item.
+- `ax.swift menukey ` — AXPress the menu item
+ carrying that keyboard equivalent (`menukey , cmd` = Settings…,
+ `menukey q cmd` = Quit). Language-independent; the way to hit
+ system-titled items no `.strings` file covers.
+- `ax.swift sidebar-state` — prints `visible` or `hidden`: is
+ there a native list outside the web area? Lets scenes toggle the
+ sidebar deterministically instead of blind-pressing.
+- `ax.swift menulist` — every menu item with its keyboard
+ equivalent as `[modifier-mask+char]`; discovery for `menukey`.
+- `ax.swift select-row [] ` — select a sidebar row by
+ its text via AX selection on the backing outline. SwiftUI rows
+ discard posted clicks and carry no AXPress; this is the background-
+ tier replacement for clicking them. Exact matches rank before
+ substring matches; `` picks among duplicates.
+- `ax.swift disclose ` — expand the matching row
+ (AXDisclosing).
+- `ax.swift rows` — dump every sidebar row's text; discovery for
+ select-row.
+- `ax.swift id ` — press by AXIdentifier, for system
+ chrome with stable ids (the Open panel's OKButton) whose titles are
+ localized.
+- All check `AXIsProcessTrusted()` and fail with a one-line error if
the Accessibility permission is missing.
+## Pid-addressed AppleEvents (no Launch Services)
+
+- `aeopen.swift ` — deliver an open-document ('odoc')
+ event straight to the pid. `open -a` resolves through Launch
+ Services by bundle id and, with /Applications and dist both alive,
+ has spawned a THIRD instance for the document instead of delivering;
+ pid addressing can't miss.
+- `aeurl.swift ` — same for GetURL ('GURL'): pullmark://
+ links, including the screenshot generator's `pullmark://capture/…`
+ drive channel (routed only under `-pm.captureChrome`).
+
## Pid-targeted raw events
-- `pclick.swift ` — mouse down/up posted to the pid. The
- location is still a global screen point (the app resolves which of
- its windows is hit) but the visible cursor does not move.
-- `pkey.swift [cmd]` — key press posted to the pid,
- flags cleared unless `cmd` is given.
+- `pkey.swift [cmd] [shift] [opt] [ctrl]` — key press
+ posted to the pid; modifier args combine (`5 cmd shift` = ⇧⌘G).
+- `ptype.swift ` — type text as unicode key events. Never
+ touches the shared clipboard, so parallel instances (and the
+ human's copy buffer) stay unmolested.
## Global HID events (real cursor)
diff --git a/scripts/drive/aeopen.swift b/scripts/drive/aeopen.swift
new file mode 100644
index 0000000..a23714f
--- /dev/null
+++ b/scripts/drive/aeopen.swift
@@ -0,0 +1,37 @@
+import AppKit
+import Foundation
+
+// Usage: swift aeopen.swift — deliver an open-document
+// ('odoc') AppleEvent to the process with that pid.
+//
+// This exists because every other delivery route resolves the TARGET
+// through Launch Services by bundle id, and with two copies of the
+// app alive (/Applications + dist) LS sometimes launches a THIRD
+// instance for the document instead of handing it to the one under
+// test. Addressing the event by pid skips LS entirely, works with
+// the app backgrounded, and is safe to run against many instances
+// in parallel.
+guard CommandLine.arguments.count == 3,
+ let pid = pid_t(CommandLine.arguments[1])
+else {
+ FileHandle.standardError.write(Data("usage: swift aeopen.swift \n".utf8))
+ exit(1)
+}
+let url = URL(fileURLWithPath: CommandLine.arguments[2])
+let target = NSAppleEventDescriptor(processIdentifier: pid)
+let event = NSAppleEventDescriptor(
+ eventClass: AEEventClass(kCoreEventClass),
+ eventID: AEEventID(kAEOpenDocuments),
+ targetDescriptor: target,
+ returnID: AEReturnID(kAutoGenerateReturnID),
+ transactionID: AETransactionID(kAnyTransactionID))
+let list = NSAppleEventDescriptor.list()
+list.insert(NSAppleEventDescriptor(fileURL: url), at: 1)
+event.setParam(list, forKeyword: keyDirectObject)
+do {
+ try event.sendEvent(options: [.noReply], timeout: 10)
+ print("sent odoc \(url.path) → pid \(pid)")
+} catch {
+ FileHandle.standardError.write(Data("error: sendEvent failed: \(error)\n".utf8))
+ exit(1)
+}
diff --git a/scripts/drive/aeurl.swift b/scripts/drive/aeurl.swift
new file mode 100644
index 0000000..a26b3f0
--- /dev/null
+++ b/scripts/drive/aeurl.swift
@@ -0,0 +1,30 @@
+import AppKit
+import Foundation
+
+// Usage: swift aeurl.swift — deliver a GetURL ('GURL')
+// AppleEvent to the process with that pid. The pid-addressed sibling of
+// aeopen.swift for pullmark:// links: `open ` resolves the handler
+// through Launch Services by bundle id, which can hit the INSTALLED
+// copy instead of the capture instance. Addressing by pid can't.
+guard CommandLine.arguments.count == 3,
+ let pid = pid_t(CommandLine.arguments[1])
+else {
+ FileHandle.standardError.write(Data("usage: swift aeurl.swift \n".utf8))
+ exit(1)
+}
+let urlString = CommandLine.arguments[2]
+let target = NSAppleEventDescriptor(processIdentifier: pid)
+let event = NSAppleEventDescriptor(
+ eventClass: AEEventClass(kInternetEventClass),
+ eventID: AEEventID(kAEGetURL),
+ targetDescriptor: target,
+ returnID: AEReturnID(kAutoGenerateReturnID),
+ transactionID: AETransactionID(kAnyTransactionID))
+event.setParam(NSAppleEventDescriptor(string: urlString), forKeyword: keyDirectObject)
+do {
+ try event.sendEvent(options: [.noReply], timeout: 10)
+ print("sent GURL \(urlString) → pid \(pid)")
+} catch {
+ FileHandle.standardError.write(Data("error: sendEvent failed: \(error)\n".utf8))
+ exit(1)
+}
diff --git a/scripts/drive/ax.swift b/scripts/drive/ax.swift
index ff2ebba..bf02690 100644
--- a/scripts/drive/ax.swift
+++ b/scripts/drive/ax.swift
@@ -6,8 +6,20 @@ import Foundation
//
// Usage:
// swift ax.swift menu
Dateien landen als feste Einträge im Bereich
- Open Files der Seitenleiste,
- und angezeigt wird die zuletzt übergebene.
+ Geöffnete Dateien der
+ Seitenleiste, und angezeigt wird die zuletzt übergebene.
Ordner — Git-Worktrees eingeschlossen — werden zu
- Locations: durchstöberbare
+ Orten: durchstöberbare
Bäume der Markdown-Dateien darin.
Läuft schon? Alles öffnet im vordersten Fenster.
Eine zweite Instanz der App wird nie gestartet.
@@ -115,15 +115,15 @@
Was Öffnen bedeutet
Worktrees — und auf eine Datei zeigen
Übergib einen Ordner und eine Datei zusammen und du bekommst beides
- auf einmal: Der Ordner öffnet als Location, die Datei öffnet fest und
+ auf einmal: Der Ordner öffnet als Ort, die Datei öffnet fest und
wird angezeigt. Das ist das ganze Rezept für „öffne diesen Worktree und
zeig mir dieses Doc":
$ pullmark ~/wt/feature ~/wt/feature/docs/plan.md
-
Der Baum des Worktrees landet in Locations (mit seinem Branch-Chip,
+
Der Baum des Worktrees landet unter „Orte" (mit seinem Branch-Chip,
denn ein Worktree ist einfach ein Git-Checkout), plan.md
- sitzt fest in Open Files und ist gerendert. Rechtsklick darauf und
+ sitzt fest in „Geöffnete Dateien" und ist gerendert. Rechtsklick darauf und
Reveal in Location springt dahin, wo sie im Baum wohnt.
- Das läuft genauso, wenn die Location schon offen war — eine Datei zu
+ Das läuft genauso, wenn der Ort schon offen war — eine Datei zu
öffnen, die darin liegt, erzeugt nie eine zweite Welt, nur einen Eintrag
im Arbeitsset.
Fürs Ordner-Datei-Paar ist die Reihenfolge egal, angezeigt wird aber
@@ -144,7 +144,7 @@
Gerenderte Diffs aus der Shell
$ pullmark --diff-with=old.md new.md # zwei Dateien, old.md die Basis$ pullmark --diff ~/wt/feature ~/wt/feature/docs/plan.md
# ein Worktree, plan.md als Diff
-
Ordner, die du danebenstellst, öffnen weiterhin als Locations, und
+
Ordner, die du danebenstellst, öffnen weiterhin als Orte, und
jede Form hat ihren Zwilling in der App, im Compare-Menü der Toolbar
(samt Compare Revisions… und Compare with
File…). Weil --diff und --diff-with
@@ -162,7 +162,7 @@
Exit-Codes
Beispiele
$ pullmark README.md # eine Datei lesen$ pullmark ~/notes # einen Ordner durchstöbern
-$ pullmark docs specs/design.md # eine Location plus ein Dokument
+$ pullmark docs specs/design.md # ein Ort plus ein Dokument$ pullmark ~/wt/feature docs/plan.md # ein Worktree, ein Doc im Bild$ pullmark --diff docs/plan.md # was die letzten Edits geändert haben$ pullmark -- --weird-filename.md # -- beendet das Parsen von Optionen
Aktionen. Eine Notiz zu löschen ist, wie sie aufgelöst wird:
kein Status, kein Archiv — eine abgearbeitete Notiz ist eine abwesende
Notiz.
-
Der Chip — Open-Files-Zeilen zeigen einen Chip mit
- der Kommentarzahl, solange ein Dokument noch Notizen trägt. Er ist
+
Der Chip — Zeilen unter „Geöffnete Dateien"
+ zeigen einen Chip mit der Kommentarzahl, solange ein Dokument noch Notizen trägt. Er ist
live: Während ein Agent die Datei durcharbeitet und Notizen löscht,
fällt die Zahl und die Blasen verschwinden vor deinen Augen.
irgendein Editor speichert; relative Bilder und Links lösen auf, und ein
Klick auf einen Link zu einer anderen Markdown-Datei öffnet sie an Ort
und Stelle (als Vorschau, wenn
- sie in einer offenen Location liegt).
+ sie in einem offenen Ort liegt).
Navigation — die Gliederungs-Seitenleiste (⌥⌘O), ⌘F
für die Suche auf der Seite, ⇧⌘F für die Suche über alle Dateien in der
Seitenleiste und ⌘K Open Quickly für Überschriften, Dateien, PRs,
@@ -142,12 +142,12 @@
GitHub, ohne den Browser
Herkunftsleiste pinnt owner/repo @ ref · path fest, mit
einem Weg zurück zu GitHub.
Ganze Repos durchstöbern — lade den Markdown-Baum
- eines Repos in Locations,
+ eines Repos unter Orte,
wechsle Branches, vergleiche gegen andere Branches, sieh dir Blame an —
private Repos nutzen die Zugangsdaten, die PRs schon nutzen, und nichts
Geladenes berührt je die Platte.
Branches und Worktrees — lokale Checkouts tragen
- einen Branch-Chip; sein Menü öffnet Worktrees als eigene Locations und
+ einen Branch-Chip; sein Menü öffnet Worktrees als eigene Orte und
liest andere Branches remote. Lokal schlägt remote, wenn ein Worktree
den Branch schon hat.
Dotfiles und versteckte Ordner in „Orte" —
.github/-Docs und Konsorten. Auch mit ⇧⌘.
umschaltbar (Finders eigener Griff) oder über View → Show Hidden
- Files; jede offene Location scannt beim Umschalten neu.
+ Files; jeder offene Ort scannt beim Umschalten neu.
Preview First zeigt eine Datei mit einem Klick, ohne sie zu
- behalten — ein kursiver Eintrag (in Open Files, oder unter seinem
- GitHub-Repo), den die nächste Vorschau ersetzt; Doppelklick oder
+ behalten — ein kursiver Eintrag (in „Geöffnete Dateien" oder unter
+ seinem GitHub-Repo), den die nächste Vorschau ersetzt; Doppelklick oder
Anfangen zu bearbeiten behält sie. Open Fully behält jede Datei, die
du klickst. Gilt für lokale Ordner und durchstöberte GitHub-Repos
gleichermaßen. Siehe
diff --git a/site/de/docs/shortcuts/index.html b/site/de/docs/shortcuts/index.html
index a562d3f..758527e 100644
--- a/site/de/docs/shortcuts/index.html
+++ b/site/de/docs/shortcuts/index.html
@@ -101,7 +101,7 @@
View
Show/Hide Outline
⌥⌘O
In einem lokalen Dokument
Show/Hide Markdown Source
⌥⌘U
Reload Document
⌘R
In einem lokalen Dokument
-
Show/Hide Hidden Files
⇧⌘.
Dotfiles in Locations — Finders eigener Griff
+
Show/Hide Hidden Files
⇧⌘.
Dotfiles in „Orte" — Finders eigener Griff
Show/Hide Margin Notes
—
Notizblasen in gerenderten Dokumenten
Zoom In / Out
⌘= / ⌘-
⌘+ geht auch; auf der Seite außerdem Pinch und ⌘-Scrollen
Vier Bereiche, geordnet danach, was Dinge
- bedeuten, nicht woher sie kommen: was du offen hast (Open
- Files), die Orte, die du durchstöberst (Locations), die Pull Requests,
- die du reviewst — und wo du gewesen bist (Recents).
+ bedeuten, nicht woher sie kommen: was du offen hast (Geöffnete
+ Dateien), die Ordner und Repos, die du durchstöberst (Orte), die Pull
+ Requests, die du reviewst — und wo du gewesen bist (Zuletzt benutzt).
-
Open Files
+
Geöffnete Dateien
Das Arbeitsset: jedes Dokument, das du ausdrücklich geöffnet hast — aus
dem Finder, per Drag & Drop, mit ⌘O, über die
Kommandozeile oder indem du eine Datei aus
- einer Location behalten hast. Flach, per Ziehen umsortierbar, jede Zeile
+ einem Ort behalten hast. Flach, per Ziehen umsortierbar, jede Zeile
mit dem Hover-✕ entfernbar (oder ⌫ auf der ausgewählten Zeile).
Rechtsklick auf die Bereichsüberschrift für Close All.
Vorschauen
-
Ein Einzelklick auf eine Datei in einer Location rendert sie sofort —
- und sie erscheint in Open Files als Vorschau: ein kursiver
- Eintrag, immer zuletzt im Bereich. Klick eine andere Datei und der
+
Ein Einzelklick auf eine Datei in einem Ort rendert sie sofort —
+ und sie erscheint in „Geöffnete Dateien" als Vorschau: ein
+ kursiver Eintrag, immer zuletzt im Bereich. Klick eine andere Datei und der
Vorschau-Eintrag wird ersetzt — Stöbern durch einen großen Baum stapelt
also nie Zeilen auf. Es ist dieselbe Idee wie die Vorschau-Tabs in VS
Code oder Xcodes temporärer Editor, mit derselben Kursivschrift.
@@ -97,19 +97,20 @@
Vorschauen
in den Einstellungen um.
Remote-Repos previewen genauso, am selben Ort. Beim
Stöbern durch den Baum eines GitHub-Repos, oder beim Folgen von Links in
- einem Remote-Dokument, landet derselbe eine kursive Eintrag in Open
- Files — mit Buch-Icon und einer owner/repo @ ref-Zweitzeile,
- weil die Datei nicht auf deinem Mac liegt. Es gibt immer nur
+ einem Remote-Dokument, landet derselbe eine kursive Eintrag in
+ „Geöffnete Dateien" — mit Buch-Icon und einer
+ owner/repo @ ref-Zweitzeile, weil die Datei nicht auf
+ deinem Mac liegt. Es gibt immer nur
eine Vorschau pro Fenster, lokal oder remote: Etwas anderes zu
previewen ersetzt, was du davor angesehen hast. Ein Remote-Doc zu
behalten (Doppelklick oder Keep Open) heftet es bei seinem Repo ab — es
- wandert in die feste Liste des Repos unter Locations. ⌘K öffnet direkt
+ wandert in die feste Liste des Repos unter „Orte". ⌘K öffnet direkt
fest, denn eine URL einzufügen ist ausdrückliche Absicht.
-
Jede Open-Files-Zeile, die in einer offenen Location liegt, bekommt
- Reveal in Location ins Rechtsklick-Menü — der Sprung
- zurück von „was ich lese" zu „wo es wohnt".
+
Jede Zeile unter „Geöffnete Dateien", die in einem offenen Ort liegt,
+ bekommt Reveal in Location ins Rechtsklick-Menü — der
+ Sprung zurück von „was ich lese" zu „wo es wohnt".
-
Locations
+
Orte
Durchstöberbare Wurzeln, wo immer sie liegen. Zwei Arten teilen sich
den Bereich, unterschieden per Icon:
@@ -126,8 +127,8 @@
Locations
Branches-und-Worktrees-Menü:
Worktrees — jeder Worktree des Repos, mit Häkchen
- auf dem, der diese Zeile ist; wähl einen anderen, um ihn als eigene
- Location zu öffnen. Worktrees werden von PullMark nie ausgecheckt oder
+ auf dem, der diese Zeile ist; wähl einen anderen, um ihn als eigenen
+ Ort zu öffnen. Worktrees werden von PullMark nie ausgecheckt oder
gewechselt — es öffnet den Ordner, der schon da ist.
View Branch from GitHub — lies die Dateien eines
anderen Branches remote, ohne deinen Checkout anzufassen. Ein Branch,
@@ -143,8 +144,8 @@
Locations
Markdown-Baum des Repos. Die behaltenen Docs des Repos sitzen über dem
Baum, damit sie in einem großen Repo nie untergehen; ein behaltenes Doc,
das im Baum sichtbar ist, wird einfach dort dargestellt. (Ein Doc, das du
- nur previewst, erscheint in Open Files, nicht
- hier.)
+ nur previewst, erscheint unter Geöffnete Dateien,
+ nicht hier.)
Ein Ordner, dessen Pfad nicht mehr auflöst (ein ausgeworfenes Volume,
ein gelöschter Worktree), wird mit Fragezeichen-Badge gedimmt, statt zu
verschwinden — er erwacht von selbst wieder, wenn der Pfad
@@ -172,10 +173,10 @@
Pull Requests
hinzugefügt, −-Kreis (rot) für entfernt,
→-Kreis für umbenannt, Stift-Kreis für geändert.
-
Recents
+
Zuletzt benutzt
Kürzlich geöffnete Dateien, Ordner und Pull Requests, die oben nicht
schon sichtbar sind. PR-Einträge tragen ihr Live-Status-Icon; ein
- Recent, dessen Datei verschwunden ist, wird gedimmt (Uhr-Badge), statt
+ Eintrag, dessen Datei verschwunden ist, wird gedimmt (Uhr-Badge), statt
zu verschwinden, und erwacht wieder, wenn der Pfad zurückkommt — gebaut
für Branch-Wechsel und ausgeworfene Volumes. Rechtsklick auf die
Überschrift für Clear Recents.
@@ -184,7 +185,7 @@
Dinge entfernen
Fahr über eine beliebige Zeile der obersten Ebene für das ✕ — es
entfernt die Zeile aus der Seitenleiste, nie etwas von der Platte oder
von GitHub. ⌫ auf einer ausgewählten Zeile tut dasselbe. Dateien im Baum
- einer Location haben kein ✕: Sie sind Inhalt eines Ortes, keine
+ eines Ortes haben kein ✕: Sie sind sein Inhalt, keine
Seitenleisten-Einträge.
Icon-Glossar
@@ -194,14 +195,14 @@
Icon-Glossar
Dokument, kursiver Name
Die Vorschau — ersetzt durch deinen nächsten Einzelklick
Ordner
Ein lokaler Ordner
Ordner + ?
Ordner gerade nicht auffindbar — gedimmt, erwacht wieder
-
Dokument + Uhr
Ein Recent, dessen Datei fehlt
+
Dokument + Uhr
Ein Eintrag unter „Zuletzt benutzt", dessen Datei fehlt
Geschlossenes Buch
Ein GitHub-Repository (als Zeilen-Icon: remote durchstöbert;
als kleine nachgestellte Marke: dieser lokale Ordner ist ein Checkout davon)
Branch-Glyphe + Name
Der Branch-Chip — Klick für Branches und Worktrees
Pull-Request-Pfeile
Ein Pull Request
Ablagefach
Review Requests — PRs, die auf dein Review warten
Sprechblase + Zahl
An einer PR-Datei: unaufgelöste Review-Kommentare. An einer
- Open-Files-Zeile: Randnotizen, die noch im Dokument sind
+ Zeile unter „Geöffnete Dateien": Randnotizen, die noch im Dokument sind
Farbiger Punkt (linke Kante)
Eine ungelesene Review-Anfrage
✕ im Kreis (bei Hover)
Aus der Seitenleiste entfernen / Vorschau verwerfen
„… changed while you were editing this block — nothing wa
Datei gar nicht gibt, wird schlicht gemeldet, statt ein leeres Diff zu
zeigen.
-
Gedimmte Zeilen: Ordner und Recents, die „nicht da" sind
-
Eine Location mit Fragezeichen-Badge oder ein ausgegrautes Recent
- heißt: Der Pfad löst gerade nicht auf — ein nicht eingebundenes Volume,
- ein gewechselter Git-Branch, ein gelöschter Worktree. Zeilen dimmen
+
Gedimmte Zeilen: Ordner und zuletzt benutzte Einträge, die „nicht da" sind
+
Ein Ort mit Fragezeichen-Badge oder ein ausgegrauter Eintrag unter
+ „Zuletzt benutzt" heißt: Der Pfad löst gerade nicht auf — ein nicht
+ eingebundenes Volume, ein gewechselter Git-Branch, ein gelöschter
+ Worktree. Zeilen dimmen
absichtlich, statt zu verschwinden: Sie erwachen von selbst wieder, wenn
- der Pfad zurückkommt. Klickst du ein totes Recent an, gibt es
+ der Pfad zurückkommt. Klickst du einen toten Eintrag an, gibt es
Remove from Recents oder Keep.
Pull Requests: Banner und ausstehende Kommentare
diff --git a/site/de/index.html b/site/de/index.html
index 5514617..1ac7e44 100644
--- a/site/de/index.html
+++ b/site/de/index.html
@@ -36,7 +36,7 @@
"license": "https://github.com/jedijashwa/pullmark/blob/main/LICENSE",
"url": "https://pullmark.app/de/",
"downloadUrl": "https://github.com/jedijashwa/pullmark/releases/latest/download/PullMark.dmg",
- "screenshot": "https://pullmark.app/img/app-doc.png",
+ "screenshot": "https://pullmark.app/img/de/app-doc.png",
"description": "Eine native macOS-App, die lokales Markdown so rendert, wie Leser es sehen werden, und dokumentationslastige GitHub-Pull-Requests als gerenderte Diffs mit wortgenauen Hervorhebungen reviewt.",
"softwareHelp": { "@type": "CreativeWork", "url": "https://pullmark.app/docs/" },
"inLanguage": "de"
@@ -561,8 +561,8 @@
Docs sind zum Diffen Lesen da.
-
-
+ Eine Projekt-Doku, formatiert — mit der Historie am Rand: ein Avatar pro Blockfolge, jeder eine Tür zu seinem Commit.
@@ -598,8 +598,8 @@
Dein Agent schreibt Pläne. Reviewe sie wie die eines Kollegen.
-
-
+ Die Spec eines Agenten, an Ort und Stelle reviewt: drei signierte
@@ -669,9 +669,9 @@
Das ganze Docs-Review, von der gerenderten Seite aus.
-
-
+
+ Ein Dokumentations-PR als gerendertes Diff: der eine geänderte Satz
trägt wortgenaue Hervorhebungen, und das neue Flussdiagramm kommt als
@@ -701,9 +701,9 @@
Das ganze Docs-Review, von der gerenderten Seite aus.
-
-
+
+ Die Unterhaltung als Dokument: Review-Kommentare rendern ihre Tabellen
als Tabellen, und der Avatar jedes Reviewers trägt sein Urteil.
@@ -731,13 +731,13 @@
Ein richtiger Reader für das Markdown, das schon auf deiner Platte liegt.
-
-
+
+ Ordner kommen als lebende Bäume herein, jeder Ort trägt seinen Git-Branch,
- und beim Stöbern erscheinen Dateien als Vorschau — der kursive Eintrag in Open
- Files, den der nächste Klick ersetzt. Pull Requests sitzen neben deinen lokalen Dateien,
+ und beim Stöbern erscheinen Dateien als Vorschau — der kursive Eintrag in
+ „Geöffnete Dateien", den der nächste Klick ersetzt. Pull Requests sitzen neben deinen lokalen Dateien,
und die Titelleiste weiß, wo du bist.
@@ -753,7 +753,8 @@
Ein richtiger Reader für das Markdown, das schon auf deiner Platte liegt.
das schnellste „Was hat der Agent gerade an meinem Doc geändert".
Stöbern, ohne dich zuzuschütten — Einzelklick durch einen Ordner
oder ein Repo, und jede Datei erscheint als Vorschau: ein kursiver Eintrag
- in Open Files, den der nächste Klick ersetzt. Doppelklick (oder einfach lostippen)
+ in „Geöffnete Dateien", den der nächste Klick ersetzt. Doppelklick (oder einfach
+ lostippen)
behält sie.
Gliederungs-Seitenleiste — eine Navigator-artige Karte deiner
Überschriften, einen Schalter entfernt.
@@ -801,8 +802,8 @@
Les
-
-
+ Edit-Modus: der aktive Block zeigt seinen Quelltext; alles andere bleibt gerendert.
@@ -823,9 +824,9 @@
Git
-
-
+
+ Ein Doc, direkt von GitHub gelesen: die Herkunftsleiste sagt immer, wo du
bist — Repo, Branch, gepinnter Commit — und der Branch-Chip wechselt oder öffnet
@@ -834,8 +835,8 @@
Git
-
-
+ Settings → Appearance: drei Live-Theme-Vorschauen, gerendert von der echten Pipeline — klick eine Karte zum Wechseln.
diff --git a/site/de/uses/agents/index.html b/site/de/uses/agents/index.html
index 8b3a4ed..ae83c33 100644
--- a/site/de/uses/agents/index.html
+++ b/site/de/uses/agents/index.html
@@ -453,8 +453,8 @@
Gerendert lesen. Vor Ort notieren. Zurückgeben.
-
-
+ Die Spec eines Agenten, erster Review-Durchgang: signierte Notizen,
@@ -559,9 +559,9 @@
Und wenn das Doc doch ins Review geht …
-
-
+
+ Dieselben Review-Instinkte, auf einen Pull Request gerichtet — die
Startseite erzählt die ganze
diff --git a/site/es/docs/cli/index.html b/site/es/docs/cli/index.html
index 288e4e3..c131372 100644
--- a/site/es/docs/cli/index.html
+++ b/site/es/docs/cli/index.html
@@ -101,13 +101,12 @@
Qué pasa al abrir
confiar en ellas:
Los archivos caen en la sección
- Open Files (archivos
- abiertos) de la barra lateral como entradas conservadas, y se muestra
- el último archivo que pasaste.
+ Archivos abiertos de la
+ barra lateral como entradas conservadas, y se muestra el último
+ archivo que pasaste.
Las carpetas — worktrees de git incluidos — se
- convierten en Locations
- (ubicaciones): árboles navegables de los archivos Markdown que hay
- dentro.
+ convierten en Ubicaciones:
+ árboles navegables de los archivos Markdown que hay dentro.
¿Ya está abierta? Todo se abre en la ventana
frontal. Nunca se lanza una segunda instancia de la app.
Las rutas relativas se resuelven contra tu
@@ -118,18 +117,19 @@
Qué pasa al abrir
Worktrees, y apuntar a un archivo
Pasa juntos una carpeta y un archivo y tienes los dos
- comportamientos a la vez: la carpeta se abre como Location, el archivo
+ comportamientos a la vez: la carpeta se abre como Ubicación, el archivo
se abre conservado y a la vista. Esa es la receta entera de «abre este
worktree y muéstrame este doc»:
$ pullmark ~/wt/feature ~/wt/feature/docs/plan.md
-
El árbol del worktree aterriza en Locations (con su chip de rama,
+
El árbol del worktree aterriza en Ubicaciones (con su chip de rama,
porque un worktree no es más que un checkout de git),
- plan.md queda conservado en Open Files y renderizado. Haz
- clic derecho y elige Reveal in Location (mostrar en su
- ubicación) para saltar al punto del árbol donde vive. Funciona igual
- cuando la Location ya estaba abierta — abrir un archivo que vive dentro
- de ella nunca crea un mundo duplicado, solo una entrada en el conjunto
- de trabajo.
+ plan.md queda conservado en Archivos abiertos y
+ renderizado. Haz clic derecho y elige
+ Reveal in Location (mostrar en su ubicación) para
+ saltar al punto del árbol donde vive. Funciona igual cuando la
+ Ubicación ya estaba abierta — abrir un archivo que vive dentro de ella
+ nunca crea un mundo duplicado, solo una entrada en el conjunto de
+ trabajo.
Para emparejar carpeta y archivo el orden da igual, pero el que se
muestra es el último archivo que pases, así que deja para el
final el documento que quieres en pantalla.
@@ -149,7 +149,7 @@
Diffs renderizados desde la terminal
$ pullmark --diff-with=old.md new.md # dos archivos, old.md como base$ pullmark --diff ~/wt/feature ~/wt/feature/docs/plan.md
# un worktree, con plan.md en diff
-
Las carpetas que pases al lado siguen abriéndose como Locations, y
+
Las carpetas que pases al lado siguen abriéndose como Ubicaciones, y
cada forma tiene su gemela dentro de la app, en el menú Compare de la
barra de herramientas (incluidas Compare Revisions… y
Compare with File…). Como --diff y
@@ -167,7 +167,7 @@
Códigos de salida
Ejemplos
$ pullmark README.md # leer un archivo$ pullmark ~/notes # navegar una carpeta
-$ pullmark docs specs/design.md # una Location más un documento
+$ pullmark docs specs/design.md # una Ubicación más un documento$ pullmark ~/wt/feature docs/plan.md # un worktree, mostrando un doc$ pullmark --diff docs/plan.md # qué cambiaron las últimas ediciones$ pullmark -- --weird-filename.md # -- termina el análisis de opciones
una nota para ver sus acciones. Borrar una nota es la forma de darla
por resuelta: sin estados, sin archivo histórico — una nota atendida
es una nota ausente.
-
El chip — las filas de Open Files (archivos
- abiertos) llevan un chip con la cuenta de comentarios mientras el
- documento aún cargue notas. Está vivo: según el agente recorre el
+
El chip — las filas de Archivos abiertos llevan
+ un chip con la cuenta de comentarios mientras el documento aún
+ cargue notas. Está vivo: según el agente recorre el
archivo borrando notas, la cuenta baja y los globos desaparecen
delante de ti.
En todo lo demás — las notas se renderizan en
diff --git a/site/es/docs/features/index.html b/site/es/docs/features/index.html
index f868617..b6e28b1 100644
--- a/site/es/docs/features/index.html
+++ b/site/es/docs/features/index.html
@@ -86,7 +86,7 @@
Lectura
relativos se resuelven, y hacer clic en un enlace a otro archivo
Markdown lo abre en el sitio (como
vista previa cuando vive en
- una Location abierta).
+ una Ubicación abierta).
Navegación — la barra lateral de esquema (⌥⌘O),
buscar en la página con ⌘F, buscar con ⇧⌘F en todos los archivos de la
barra lateral a la vez, y Open Quickly (abrir rápidamente, ⌘K) para
@@ -149,12 +149,12 @@
GitHub, sin el navegador
barra de procedencia fija owner/repo @ ref · ruta con un
camino de vuelta a GitHub.
Navega repos enteros — carga el árbol Markdown de
- un repo en Locations, cambia
+ un repo en Ubicaciones, cambia
de rama, compara contra otras ramas, consulta el blame — los repos
privados usan las credenciales que los PR ya usan, y nada de lo
descargado toca el disco.
Ramas y worktrees — los checkouts locales llevan
- un chip de rama; su menú abre worktrees como Locations propias y lee
+ un chip de rama; su menú abre worktrees como Ubicaciones propias y lee
otras ramas en remoto. Lo local siempre gana a lo remoto cuando un
worktree ya tiene la rama.
Los dotfiles y carpetas ocultas en Locations — los docs de
+
Los dotfiles y carpetas ocultas en Ubicaciones — los docs de
.github/ y compañía. También se alterna con
⇧⌘. (la combinación del propio Finder) o View → Show
- Hidden Files; cada Location abierta se reescanea al cambiarlo.
+ Hidden Files; cada Ubicación abierta se reescanea al cambiarlo.
Preview First muestra un archivo con un clic sin conservarlo —
- una entrada en cursiva (en Open Files, o bajo su repo de GitHub)
- que la siguiente vista previa reemplaza; doble clic o empezar a
- editar la conserva. Open Fully conserva cada archivo que clicas.
+ una entrada en cursiva (en Archivos abiertos, o bajo su repo de
+ GitHub) que la siguiente vista previa reemplaza; doble clic o
+ empezar a editar la conserva. Open Fully conserva cada archivo que
+ clicas.
Vale igual para carpetas locales y repos de GitHub navegados. Ver
Vistas previas.
Dotfiles en Locations — la combinación del propio Finder
+
Show/Hide Hidden Files
⇧⌘.
Dotfiles en Ubicaciones — la combinación del propio Finder
Show/Hide Margin Notes
—
Los globos de nota en documentos renderizados
Zoom In / Out
⌘= / ⌘-
⌘+ también funciona; el pellizco y ⌘-desplazamiento sobre la página, además
Actual Size
⌘0
diff --git a/site/es/docs/sidebar/index.html b/site/es/docs/sidebar/index.html
index 2eeafcd..c8dada6 100644
--- a/site/es/docs/sidebar/index.html
+++ b/site/es/docs/sidebar/index.html
@@ -4,7 +4,7 @@
La barra lateral — Docs de PullMark
-
+
@@ -16,7 +16,7 @@
-
+
@@ -66,18 +66,18 @@
La barra lateral
lugares que navegas, los pull requests que estás revisando y por dónde
has pasado.
-
Open Files (archivos abiertos)
+
Archivos abiertos
El conjunto de trabajo: cada documento que has abierto
explícitamente — desde el Finder, arrastrar y soltar, ⌘O, la
línea de comandos o al conservar un archivo
- de una Location. Plano, reordenable arrastrando, cada fila eliminable
+ de una Ubicación. Plano, reordenable arrastrando, cada fila eliminable
con la ✕ que aparece al pasar el cursor (o ⌫ en la fila seleccionada).
Clic derecho en la cabecera de la sección para Close All
(cerrar todo).
Vistas previas
-
Un solo clic en un archivo dentro de una Location y se renderiza al
- instante — y aparece en Open Files como vista previa: una única
+
Un solo clic en un archivo dentro de una Ubicación y se renderiza al
+ instante — y aparece en Archivos abiertos como vista previa: una única
entrada en cursiva, siempre la última de la sección. Haz clic en otro
archivo y la entrada de vista previa se reemplaza, así que navegar un
árbol grande nunca acumula filas. Es la misma idea que las pestañas de
@@ -101,20 +101,20 @@
Vistas previas
Los repos remotos se previsualizan igual, en el mismo
lugar. Navegar el árbol de un repo de GitHub, o seguir enlaces
dentro de un documento remoto, pone la misma entrada única en cursiva
- en Open Files — con un icono de libro y una segunda línea
+ en Archivos abiertos — con un icono de libro y una segunda línea
owner/repo @ ref, ya que el archivo no está en tu Mac.
Solo existe una vista previa por ventana, local o remota:
previsualizar algo reemplaza lo que estuvieras previsualizando antes.
Conservar un doc remoto (doble clic o Keep Open) es lo que lo archiva
- con su repo — pasa a la lista de fijados del repo bajo Locations. ⌘K
+ con su repo — pasa a la lista de fijados del repo bajo Ubicaciones. ⌘K
abre fijando directamente, porque pegar una URL es intención
explícita.
-
Cualquier fila de Open Files que viva dentro de una Location abierta
- tiene Reveal in Location (mostrar en su ubicación) en
- su menú contextual — el salto de vuelta de «lo que estoy leyendo» a
- «donde vive».
+
Cualquier fila de Archivos abiertos que viva dentro de una Ubicación
+ abierta tiene Reveal in Location (mostrar en su
+ ubicación) en su menú contextual — el salto de vuelta de «lo que estoy
+ leyendo» a «donde vive».
-
Locations (ubicaciones)
+
Ubicaciones
Raíces navegables, vivan donde vivan. Dos clases comparten la
sección, distinguidas por el icono:
@@ -132,7 +132,7 @@
Locations (ubicaciones)
Worktrees — cada worktree del repo, con una marca
en el que corresponde a esta fila; elige otro para abrirlo como su
- propia Location. PullMark nunca hace checkout ni cambia de worktree —
+ propia Ubicación. PullMark nunca hace checkout ni cambia de worktree —
abre la carpeta que ya está ahí.
View Branch from GitHub (ver rama desde GitHub) —
lee los archivos de otra rama en remoto, sin tocar tu checkout. Una
@@ -150,7 +150,7 @@
Locations (ubicaciones)
del árbol, para que nunca se ahoguen bajo un repo grande; un doc
conservado que ya es visible en el árbol simplemente se representa ahí.
(Un doc que solo estás previsualizando aparece en
- Open Files, no aquí.)
+ Archivos abiertos, no aquí.)
Una carpeta cuya ruta deja de resolverse (un volumen desmontado, un
worktree borrado) se atenúa con una insignia de interrogación en vez de
desaparecer — revive por sí sola cuando la ruta vuelve.
@@ -178,7 +178,7 @@
Pull Requests
círculo → para renombrado, círculo con lápiz para
modificado.
-
Recents (recientes)
+
Recientes
Archivos, carpetas y pull requests abiertos hace poco que no estén
ya visibles arriba. Las entradas de PR llevan su icono de estado en
vivo; un reciente cuyo archivo desapareció se atenúa (insignia de
@@ -190,7 +190,7 @@
Quitar cosas
Pasa el cursor por cualquier fila de primer nivel para la ✕ — quita
la fila de la barra lateral, jamás nada del disco ni de GitHub. ⌫ en
una fila seleccionada hace lo mismo. Los archivos dentro del árbol de
- una Location no tienen ✕: son contenidos de un lugar, no elementos de
+ una Ubicación no tienen ✕: son contenidos de un lugar, no elementos de
la barra lateral.
«… changed while you were editing this block — nothing was
un diff vacío.
Filas atenuadas: carpetas y recientes que «no están»
-
Una Location (ubicación) con una insignia de interrogación, o un
- reciente en gris, significa que la ruta no se resuelve ahora mismo — un
- volumen desmontado, una rama de git cambiada, un worktree borrado. Las
+
Una Ubicación con una insignia de interrogación, o un reciente en
+ gris, significa que la ruta no se resuelve ahora mismo — un volumen
+ desmontado, una rama de git cambiada, un worktree borrado. Las
filas se atenúan en vez de desaparecer a propósito: reviven solas
cuando la ruta vuelve. Clicar un reciente muerto ofrece
Remove from Recents (quitar de recientes) o
diff --git a/site/es/index.html b/site/es/index.html
index 6824771..539c19c 100644
--- a/site/es/index.html
+++ b/site/es/index.html
@@ -36,7 +36,7 @@
"license": "https://github.com/jedijashwa/pullmark/blob/main/LICENSE",
"url": "https://pullmark.app/es/",
"downloadUrl": "https://github.com/jedijashwa/pullmark/releases/latest/download/PullMark.dmg",
- "screenshot": "https://pullmark.app/img/app-doc.png",
+ "screenshot": "https://pullmark.app/img/es/app-doc.png",
"description": "Una app nativa para macOS que renderiza el Markdown local tal como lo verán sus lectores y revisa pull requests de GitHub cargados de documentación como diffs renderizados, con resaltado palabra por palabra.",
"softwareHelp": { "@type": "CreativeWork", "url": "https://pullmark.app/docs/" },
"inLanguage": "es"
@@ -560,8 +560,8 @@
Los docs están para diffearse leerse.
-
-
+ Un doc del proyecto, con formato — y la historia en el margen: un avatar por grupo de bloques, cada uno una puerta a su commit.
@@ -598,8 +598,8 @@
Tu agente escribe planes. Revísalos como los de un colega.
-
-
+ La especificación de un agente, revisada en el sitio: tres notas
@@ -668,8 +668,8 @@
Toda la revisión de docs, desde la página renderizada.
-
-
+ Un PR de documentación como diff renderizado: la única frase
@@ -699,8 +699,8 @@
Toda la revisión de docs, desde la página renderizada.
-
-
+ La conversación como documento: los comentarios de revisión renderizan
@@ -729,9 +729,9 @@
Un lector de verdad para el Markdown que ya vive en tu disco.
-
-
+
+ Las carpetas entran como árboles vivos, cada ubicación lleva su rama git, y
navegar muestra los archivos como vistas previas — la entrada en cursiva de Open
@@ -798,8 +798,8 @@
Lee
-
-
+ Modo de edición: el bloque activo muestra su código fuente; todo lo demás sigue renderizado.
@@ -819,9 +819,9 @@
Git
-
-
+
+ Un doc leído directamente de GitHub: la barra de procedencia siempre dice
dónde estás — repo, rama, commit fijado — y el chip de rama cambia o abre ramas sin
@@ -830,8 +830,8 @@
Git
-
-
+ Settings → Appearance: tres vistas previas de tema en vivo, renderizadas por el pipeline real — haz clic en una tarjeta para cambiar.
diff --git a/site/es/uses/agents/index.html b/site/es/uses/agents/index.html
index 6f677c1..c7db381 100644
--- a/site/es/uses/agents/index.html
+++ b/site/es/uses/agents/index.html
@@ -451,8 +451,8 @@
Lee renderizado. Anota en el sitio. Devuélvelo.
-
-
+ La especificación de un agente, una primera pasada de revisión: notas
@@ -558,8 +558,8 @@
Y cuando el doc sí sube a revisión…
-
-
+ Los mismos instintos de revisión, apuntados a un pull request — la
diff --git a/site/fr/docs/cli/index.html b/site/fr/docs/cli/index.html
index 8a3862b..ff1f8f4 100644
--- a/site/fr/docs/cli/index.html
+++ b/site/fr/docs/cli/index.html
@@ -100,10 +100,10 @@
Ce que fait l'ouverture
dessus :
Les fichiers atterrissent dans la section
- Open Files de la barre latérale en
+ Fichiers ouverts de la barre latérale en
entrées épinglées, et le dernier fichier passé est affiché.
Les dossiers — worktrees git compris — deviennent des
- Locations : des arborescences
+ Emplacements : des arborescences
navigables des fichiers Markdown qu'ils contiennent.
Déjà lancée ? Tout s'ouvre dans la fenêtre au premier
plan. Une seconde instance de l'app n'est jamais démarrée.
@@ -115,16 +115,16 @@
Ce que fait l'ouverture
Les worktrees, et viser un seul fichier
Passez un dossier et un fichier ensemble et vous obtenez les deux
- comportements d'un coup : le dossier s'ouvre en Location, le fichier
+ comportements d'un coup : le dossier s'ouvre en emplacement, le fichier
s'ouvre épinglé et affiché. C'est toute la recette de « ouvre ce worktree
et montre-moi cette doc » :
$ pullmark ~/wt/feature ~/wt/feature/docs/plan.md
-
L'arborescence du worktree atterrit dans Locations (avec sa pastille de
+
L'arborescence du worktree atterrit dans Emplacements (avec sa pastille de
branche, un worktree n'étant qu'une copie de travail git),
- plan.md est épinglé dans Open Files et rendu. Clic droit dessus et
+ plan.md est épinglé dans Fichiers ouverts et rendu. Clic droit dessus et
Reveal in Location (afficher dans l'emplacement) saute vers sa
- place dans l'arborescence. Cela marche pareil quand la Location était déjà
- ouverte — ouvrir un fichier qui vit dedans ne crée jamais un monde en double,
+ place dans l'arborescence. Cela marche pareil quand l'emplacement était déjà
+ ouvert — ouvrir un fichier qui vit dedans ne crée jamais un monde en double,
juste une entrée dans l'ensemble de travail.
L'ordre n'importe pas pour l'appariement dossier/fichier, mais le
dernier fichier passé est celui affiché : mettez en dernier le
@@ -144,7 +144,7 @@
Des diffs rendus depuis le shell
$ pullmark --diff-with=old.md new.md # deux fichiers, old.md comme référence$ pullmark --diff ~/wt/feature ~/wt/feature/docs/plan.md
# un worktree, plan.md diffé
-
Les dossiers passés à côté s'ouvrent toujours en Locations, et chaque forme a
+
Les dossiers passés à côté s'ouvrent toujours en emplacements, et chaque forme a
son jumeau dans le menu Compare de la barre d'outils (y compris
Compare Revisions… et Compare with File…).
Parce que --diff et --diff-with sont des drapeaux,
@@ -162,7 +162,7 @@
Codes de sortie
Exemples
$ pullmark README.md # lire un fichier$ pullmark ~/notes # parcourir un dossier
-$ pullmark docs specs/design.md # une Location plus un document
+$ pullmark docs specs/design.md # un emplacement plus un document$ pullmark ~/wt/feature docs/plan.md # un worktree, une doc affichée$ pullmark --diff docs/plan.md # ce que les dernières éditions ont changé$ pullmark -- --weird-filename.md # -- termine l'analyse des options
ses actions. Supprimer une note, c'est ainsi qu'on la
résout : pas d'état, pas d'archive — une note traitée est une
note absente.
-
La pastille — les lignes d'Open Files (fichiers
- ouverts) portent une pastille de compte de commentaires tant que le
+
La pastille — les lignes de Fichiers ouverts
+ portent une pastille de compte de commentaires tant que le
document porte encore des notes. Elle est vivante : à mesure
que l'agent traverse le fichier en supprimant les notes, le compteur
descend et les bulles disparaissent sous vos yeux.
l'enregistrement depuis n'importe quel éditeur ; les images et liens
relatifs se résolvent, et cliquer un lien vers un autre fichier Markdown
l'ouvre sur place (en aperçu quand il
- vit dans une Location ouverte).
+ vit dans un emplacement ouvert).
Navigation — le plan en barre latérale (⌥⌘O), la recherche
dans la page ⌘F, la recherche ⇧⌘F dans tous les fichiers de la barre latérale,
et ⌘K Open Quickly (ouvrir rapidement) pour les titres, fichiers, PR et
@@ -140,12 +140,12 @@
GitHub, sans le navigateur
épingle owner/repo @ ref · path avec un chemin de retour vers
GitHub.
Parcourez des dépôts entiers — chargez l'arborescence
- Markdown d'un dépôt dans Locations,
+ Markdown d'un dépôt dans Emplacements,
changez de branche, comparez avec d'autres branches, consultez le blame — les
dépôts privés utilisent les identifiants que les PR utilisent déjà, et rien de
ce qui est récupéré ne touche jamais le disque.
Branches et worktrees — les copies locales portent une
- pastille de branche ; son menu ouvre les worktrees comme Locations à part
+ pastille de branche ; son menu ouvre les worktrees comme emplacements à part
et lit les autres branches à distance. Le local l'emporte toujours sur le
distant quand un worktree a déjà la branche.
Les dotfiles et dossiers cachés dans Locations — les docs de
+
Les dotfiles et dossiers cachés dans Emplacements — les docs de
.github/ et compagnie. Se bascule aussi avec ⇧⌘. (le
- combo du Finder lui-même) ou View → Show Hidden Files ; chaque Location
- ouverte re-scanne à la bascule.
+ combo du Finder lui-même) ou View → Show Hidden Files ; chaque emplacement
+ ouvert re-scanne à la bascule.
Preview First montre un fichier d'un seul clic sans le garder — une
- entrée en italique (dans Open Files, ou sous son dépôt GitHub) que l'aperçu
+ entrée en italique (dans Fichiers ouverts, ou sous son dépôt GitHub) que l'aperçu
suivant remplace ; double-cliquez ou commencez à éditer pour le garder.
Open Fully garde chaque fichier cliqué. Vaut pour les dossiers locaux comme
pour les dépôts GitHub parcourus. Voir
diff --git a/site/fr/docs/shortcuts/index.html b/site/fr/docs/shortcuts/index.html
index f6fb03c..2fe3c98 100644
--- a/site/fr/docs/shortcuts/index.html
+++ b/site/fr/docs/shortcuts/index.html
@@ -101,7 +101,7 @@
View (présentation)
Show/Hide Outline
⌥⌘O
Dans un document local
Show/Hide Markdown Source
⌥⌘U
Reload Document
⌘R
Dans un document local
-
Show/Hide Hidden Files
⇧⌘.
Les dotfiles dans Locations — le combo du Finder lui-même
+
Show/Hide Hidden Files
⇧⌘.
Les dotfiles dans Emplacements — le combo du Finder lui-même
Show/Hide Margin Notes
—
Les bulles de note dans les documents rendus
Zoom In / Out
⌘= / ⌘-
⌘+ marche aussi ; le pincement et ⌘-défilement sur la page également
lieux que vous parcourez, les pull requests que vous révisez, et là où vous êtes
passé.
-
Open Files
-
Open Files (fichiers ouverts), c'est l'ensemble de travail : chaque
+
Fichiers ouverts
+
Fichiers ouverts, c'est l'ensemble de travail : chaque
document explicitement ouvert — depuis le Finder, par glisser-déposer, ⌘O, la
- ligne de commande, ou en gardant un fichier d'une
- Location. À plat, réordonnable en glissant, chaque ligne retirable avec le ✕ au
+ ligne de commande, ou en gardant un fichier d'un
+ emplacement. À plat, réordonnable en glissant, chaque ligne retirable avec le ✕ au
survol (ou ⌫ sur la ligne sélectionnée). Clic droit sur l'en-tête de section pour
Close All (tout fermer).
Aperçus
-
Cliquez une fois un fichier dans une Location : il se rend
- immédiatement — et apparaît dans Open Files en aperçu, une seule entrée
+
Cliquez une fois un fichier dans un emplacement : il se rend
+ immédiatement — et apparaît dans Fichiers ouverts en aperçu, une seule entrée
en italique, toujours dernière de la section. Cliquez un autre fichier et
l'entrée d'aperçu est remplacée : parcourir une grande arborescence
n'empile jamais de lignes. C'est la même idée que les onglets d'aperçu de VS
@@ -97,22 +97,22 @@
Aperçus
dans Settings (réglages).
Les dépôts distants s'aperçoivent de la même façon, au même
endroit. Parcourir l'arborescence d'un dépôt GitHub, ou suivre des liens
- dans un document distant, place la même entrée italique unique dans Open
- Files — avec une icône de livre et une seconde ligne
+ dans un document distant, place la même entrée italique unique dans
+ Fichiers ouverts — avec une icône de livre et une seconde ligne
owner/repo @ ref, puisque le fichier n'est pas sur votre Mac. Il n'y
a jamais qu'un seul aperçu par fenêtre, local ou distant :
apercevoir quoi que ce soit remplace ce que vous aperceviez avant. Garder un
document distant (double-clic ou Keep Open) est ce qui le classe avec son
- dépôt — il rejoint la liste épinglée du dépôt sous Locations. ⌘K ouvre
+ dépôt — il rejoint la liste épinglée du dépôt sous Emplacements. ⌘K ouvre
directement épinglé, coller une URL étant une intention explicite.
-
Toute ligne d'Open Files qui vit dans une Location ouverte gagne
- Reveal in Location (afficher dans l'emplacement) dans son menu
- contextuel — le saut retour de « ce que je lis » vers « là où ça
- vit ».
+
Toute ligne de Fichiers ouverts qui vit dans un emplacement ouvert
+ gagne Reveal in Location (afficher dans l'emplacement) dans
+ son menu contextuel — le saut retour de « ce que je lis » vers
+ « là où ça vit ».
-
Locations
-
Locations (emplacements) regroupe les racines navigables, où qu'elles vivent.
- Deux espèces partagent la section, distinguées par l'icône :
+
Emplacements
+
La section Emplacements regroupe les racines navigables, où qu'elles
+ vivent. Deux espèces partagent la section, distinguées par l'icône :
Ligne
Signification
📁 icône dossier
Un dossier local — ses fichiers Markdown en arborescence (ou en
@@ -126,7 +126,7 @@
Locations
dépôt. Cliquer la pastille de branche ouvre le menu branches-et-worktrees :
Worktrees — chaque worktree du dépôt, avec une coche sur
- celui de cette ligne ; choisissez-en un autre pour l'ouvrir comme Location
+ celui de cette ligne ; choisissez-en un autre pour l'ouvrir comme emplacement
à part. Les worktrees ne sont jamais « checkout » ni basculés depuis
PullMark — il ouvre le dossier qui est déjà là.
View Branch from GitHub (voir la branche depuis GitHub) —
@@ -145,7 +145,7 @@
Locations
au-dessus de l'arborescence, pour ne jamais se noyer sous un gros dépôt ;
une doc gardée visible dans l'arborescence y est simplement représentée. (Une
doc simplement en cours d'aperçu s'affiche dans
- Open Files, pas ici.)
+ Fichiers ouverts, pas ici.)
Un dossier dont le chemin cesse de se résoudre (volume démonté, worktree
supprimé) s'estompe avec un badge point d'interrogation au lieu de
disparaître — il ressuscite tout seul quand le chemin revient.
@@ -171,8 +171,8 @@
Pull Requests
pour ajouté, cercle − (rouge) pour supprimé, cercle
→ pour renommé, cercle crayon pour modifié.
-
Recents
-
Recents (récents) : les fichiers, dossiers et pull requests récemment
+
Récents
+
Récents : les fichiers, dossiers et pull requests récemment
ouverts qui ne sont pas déjà visibles au-dessus. Les entrées de PR portent leur
icône d'état en direct ; un récent dont le fichier a disparu s'estompe
(badge horloge) au lieu de s'effacer, et ressuscite quand le chemin revient —
@@ -182,7 +182,7 @@
Recents
Retirer des éléments
Survolez n'importe quelle ligne de premier niveau pour le ✕ — il retire la
ligne de la barre latérale, jamais rien du disque ni de GitHub. ⌫ sur une ligne
- sélectionnée fait de même. Les fichiers dans l'arborescence d'une Location n'ont
+ sélectionnée fait de même. Les fichiers dans l'arborescence d'un emplacement n'ont
pas de ✕ : ce sont les contenus d'un lieu, pas des éléments de la barre
latérale.
@@ -200,7 +200,7 @@
Glossaire des icônes
Flèches de pull request
Une pull request
Bac de réception
Review Requests — les PR qui attendent votre révision
Bulle + compteur
Sur un fichier de PR : commentaires de révision non résolus. Sur
- une ligne d'Open Files : des notes de marge encore dans le document
+ une ligne de Fichiers ouverts : des notes de marge encore dans le document
« … changed while you were editing this block — nothi
franchement au lieu d'afficher un diff vide.
Lignes estompées : dossiers et récents « absents »
-
Une Location avec un badge point d'interrogation, ou un récent grisé,
+
Un emplacement avec un badge point d'interrogation, ou un récent grisé,
signifie que le chemin ne se résout pas pour l'instant — un volume démonté, une
branche git changée, un worktree supprimé. Les lignes s'estompent au lieu de
disparaître, à dessein : elles ressuscitent d'elles-mêmes quand le chemin
diff --git a/site/fr/index.html b/site/fr/index.html
index a92ed37..102a0da 100644
--- a/site/fr/index.html
+++ b/site/fr/index.html
@@ -37,7 +37,7 @@
"url": "https://pullmark.app/fr/",
"inLanguage": "fr",
"downloadUrl": "https://github.com/jedijashwa/pullmark/releases/latest/download/PullMark.dmg",
- "screenshot": "https://pullmark.app/img/app-doc.png",
+ "screenshot": "https://pullmark.app/img/fr/app-doc.png",
"description": "Une app macOS native qui affiche le Markdown local tel que les lecteurs le verront et révise les pull requests GitHub riches en documentation sous forme de diffs rendus, avec les mots modifiés surlignés.",
"softwareHelp": { "@type": "CreativeWork", "url": "https://pullmark.app/docs/" }
}
@@ -560,8 +560,8 @@
La doc est faite pour être diffée lue.
-
-
+ La doc d'un projet, mise en forme — avec l'historique dans la marge : un avatar par suite de blocs, chacun ouvrant sur son commit.
@@ -596,8 +596,8 @@
Votre agent écrit des plans. Relisez-les comme ceux d'un collègue.
-
-
+ La spec d'un agent, relue sur place : trois notes signées ancrées
@@ -666,8 +666,8 @@
Toute la révision de la doc, depuis la page rendue.
-
-
+ Une PR de documentation en diff rendu : l'unique phrase modifiée porte
@@ -697,8 +697,8 @@
Toute la révision de la doc, depuis la page rendue.
-
-
+ La conversation comme un document : les commentaires de révision
@@ -728,13 +728,13 @@
Un vrai lecteur pour le Markdown déjà sur votre disque.
-
-
+
+ Les dossiers arrivent en arborescences vivantes, chaque emplacement porte sa
branche git, et la navigation montre les fichiers en aperçus — l'entrée en
- italique d'Open Files que le clic suivant remplace. Les pull requests voisinent avec vos
+ italique de Fichiers ouverts que le clic suivant remplace. Les pull requests voisinent avec vos
fichiers locaux, et la barre de titre sait où vous êtes.
@@ -751,7 +751,7 @@
Un vrai lecteur pour le Markdown déjà sur votre disque.
vient de changer dans ma doc ».
Parcourez sans vous ensevelir — cliquez de fichier en fichier dans
un dossier ou un dépôt : chacun s'affiche en aperçu, une seule entrée
- en italique dans Open Files (fichiers ouverts) que le clic suivant remplace.
+ en italique dans Fichiers ouverts que le clic suivant remplace.
Double-cliquez (ou commencez simplement à éditer) pour le garder.
Le plan en barre latérale — une carte de vos titres, façon
navigateur, à un bouton de distance.
@@ -800,8 +800,8 @@
Lir
-
-
+ Le mode édition : le bloc actif montre sa source ; tout le reste demeure rendu.
@@ -822,9 +822,9 @@
Git
-
-
+
+ Une doc lue directement depuis GitHub : la barre de provenance dit
toujours où vous êtes — dépôt, branche, commit épinglé — et la pastille de branche
@@ -833,8 +833,8 @@
Git
-
-
+ Settings → Appearance (réglages → apparence) : trois aperçus de thème en direct, rendus par le vrai pipeline — cliquez une carte pour changer.
diff --git a/site/fr/uses/agents/index.html b/site/fr/uses/agents/index.html
index 2452739..5eb1a02 100644
--- a/site/fr/uses/agents/index.html
+++ b/site/fr/uses/agents/index.html
@@ -451,8 +451,8 @@
Lisez rendu. Notez sur place. Rendez la main.
-
-
+ La spec d'un agent, première passe de relecture : des notes signées
@@ -556,8 +556,8 @@
Et quand la doc part bel et bien en révision…
-
-
+ Les mêmes réflexes de révision, tournés vers une pull request — la
diff --git a/site/img/app-blame-dark.png b/site/img/app-blame-dark.png
index e0d801c..c0482bd 100644
Binary files a/site/img/app-blame-dark.png and b/site/img/app-blame-dark.png differ
diff --git a/site/img/app-blame.png b/site/img/app-blame.png
index df90298..76e94bb 100644
Binary files a/site/img/app-blame.png and b/site/img/app-blame.png differ
diff --git a/site/img/app-diff-dark.png b/site/img/app-diff-dark.png
index 57d4f79..5b11a3d 100644
Binary files a/site/img/app-diff-dark.png and b/site/img/app-diff-dark.png differ
diff --git a/site/img/app-diff.png b/site/img/app-diff.png
index 773e9ba..c935c81 100644
Binary files a/site/img/app-diff.png and b/site/img/app-diff.png differ
diff --git a/site/img/app-doc-dark.png b/site/img/app-doc-dark.png
index f3d4122..e19e0f1 100644
Binary files a/site/img/app-doc-dark.png and b/site/img/app-doc-dark.png differ
diff --git a/site/img/app-doc.png b/site/img/app-doc.png
index 77eeece..56d627b 100644
Binary files a/site/img/app-doc.png and b/site/img/app-doc.png differ
diff --git a/site/img/app-edit-dark.png b/site/img/app-edit-dark.png
index 705102f..e2627ca 100644
Binary files a/site/img/app-edit-dark.png and b/site/img/app-edit-dark.png differ
diff --git a/site/img/app-edit.png b/site/img/app-edit.png
index cfd46c0..bb45923 100644
Binary files a/site/img/app-edit.png and b/site/img/app-edit.png differ
diff --git a/site/img/app-notes-dark.png b/site/img/app-notes-dark.png
index 18c1b3c..4b1e12d 100644
Binary files a/site/img/app-notes-dark.png and b/site/img/app-notes-dark.png differ
diff --git a/site/img/app-notes.png b/site/img/app-notes.png
index 0b01d63..d23ff2c 100644
Binary files a/site/img/app-notes.png and b/site/img/app-notes.png differ
diff --git a/site/img/app-themes-dark.png b/site/img/app-themes-dark.png
index 6400589..3c441f2 100644
Binary files a/site/img/app-themes-dark.png and b/site/img/app-themes-dark.png differ
diff --git a/site/img/app-themes.png b/site/img/app-themes.png
index 2a19764..7128483 100644
Binary files a/site/img/app-themes.png and b/site/img/app-themes.png differ
diff --git a/site/img/de/app-blame-dark.png b/site/img/de/app-blame-dark.png
new file mode 100644
index 0000000..2c0cab3
Binary files /dev/null and b/site/img/de/app-blame-dark.png differ
diff --git a/site/img/de/app-blame.png b/site/img/de/app-blame.png
new file mode 100644
index 0000000..a23f1d4
Binary files /dev/null and b/site/img/de/app-blame.png differ
diff --git a/site/img/de/app-diff-dark.png b/site/img/de/app-diff-dark.png
new file mode 100644
index 0000000..0c4d864
Binary files /dev/null and b/site/img/de/app-diff-dark.png differ
diff --git a/site/img/de/app-diff.png b/site/img/de/app-diff.png
new file mode 100644
index 0000000..618156a
Binary files /dev/null and b/site/img/de/app-diff.png differ
diff --git a/site/img/de/app-doc-dark.png b/site/img/de/app-doc-dark.png
new file mode 100644
index 0000000..17e7616
Binary files /dev/null and b/site/img/de/app-doc-dark.png differ
diff --git a/site/img/de/app-doc.png b/site/img/de/app-doc.png
new file mode 100644
index 0000000..51a64dd
Binary files /dev/null and b/site/img/de/app-doc.png differ
diff --git a/site/img/de/app-edit-dark.png b/site/img/de/app-edit-dark.png
new file mode 100644
index 0000000..4bbc079
Binary files /dev/null and b/site/img/de/app-edit-dark.png differ
diff --git a/site/img/de/app-edit.png b/site/img/de/app-edit.png
new file mode 100644
index 0000000..d8eccff
Binary files /dev/null and b/site/img/de/app-edit.png differ
diff --git a/site/img/de/app-notes-dark.png b/site/img/de/app-notes-dark.png
new file mode 100644
index 0000000..16148f3
Binary files /dev/null and b/site/img/de/app-notes-dark.png differ
diff --git a/site/img/de/app-notes.png b/site/img/de/app-notes.png
new file mode 100644
index 0000000..095c1eb
Binary files /dev/null and b/site/img/de/app-notes.png differ
diff --git a/site/img/de/app-pr-dark.png b/site/img/de/app-pr-dark.png
new file mode 100644
index 0000000..e4ceabd
Binary files /dev/null and b/site/img/de/app-pr-dark.png differ
diff --git a/site/img/de/app-pr.png b/site/img/de/app-pr.png
new file mode 100644
index 0000000..fd8c3e3
Binary files /dev/null and b/site/img/de/app-pr.png differ
diff --git a/site/img/de/app-remote-dark.png b/site/img/de/app-remote-dark.png
new file mode 100644
index 0000000..e25e36f
Binary files /dev/null and b/site/img/de/app-remote-dark.png differ
diff --git a/site/img/de/app-remote.png b/site/img/de/app-remote.png
new file mode 100644
index 0000000..a3d1ee6
Binary files /dev/null and b/site/img/de/app-remote.png differ
diff --git a/site/img/de/app-themes-dark.png b/site/img/de/app-themes-dark.png
new file mode 100644
index 0000000..8011877
Binary files /dev/null and b/site/img/de/app-themes-dark.png differ
diff --git a/site/img/de/app-themes.png b/site/img/de/app-themes.png
new file mode 100644
index 0000000..f39ce8d
Binary files /dev/null and b/site/img/de/app-themes.png differ
diff --git a/site/img/es/app-blame-dark.png b/site/img/es/app-blame-dark.png
new file mode 100644
index 0000000..c6be520
Binary files /dev/null and b/site/img/es/app-blame-dark.png differ
diff --git a/site/img/es/app-blame.png b/site/img/es/app-blame.png
new file mode 100644
index 0000000..35c424d
Binary files /dev/null and b/site/img/es/app-blame.png differ
diff --git a/site/img/es/app-diff-dark.png b/site/img/es/app-diff-dark.png
new file mode 100644
index 0000000..e0410a0
Binary files /dev/null and b/site/img/es/app-diff-dark.png differ
diff --git a/site/img/es/app-diff.png b/site/img/es/app-diff.png
new file mode 100644
index 0000000..76fdb7a
Binary files /dev/null and b/site/img/es/app-diff.png differ
diff --git a/site/img/es/app-doc-dark.png b/site/img/es/app-doc-dark.png
new file mode 100644
index 0000000..1a04a39
Binary files /dev/null and b/site/img/es/app-doc-dark.png differ
diff --git a/site/img/es/app-doc.png b/site/img/es/app-doc.png
new file mode 100644
index 0000000..da70dde
Binary files /dev/null and b/site/img/es/app-doc.png differ
diff --git a/site/img/es/app-edit-dark.png b/site/img/es/app-edit-dark.png
new file mode 100644
index 0000000..9e2cb58
Binary files /dev/null and b/site/img/es/app-edit-dark.png differ
diff --git a/site/img/es/app-edit.png b/site/img/es/app-edit.png
new file mode 100644
index 0000000..b7090eb
Binary files /dev/null and b/site/img/es/app-edit.png differ
diff --git a/site/img/es/app-notes-dark.png b/site/img/es/app-notes-dark.png
new file mode 100644
index 0000000..0ded882
Binary files /dev/null and b/site/img/es/app-notes-dark.png differ
diff --git a/site/img/es/app-notes.png b/site/img/es/app-notes.png
new file mode 100644
index 0000000..d940a13
Binary files /dev/null and b/site/img/es/app-notes.png differ
diff --git a/site/img/es/app-pr-dark.png b/site/img/es/app-pr-dark.png
new file mode 100644
index 0000000..d531d30
Binary files /dev/null and b/site/img/es/app-pr-dark.png differ
diff --git a/site/img/es/app-pr.png b/site/img/es/app-pr.png
new file mode 100644
index 0000000..c96025a
Binary files /dev/null and b/site/img/es/app-pr.png differ
diff --git a/site/img/es/app-remote-dark.png b/site/img/es/app-remote-dark.png
new file mode 100644
index 0000000..bcf686c
Binary files /dev/null and b/site/img/es/app-remote-dark.png differ
diff --git a/site/img/es/app-remote.png b/site/img/es/app-remote.png
new file mode 100644
index 0000000..6148cf9
Binary files /dev/null and b/site/img/es/app-remote.png differ
diff --git a/site/img/es/app-themes-dark.png b/site/img/es/app-themes-dark.png
new file mode 100644
index 0000000..d14373a
Binary files /dev/null and b/site/img/es/app-themes-dark.png differ
diff --git a/site/img/es/app-themes.png b/site/img/es/app-themes.png
new file mode 100644
index 0000000..dc90f5c
Binary files /dev/null and b/site/img/es/app-themes.png differ
diff --git a/site/img/fr/app-blame-dark.png b/site/img/fr/app-blame-dark.png
new file mode 100644
index 0000000..513cfc0
Binary files /dev/null and b/site/img/fr/app-blame-dark.png differ
diff --git a/site/img/fr/app-blame.png b/site/img/fr/app-blame.png
new file mode 100644
index 0000000..304b2a3
Binary files /dev/null and b/site/img/fr/app-blame.png differ
diff --git a/site/img/fr/app-diff-dark.png b/site/img/fr/app-diff-dark.png
new file mode 100644
index 0000000..2dff0e8
Binary files /dev/null and b/site/img/fr/app-diff-dark.png differ
diff --git a/site/img/fr/app-diff.png b/site/img/fr/app-diff.png
new file mode 100644
index 0000000..ca2ea20
Binary files /dev/null and b/site/img/fr/app-diff.png differ
diff --git a/site/img/fr/app-doc-dark.png b/site/img/fr/app-doc-dark.png
new file mode 100644
index 0000000..9953e9f
Binary files /dev/null and b/site/img/fr/app-doc-dark.png differ
diff --git a/site/img/fr/app-doc.png b/site/img/fr/app-doc.png
new file mode 100644
index 0000000..e9a9d8f
Binary files /dev/null and b/site/img/fr/app-doc.png differ
diff --git a/site/img/fr/app-edit-dark.png b/site/img/fr/app-edit-dark.png
new file mode 100644
index 0000000..f6f749b
Binary files /dev/null and b/site/img/fr/app-edit-dark.png differ
diff --git a/site/img/fr/app-edit.png b/site/img/fr/app-edit.png
new file mode 100644
index 0000000..7b6b875
Binary files /dev/null and b/site/img/fr/app-edit.png differ
diff --git a/site/img/fr/app-notes-dark.png b/site/img/fr/app-notes-dark.png
new file mode 100644
index 0000000..47cdac1
Binary files /dev/null and b/site/img/fr/app-notes-dark.png differ
diff --git a/site/img/fr/app-notes.png b/site/img/fr/app-notes.png
new file mode 100644
index 0000000..c4bd6f8
Binary files /dev/null and b/site/img/fr/app-notes.png differ
diff --git a/site/img/fr/app-pr-dark.png b/site/img/fr/app-pr-dark.png
new file mode 100644
index 0000000..d020520
Binary files /dev/null and b/site/img/fr/app-pr-dark.png differ
diff --git a/site/img/fr/app-pr.png b/site/img/fr/app-pr.png
new file mode 100644
index 0000000..0adeacd
Binary files /dev/null and b/site/img/fr/app-pr.png differ
diff --git a/site/img/fr/app-remote-dark.png b/site/img/fr/app-remote-dark.png
new file mode 100644
index 0000000..209136d
Binary files /dev/null and b/site/img/fr/app-remote-dark.png differ
diff --git a/site/img/fr/app-remote.png b/site/img/fr/app-remote.png
new file mode 100644
index 0000000..08c7fb6
Binary files /dev/null and b/site/img/fr/app-remote.png differ
diff --git a/site/img/fr/app-themes-dark.png b/site/img/fr/app-themes-dark.png
new file mode 100644
index 0000000..5d9e6f8
Binary files /dev/null and b/site/img/fr/app-themes-dark.png differ
diff --git a/site/img/fr/app-themes.png b/site/img/fr/app-themes.png
new file mode 100644
index 0000000..cef0c7b
Binary files /dev/null and b/site/img/fr/app-themes.png differ
diff --git a/site/img/ja/app-blame-dark.png b/site/img/ja/app-blame-dark.png
new file mode 100644
index 0000000..5a60b9c
Binary files /dev/null and b/site/img/ja/app-blame-dark.png differ
diff --git a/site/img/ja/app-blame.png b/site/img/ja/app-blame.png
new file mode 100644
index 0000000..37ef0f0
Binary files /dev/null and b/site/img/ja/app-blame.png differ
diff --git a/site/img/ja/app-diff-dark.png b/site/img/ja/app-diff-dark.png
new file mode 100644
index 0000000..9ad08db
Binary files /dev/null and b/site/img/ja/app-diff-dark.png differ
diff --git a/site/img/ja/app-diff.png b/site/img/ja/app-diff.png
new file mode 100644
index 0000000..d780bbf
Binary files /dev/null and b/site/img/ja/app-diff.png differ
diff --git a/site/img/ja/app-doc-dark.png b/site/img/ja/app-doc-dark.png
new file mode 100644
index 0000000..5d36248
Binary files /dev/null and b/site/img/ja/app-doc-dark.png differ
diff --git a/site/img/ja/app-doc.png b/site/img/ja/app-doc.png
new file mode 100644
index 0000000..1dde3d8
Binary files /dev/null and b/site/img/ja/app-doc.png differ
diff --git a/site/img/ja/app-edit-dark.png b/site/img/ja/app-edit-dark.png
new file mode 100644
index 0000000..d5fe273
Binary files /dev/null and b/site/img/ja/app-edit-dark.png differ
diff --git a/site/img/ja/app-edit.png b/site/img/ja/app-edit.png
new file mode 100644
index 0000000..32fa292
Binary files /dev/null and b/site/img/ja/app-edit.png differ
diff --git a/site/img/ja/app-notes-dark.png b/site/img/ja/app-notes-dark.png
new file mode 100644
index 0000000..8ab1daf
Binary files /dev/null and b/site/img/ja/app-notes-dark.png differ
diff --git a/site/img/ja/app-notes.png b/site/img/ja/app-notes.png
new file mode 100644
index 0000000..7ec91ff
Binary files /dev/null and b/site/img/ja/app-notes.png differ
diff --git a/site/img/ja/app-pr-dark.png b/site/img/ja/app-pr-dark.png
new file mode 100644
index 0000000..8aa5076
Binary files /dev/null and b/site/img/ja/app-pr-dark.png differ
diff --git a/site/img/ja/app-pr.png b/site/img/ja/app-pr.png
new file mode 100644
index 0000000..30d7506
Binary files /dev/null and b/site/img/ja/app-pr.png differ
diff --git a/site/img/ja/app-remote-dark.png b/site/img/ja/app-remote-dark.png
new file mode 100644
index 0000000..8d63d9d
Binary files /dev/null and b/site/img/ja/app-remote-dark.png differ
diff --git a/site/img/ja/app-remote.png b/site/img/ja/app-remote.png
new file mode 100644
index 0000000..3bd56d9
Binary files /dev/null and b/site/img/ja/app-remote.png differ
diff --git a/site/img/ja/app-themes-dark.png b/site/img/ja/app-themes-dark.png
new file mode 100644
index 0000000..54b7cbe
Binary files /dev/null and b/site/img/ja/app-themes-dark.png differ
diff --git a/site/img/ja/app-themes.png b/site/img/ja/app-themes.png
new file mode 100644
index 0000000..3306fe9
Binary files /dev/null and b/site/img/ja/app-themes.png differ
diff --git a/site/img/nl/app-blame-dark.png b/site/img/nl/app-blame-dark.png
new file mode 100644
index 0000000..f15c455
Binary files /dev/null and b/site/img/nl/app-blame-dark.png differ
diff --git a/site/img/nl/app-blame.png b/site/img/nl/app-blame.png
new file mode 100644
index 0000000..35f32e9
Binary files /dev/null and b/site/img/nl/app-blame.png differ
diff --git a/site/img/nl/app-diff-dark.png b/site/img/nl/app-diff-dark.png
new file mode 100644
index 0000000..92005ff
Binary files /dev/null and b/site/img/nl/app-diff-dark.png differ
diff --git a/site/img/nl/app-diff.png b/site/img/nl/app-diff.png
new file mode 100644
index 0000000..ef50de8
Binary files /dev/null and b/site/img/nl/app-diff.png differ
diff --git a/site/img/nl/app-doc-dark.png b/site/img/nl/app-doc-dark.png
new file mode 100644
index 0000000..0d43b65
Binary files /dev/null and b/site/img/nl/app-doc-dark.png differ
diff --git a/site/img/nl/app-doc.png b/site/img/nl/app-doc.png
new file mode 100644
index 0000000..b1c0ac8
Binary files /dev/null and b/site/img/nl/app-doc.png differ
diff --git a/site/img/nl/app-edit-dark.png b/site/img/nl/app-edit-dark.png
new file mode 100644
index 0000000..d3a43b4
Binary files /dev/null and b/site/img/nl/app-edit-dark.png differ
diff --git a/site/img/nl/app-edit.png b/site/img/nl/app-edit.png
new file mode 100644
index 0000000..69492a1
Binary files /dev/null and b/site/img/nl/app-edit.png differ
diff --git a/site/img/nl/app-notes-dark.png b/site/img/nl/app-notes-dark.png
new file mode 100644
index 0000000..989d485
Binary files /dev/null and b/site/img/nl/app-notes-dark.png differ
diff --git a/site/img/nl/app-notes.png b/site/img/nl/app-notes.png
new file mode 100644
index 0000000..6d87e8e
Binary files /dev/null and b/site/img/nl/app-notes.png differ
diff --git a/site/img/nl/app-pr-dark.png b/site/img/nl/app-pr-dark.png
new file mode 100644
index 0000000..39772a0
Binary files /dev/null and b/site/img/nl/app-pr-dark.png differ
diff --git a/site/img/nl/app-pr.png b/site/img/nl/app-pr.png
new file mode 100644
index 0000000..4090e06
Binary files /dev/null and b/site/img/nl/app-pr.png differ
diff --git a/site/img/nl/app-remote-dark.png b/site/img/nl/app-remote-dark.png
new file mode 100644
index 0000000..533422b
Binary files /dev/null and b/site/img/nl/app-remote-dark.png differ
diff --git a/site/img/nl/app-remote.png b/site/img/nl/app-remote.png
new file mode 100644
index 0000000..0141c54
Binary files /dev/null and b/site/img/nl/app-remote.png differ
diff --git a/site/img/nl/app-themes-dark.png b/site/img/nl/app-themes-dark.png
new file mode 100644
index 0000000..a44f680
Binary files /dev/null and b/site/img/nl/app-themes-dark.png differ
diff --git a/site/img/nl/app-themes.png b/site/img/nl/app-themes.png
new file mode 100644
index 0000000..a45acf4
Binary files /dev/null and b/site/img/nl/app-themes.png differ
diff --git a/site/img/pt/app-blame-dark.png b/site/img/pt/app-blame-dark.png
new file mode 100644
index 0000000..7e48076
Binary files /dev/null and b/site/img/pt/app-blame-dark.png differ
diff --git a/site/img/pt/app-blame.png b/site/img/pt/app-blame.png
new file mode 100644
index 0000000..13511ff
Binary files /dev/null and b/site/img/pt/app-blame.png differ
diff --git a/site/img/pt/app-diff-dark.png b/site/img/pt/app-diff-dark.png
new file mode 100644
index 0000000..604a812
Binary files /dev/null and b/site/img/pt/app-diff-dark.png differ
diff --git a/site/img/pt/app-diff.png b/site/img/pt/app-diff.png
new file mode 100644
index 0000000..50ed991
Binary files /dev/null and b/site/img/pt/app-diff.png differ
diff --git a/site/img/pt/app-doc-dark.png b/site/img/pt/app-doc-dark.png
new file mode 100644
index 0000000..e44333d
Binary files /dev/null and b/site/img/pt/app-doc-dark.png differ
diff --git a/site/img/pt/app-doc.png b/site/img/pt/app-doc.png
new file mode 100644
index 0000000..74fa9a4
Binary files /dev/null and b/site/img/pt/app-doc.png differ
diff --git a/site/img/pt/app-edit-dark.png b/site/img/pt/app-edit-dark.png
new file mode 100644
index 0000000..f6e5205
Binary files /dev/null and b/site/img/pt/app-edit-dark.png differ
diff --git a/site/img/pt/app-edit.png b/site/img/pt/app-edit.png
new file mode 100644
index 0000000..68cd322
Binary files /dev/null and b/site/img/pt/app-edit.png differ
diff --git a/site/img/pt/app-notes-dark.png b/site/img/pt/app-notes-dark.png
new file mode 100644
index 0000000..24d7cf3
Binary files /dev/null and b/site/img/pt/app-notes-dark.png differ
diff --git a/site/img/pt/app-notes.png b/site/img/pt/app-notes.png
new file mode 100644
index 0000000..2c23014
Binary files /dev/null and b/site/img/pt/app-notes.png differ
diff --git a/site/img/pt/app-pr-dark.png b/site/img/pt/app-pr-dark.png
new file mode 100644
index 0000000..93ba614
Binary files /dev/null and b/site/img/pt/app-pr-dark.png differ
diff --git a/site/img/pt/app-pr.png b/site/img/pt/app-pr.png
new file mode 100644
index 0000000..1f9bc9d
Binary files /dev/null and b/site/img/pt/app-pr.png differ
diff --git a/site/img/pt/app-remote-dark.png b/site/img/pt/app-remote-dark.png
new file mode 100644
index 0000000..fcbb943
Binary files /dev/null and b/site/img/pt/app-remote-dark.png differ
diff --git a/site/img/pt/app-remote.png b/site/img/pt/app-remote.png
new file mode 100644
index 0000000..6a999e1
Binary files /dev/null and b/site/img/pt/app-remote.png differ
diff --git a/site/img/pt/app-themes-dark.png b/site/img/pt/app-themes-dark.png
new file mode 100644
index 0000000..bf75d67
Binary files /dev/null and b/site/img/pt/app-themes-dark.png differ
diff --git a/site/img/pt/app-themes.png b/site/img/pt/app-themes.png
new file mode 100644
index 0000000..e4ae291
Binary files /dev/null and b/site/img/pt/app-themes.png differ
diff --git a/site/img/zh/app-blame-dark.png b/site/img/zh/app-blame-dark.png
new file mode 100644
index 0000000..5ef1b7f
Binary files /dev/null and b/site/img/zh/app-blame-dark.png differ
diff --git a/site/img/zh/app-blame.png b/site/img/zh/app-blame.png
new file mode 100644
index 0000000..4e36ce9
Binary files /dev/null and b/site/img/zh/app-blame.png differ
diff --git a/site/img/zh/app-diff-dark.png b/site/img/zh/app-diff-dark.png
new file mode 100644
index 0000000..fe1da3c
Binary files /dev/null and b/site/img/zh/app-diff-dark.png differ
diff --git a/site/img/zh/app-diff.png b/site/img/zh/app-diff.png
new file mode 100644
index 0000000..a93e34d
Binary files /dev/null and b/site/img/zh/app-diff.png differ
diff --git a/site/img/zh/app-doc-dark.png b/site/img/zh/app-doc-dark.png
new file mode 100644
index 0000000..050412f
Binary files /dev/null and b/site/img/zh/app-doc-dark.png differ
diff --git a/site/img/zh/app-doc.png b/site/img/zh/app-doc.png
new file mode 100644
index 0000000..26e66fa
Binary files /dev/null and b/site/img/zh/app-doc.png differ
diff --git a/site/img/zh/app-edit-dark.png b/site/img/zh/app-edit-dark.png
new file mode 100644
index 0000000..822f52f
Binary files /dev/null and b/site/img/zh/app-edit-dark.png differ
diff --git a/site/img/zh/app-edit.png b/site/img/zh/app-edit.png
new file mode 100644
index 0000000..761b591
Binary files /dev/null and b/site/img/zh/app-edit.png differ
diff --git a/site/img/zh/app-notes-dark.png b/site/img/zh/app-notes-dark.png
new file mode 100644
index 0000000..3c5bca8
Binary files /dev/null and b/site/img/zh/app-notes-dark.png differ
diff --git a/site/img/zh/app-notes.png b/site/img/zh/app-notes.png
new file mode 100644
index 0000000..f5bce73
Binary files /dev/null and b/site/img/zh/app-notes.png differ
diff --git a/site/img/zh/app-pr-dark.png b/site/img/zh/app-pr-dark.png
new file mode 100644
index 0000000..fe6e69f
Binary files /dev/null and b/site/img/zh/app-pr-dark.png differ
diff --git a/site/img/zh/app-pr.png b/site/img/zh/app-pr.png
new file mode 100644
index 0000000..7cabd50
Binary files /dev/null and b/site/img/zh/app-pr.png differ
diff --git a/site/img/zh/app-remote-dark.png b/site/img/zh/app-remote-dark.png
new file mode 100644
index 0000000..2e33355
Binary files /dev/null and b/site/img/zh/app-remote-dark.png differ
diff --git a/site/img/zh/app-remote.png b/site/img/zh/app-remote.png
new file mode 100644
index 0000000..8a637ef
Binary files /dev/null and b/site/img/zh/app-remote.png differ
diff --git a/site/img/zh/app-themes-dark.png b/site/img/zh/app-themes-dark.png
new file mode 100644
index 0000000..759c73c
Binary files /dev/null and b/site/img/zh/app-themes-dark.png differ
diff --git a/site/img/zh/app-themes.png b/site/img/zh/app-themes.png
new file mode 100644
index 0000000..3bd3d19
Binary files /dev/null and b/site/img/zh/app-themes.png differ
diff --git a/site/index.html b/site/index.html
index b3d0f46..ed5b617 100644
--- a/site/index.html
+++ b/site/index.html
@@ -559,8 +559,8 @@
Docs are meant to be diffed read.
-
-
+ A project doc, formatted — with history in the margin: one avatar per run of blocks, each one a doorway to its commit.
@@ -594,8 +594,8 @@
Your agent writes plans. Review them like a coworker's.
-
-
+ An agent's spec, reviewed in place: three signed notes anchored
@@ -659,8 +659,8 @@
The whole docs review, from the rendered page.
-
-
+ A documentation PR as a rendered diff: the one changed sentence
@@ -689,8 +689,8 @@
The whole docs review, from the rendered page.
-
-
+ The conversation as a document: review comments render their
@@ -719,8 +719,8 @@
A proper reader for the Markdown already on your disk.
-
-
+ Folders come in as living trees, every location wears its git branch, and
@@ -783,8 +783,8 @@
Rea
-
-
+ Edit mode: the active block shows its source; everything else stays rendered.
@@ -803,8 +803,8 @@
Git
-
-
+ A doc read straight from GitHub: the provenance bar always says where you
@@ -814,8 +814,8 @@
Git
-
-
+ Settings → Appearance: three live theme previews, rendered by the real pipeline — click a card to switch.
diff --git a/site/ja/docs/cli/index.html b/site/ja/docs/cli/index.html
index 211eed4..f671762 100644
--- a/site/ja/docs/cli/index.html
+++ b/site/ja/docs/cli/index.html
@@ -97,10 +97,10 @@
開くと何が起きるか
ルールはあえて退屈にしてあります。スクリプトが安心して頼れるように。
ファイルは、サイドバーの
- Open Files セクションにピン留めされた項目として
+ 「開いているファイル」セクションにピン留めされた項目として
並び、最後に渡したファイルが表示されます。
Bestanden landen in de sectie
- Open Files van de zijbalk
+ Geopende bestanden van de zijbalk
als vastgezette regels, en het laatst doorgegeven bestand wordt
getoond.
Mappen — inclusief git-worktrees — worden
- Locations: doorbladerbare
+ Locaties: doorbladerbare
bomen van de Markdown-bestanden erin.
Draait de app al? Alles opent in het voorste
venster. Er wordt nooit een tweede app-instantie gestart.
@@ -117,15 +117,15 @@
Wat openen doet
Worktrees, en naar één bestand wijzen
Geef een map en een bestand samen door en je krijgt beide
- gedragingen tegelijk: de map opent als Location, het bestand opent
+ gedragingen tegelijk: de map opent als Locatie, het bestand opent
vastgezet en wordt getoond. Dat is het hele recept voor "open deze
worktree en laat me dit doc zien":
$ pullmark ~/wt/feature ~/wt/feature/docs/plan.md
-
De boom van de worktree landt in Locations (met zijn branch-chip,
+
De boom van de worktree landt in Locaties (met zijn branch-chip,
want een worktree is gewoon een git-checkout), plan.md
- wordt vastgezet in Open Files en gerenderd. Rechtsklik erop en kies
+ wordt vastgezet in Geopende bestanden en gerenderd. Rechtsklik erop en kies
Reveal in Location om te springen naar waar het in
- de boom zit. Dit werkt hetzelfde wanneer de Location al open was —
+ de boom zit. Dit werkt hetzelfde wanneer de Locatie al open was —
een bestand openen dat erin woont maakt nooit een dubbele wereld,
alleen een regel in de werkset.
De volgorde maakt niet uit voor het map/bestand-paar, maar het
@@ -148,7 +148,7 @@
Gerenderde diffs vanuit de shell
$ pullmark --diff-with=old.md new.md # twee bestanden, old.md als basis$ pullmark --diff ~/wt/feature ~/wt/feature/docs/plan.md
# een worktree, plan.md als diff
-
Mappen die je erbij doorgeeft openen nog steeds als Locations, en
+
Mappen die je erbij doorgeeft openen nog steeds als Locaties, en
elke vorm heeft een tweelingbroer in de app, in het Compare-menu van
de toolbar (inclusief Compare Revisions… en
Compare with File…). Omdat --diff en
@@ -166,7 +166,7 @@
Exitcodes
Voorbeelden
$ pullmark README.md # één bestand lezen$ pullmark ~/notes # een map doorbladeren
-$ pullmark docs specs/design.md # een Location plus één document
+$ pullmark docs specs/design.md # een Locatie plus één document$ pullmark ~/wt/feature docs/plan.md # een worktree met één document$ pullmark --diff docs/plan.md # wat de laatste bewerkingen veranderden$ pullmark -- --weird-filename.md # -- beëindigt de optieverwerking
de bijbehorende acties. Een notitie verwijderen is hoe je haar
afhandelt: geen status, geen archief — een verwerkte notitie is een
afwezige notitie.
-
De chip — rijen in Open Files dragen een chip
+
De chip — rijen in Geopende bestanden dragen een chip
met het aantal notities zolang een document ze nog bevat. Hij leeft
mee: terwijl een agent het bestand doorwerkt en notities verwijdert,
loopt de teller terug en verdwijnen de ballonnetjes voor je
diff --git a/site/nl/docs/features/index.html b/site/nl/docs/features/index.html
index 9b165a5..adacc71 100644
--- a/site/nl/docs/features/index.html
+++ b/site/nl/docs/features/index.html
@@ -85,7 +85,7 @@
Lezen
afbeeldingen en links werken, en een klik op een link naar een ander
Markdown-bestand opent het ter plekke (als
preview wanneer het in een
- open Location staat).
+ open Locatie staat).
Navigatie — de outline-zijbalk (⌥⌘O), ⌘F zoeken
op de pagina, ⇧⌘F zoeken door alle bestanden in de zijbalk, en ⌘K
Open Quickly voor koppen, bestanden, PR's, recente items — of plak
@@ -145,13 +145,13 @@
GitHub, zonder de browser
herkomstbalk pint owner/repo @ ref · pad vast, met een
weg terug naar GitHub.
Blader door hele repo's — laad de Markdown-boom
- van een repo in Locations,
+ van een repo in Locaties,
wissel van branch, vergelijk met andere branches, bekijk blame —
privérepo's gebruiken de credentials die PR's al gebruiken, en niets
van wat wordt opgehaald raakt ooit de schijf.
Branches en worktrees — lokale checkouts dragen
een branch-chip; het bijbehorende menu opent worktrees als eigen
- Locations en leest andere branches op afstand. Lokaal wint altijd
+ Locaties en leest andere branches op afstand. Lokaal wint altijd
van remote wanneer een worktree de branch al heeft.
Dotfiles en verborgen mappen in Locaties —
.github/-docs en verwanten. Ook te schakelen met
⇧⌘. (de combinatie van de Finder zelf) of View → Show
- Hidden Files; elke open Location scant opnieuw bij het
+ Hidden Files; elke open Locatie scant opnieuw bij het
omzetten.
Preview First toont een bestand met één klik zonder het vast
- te houden — één cursieve regel (in Open Files, of onder zijn
+ te houden — één cursieve regel (in Geopende bestanden, of onder zijn
GitHub-repo) die de volgende preview vervangt; dubbelklik of
begin te bewerken om het te houden. Open Fully houdt elk bestand
dat je aanklikt vast. Geldt voor lokale mappen en doorbladerde
diff --git a/site/nl/docs/shortcuts/index.html b/site/nl/docs/shortcuts/index.html
index e959c87..bca89de 100644
--- a/site/nl/docs/shortcuts/index.html
+++ b/site/nl/docs/shortcuts/index.html
@@ -101,7 +101,7 @@
View (het weergavemenu)
Show/Hide Outline
⌥⌘O
In een lokaal document
Show/Hide Markdown Source
⌥⌘U
Reload Document
⌘R
In een lokaal document
-
Show/Hide Hidden Files
⇧⌘.
Dotfiles in Locations — de combinatie van de Finder zelf
+
Show/Hide Hidden Files
⇧⌘.
Dotfiles in Locaties — de combinatie van de Finder zelf
Show/Hide Margin Notes
—
Notitieballonnetjes in gerenderde documenten
Zoom In / Out
⌘= / ⌘-
⌘+ werkt ook; knijpen en ⌘-scrollen op de pagina eveneens
hebt, de plekken waar je bladert, de pull requests die je reviewt, en
waar je bent geweest.
-
Open Files
+
Geopende bestanden
De werkset: elk document dat je expliciet hebt geopend — vanuit de
Finder, met slepen & neerzetten, ⌘O, de
command line, of door een bestand uit een
- Location vast te houden. Plat, herordenbaar door te slepen, elke rij
+ Locatie vast te houden. Plat, herordenbaar door te slepen, elke rij
te verwijderen met de ✕ bij hover (of ⌫ op de geselecteerde rij).
Rechtsklik op de sectiekop voor Close All.
Previews
-
Eén klik op een bestand binnen een Location en het rendert direct —
- en verschijnt in Open Files als preview: één cursieve regel,
+
Eén klik op een bestand binnen een Locatie en het rendert direct —
+ en verschijnt in Geopende bestanden als preview: één cursieve regel,
altijd als laatste in de sectie. Klik op een ander bestand en de
preview-regel wordt vervangen, dus bladeren door een grote boom
stapelt nooit rijen op. Het is hetzelfde idee als de preview-tabs van
@@ -98,19 +98,19 @@
Previews
Remote repo's previewen op dezelfde manier, op dezelfde
plek. Bladeren door de boom van een GitHub-repo, of links
volgen binnen een remote document, zet dezelfde ene cursieve regel in
- Open Files — met een boekicoon en een tweede regel
+ Geopende bestanden — met een boekicoon en een tweede regel
owner/repo @ ref, omdat het bestand niet op je Mac
staat. Er is altijd maar één preview per venster, lokaal of
remote: iets previewen vervangt wat je daarvoor aan het previewen
was. Een remote doc vasthouden (dubbelklik of Keep Open) is wat hem
bij zijn repo archiveert — hij verhuist naar de vastgezette lijst van
- de repo onder Locations. ⌘K opent direct vastgezet, want een URL
+ de repo onder Locaties. ⌘K opent direct vastgezet, want een URL
plakken is expliciete intentie.
-
Elke rij in Open Files die binnen een open Location woont krijgt
+
Elke rij in Geopende bestanden die binnen een open Locatie woont krijgt
Reveal in Location in zijn rechtsklikmenu — de sprong
terug van "wat ik aan het lezen ben" naar "waar het woont".
-
Locations
+
Locaties
Doorbladerbare startpunten, waar ze ook wonen. Twee soorten delen
de sectie, te onderscheiden aan het icoon:
@@ -128,7 +128,7 @@
Locations
Worktrees — elke worktree van de repo, met een
vinkje op degene die deze rij is; kies een andere om die als eigen
- Location te openen. Worktrees worden vanuit PullMark nooit
+ Locatie te openen. Worktrees worden vanuit PullMark nooit
uitgecheckt of omgeschakeld — de app opent de map die er al
staat.
View Branch from GitHub — lees de bestanden van
@@ -146,7 +146,7 @@
Locations
vastgehouden docs van de repo staan boven de boom, zodat ze nooit
verdrinken onder een grote repo; een vastgehouden doc die in de boom
zichtbaar is wordt daar gewoon weergegeven. (Een doc die je alleen
- aan het previewen bent staat in Open Files,
+ aan het previewen bent staat in Geopende bestanden,
niet hier.)
Een map waarvan het pad niet meer oplost (een niet-geactiveerd
volume, een verwijderde worktree) dimt met een vraagtekenbadge in
@@ -176,7 +176,7 @@
Pull Requests
voor verwijderd, → in cirkel voor hernoemd, potlood
in cirkel voor gewijzigd.
-
Recents
+
Recent
Recent geopende bestanden, mappen en pull requests die hierboven
niet al zichtbaar zijn. PR-regels dragen hun live statusicoon; een
recent item waarvan het bestand zoek is dimt (klokbadge) in plaats
@@ -188,7 +188,7 @@
Dingen verwijderen
Hover over een rij op het hoogste niveau voor de ✕ — die haalt de
rij uit de zijbalk, nooit iets van schijf of van GitHub. ⌫ op een
geselecteerde rij doet hetzelfde. Bestanden binnen de boom van een
- Location hebben geen ✕: ze zijn de inhoud van een plek, geen
+ Locatie hebben geen ✕: ze zijn de inhoud van een plek, geen
zijbalkitems.
"… changed while you were editing this block — nothing was
diff te tonen.
Gedimde rijen: mappen en recente items die "er niet zijn"
-
Een Location met een vraagtekenbadge, of een grijs recent item,
+
Een Locatie met een vraagtekenbadge, of een grijs recent item,
betekent dat het pad op dit moment niet oplost — een
niet-geactiveerd volume, een gewisselde git-branch, een verwijderde
worktree. Rijen dimmen met opzet in plaats van te verdwijnen: ze
diff --git a/site/nl/index.html b/site/nl/index.html
index c40059e..9cc0fcd 100644
--- a/site/nl/index.html
+++ b/site/nl/index.html
@@ -36,7 +36,7 @@
"license": "https://github.com/jedijashwa/pullmark/blob/main/LICENSE",
"url": "https://pullmark.app/nl/",
"downloadUrl": "https://github.com/jedijashwa/pullmark/releases/latest/download/PullMark.dmg",
- "screenshot": "https://pullmark.app/img/app-doc.png",
+ "screenshot": "https://pullmark.app/img/nl/app-doc.png",
"description": "Een native macOS-app die lokale Markdown rendert zoals lezers die te zien krijgen en documentatiezware pull requests op GitHub reviewt als gerenderde diffs met markering op woordniveau.",
"inLanguage": "nl",
"softwareHelp": { "@type": "CreativeWork", "url": "https://pullmark.app/docs/" }
@@ -560,8 +560,8 @@
Docs zijn er om te diffen lezen.
-
-
+ Een projectdoc, opgemaakt — met de geschiedenis in de kantlijn: één avatar per reeks blokken, elk een deur naar zijn commit.
@@ -597,8 +597,8 @@
Je agent schrijft plannen. Review ze als het werk van een collega.
-
-
+ De spec van een agent, ter plekke gereviewd: drie ondertekende
@@ -670,8 +670,8 @@
De hele documentatiereview, vanaf de gerenderde pagina.
-
-
+ Een documentatie-PR als gerenderde diff: de ene gewijzigde zin
@@ -701,8 +701,8 @@
De hele documentatiereview, vanaf de gerenderde pagina.
-
-
+ De conversatie als document: reviewcomments renderen hun tabellen
@@ -731,12 +731,12 @@
Een echte reader voor de Markdown die al op je schijf staat.
-
-
+
+ Mappen komen binnen als levende bomen, elke locatie draagt haar git-branch,
- en bladeren toont bestanden als previews — de cursieve regel in Open Files die
+ en bladeren toont bestanden als previews — de cursieve regel in Geopende bestanden die
door je volgende klik wordt vervangen. Pull requests staan naast je lokale bestanden,
en de titelbalk weet waar je bent.
@@ -754,7 +754,7 @@
Een echte reader voor de Markdown die al op je schijf staat.
veranderd".
Bladeren zonder jezelf te bedelven — klik je met één klik door
een map of repo, dan verschijnt elk bestand als preview: één cursieve
- regel in Open Files die je volgende klik vervangt. Dubbelklik (of begin gewoon te
+ regel in Geopende bestanden die je volgende klik vervangt. Dubbelklik (of begin gewoon te
bewerken) om hem te houden.
Outline-zijbalk — een kaart van je koppen in navigatorstijl,
één schakelaar verwijderd.
@@ -802,8 +802,8 @@
Lez
-
-
+ Editmodus: het actieve blok toont zijn bron; al het andere blijft gerenderd.
@@ -823,9 +823,9 @@
Git
-
-
+
+ Een doc rechtstreeks van GitHub gelezen: de herkomstbalk zegt altijd waar
je bent — repo, branch, vastgepinde commit — en de branch-chip wisselt of opent
@@ -834,8 +834,8 @@
Git
-
-
+ Settings → Appearance (instellingen → weergave): drie live themapreviews, gerenderd door de echte pipeline — klik op een kaart om te wisselen.
diff --git a/site/nl/uses/agents/index.html b/site/nl/uses/agents/index.html
index 05c0070..39f486f 100644
--- a/site/nl/uses/agents/index.html
+++ b/site/nl/uses/agents/index.html
@@ -453,8 +453,8 @@
Lees gerenderd. Noteer ter plekke. Geef het terug.
-
-
+ De spec van een agent, een eerste reviewronde: ondertekende
@@ -561,8 +561,8 @@
En als het document wél ter review gaat…
-
-
+ Dezelfde reviewinstincten, gericht op een pull request — de
diff --git a/site/pt/docs/cli/index.html b/site/pt/docs/cli/index.html
index 557ca37..2044008 100644
--- a/site/pt/docs/cli/index.html
+++ b/site/pt/docs/cli/index.html
@@ -99,11 +99,11 @@
O que abrir faz
confiar nelas:
Arquivos caem na seção
- Open Files (arquivos
- abertos) da barra lateral como entradas fixadas, e o último arquivo
- passado é o exibido.
+ Arquivos Abertos da barra
+ lateral como entradas fixadas, e o último arquivo passado é o
+ exibido.
Pastas — incluindo worktrees git — viram
- Locations: árvores
+ Localizações: árvores
navegáveis dos arquivos Markdown lá dentro.
Já em execução? Tudo abre na janela da frente.
Uma segunda instância do app nunca é iniciada.
@@ -115,17 +115,18 @@
O que abrir faz
Worktrees, e apontando para um arquivo
Passe uma pasta e um arquivo juntos e você ganha os dois
- comportamentos de uma vez: a pasta abre como Location, o arquivo abre
+ comportamentos de uma vez: a pasta abre como Localização, o arquivo abre
fixado e exibido. Essa é a receita inteira de “abra esta worktree e me
mostre este doc”:
$ pullmark ~/wt/feature ~/wt/feature/docs/plan.md
-
A árvore da worktree cai em Locations (com seu chip de branch, já
+
A árvore da worktree cai em Localizações (com seu chip de branch, já
que uma worktree é só um checkout git), plan.md fica
- fixado em Open Files e renderizado. Clique nele com o botão direito e
- escolha Reveal in Location (revelar no Location) para
- pular até onde ele está na árvore. Funciona igual quando o Location já
- estava aberto — abrir um arquivo que mora dentro dele nunca cria um
- mundo duplicado, só uma entrada no conjunto de trabalho.
+ fixado em Arquivos Abertos e renderizado. Clique nele com o botão
+ direito e escolha Reveal in Location (revelar na
+ Localização) para pular até onde ele está na árvore. Funciona igual
+ quando a Localização já estava aberta — abrir um arquivo que mora
+ dentro dela nunca cria um mundo duplicado, só uma entrada no conjunto
+ de trabalho.
A ordem não importa para o par pasta/arquivo, mas o último
arquivo passado é o exibido, então deixe por último o documento
que você quer na tela.
@@ -144,7 +145,7 @@
Diffs renderizados a partir do shell
$ pullmark --diff-with=old.md new.md # dois arquivos, old.md como base$ pullmark --diff ~/wt/feature ~/wt/feature/docs/plan.md
# uma worktree, plan.md em diff
-
Pastas passadas junto ainda abrem como Locations, e cada forma tem
+
Pastas passadas junto ainda abrem como Localizações, e cada forma tem
um gêmeo dentro do app no menu Compare da barra de ferramentas
(incluindo Compare Revisions… e Compare with
File…). Como --diff e --diff-with
@@ -162,7 +163,7 @@
Códigos de saída
Exemplos
$ pullmark README.md # ler um arquivo$ pullmark ~/notes # navegar por uma pasta
-$ pullmark docs specs/design.md # um Location mais um documento
+$ pullmark docs specs/design.md # uma Localização mais um documento$ pullmark ~/wt/feature docs/plan.md # uma worktree, exibindo um doc$ pullmark --diff docs/plan.md # o que as últimas edições mudaram$ pullmark -- --weird-filename.md # -- encerra a análise de opções
uma nota para suas ações. Apagar uma nota é como ela se resolve: sem
estado, sem arquivo morto — uma nota resolvida é uma nota
ausente.
-
O chip — linhas de Open Files mostram um chip
+
O chip — linhas de Arquivos Abertos mostram um chip
com a contagem de comentários enquanto um documento ainda carrega
notas. É ao vivo: conforme um agente trabalha pelo arquivo apagando
notas, a contagem cai e os balões desaparecem na sua frente.
Arquivos vivos — documentos re-renderizam ao
serem salvos em qualquer editor; imagens e links relativos resolvem,
e clicar num link para outro arquivo Markdown o abre no lugar (como
- prévia quando ele mora num
- Location aberto).
+ prévia quando ele mora numa
+ Localização aberta).
Navegação — a barra lateral de estrutura (⌥⌘O),
busca na página com ⌘F, busca em todos os arquivos da barra lateral
com ⇧⌘F, e o Open Quickly (abrir rapidamente) com ⌘K para títulos,
@@ -147,12 +147,12 @@
GitHub, sem o navegador
caminho de volta ao GitHub.
Navegue por repositórios inteiros — carregue a
árvore Markdown de um repositório em
- Locations, troque de
+ Localizações, troque de
branch, compare com outras branches, veja o blame — repositórios
privados usam as credenciais que os PRs já usam, e nada do que é
buscado toca o disco.
Branches e worktrees — checkouts locais vestem um
- chip de branch; seu menu abre worktrees como Locations próprios e lê
+ chip de branch; seu menu abre worktrees como Localizações próprias e lê
outras branches remotamente. Local sempre ganha do remoto quando uma
worktree já tem a branch.
Dotfiles e pastas ocultas em Locations — docs em
+
Dotfiles e pastas ocultas em Localizações — docs em
.github/ e afins. Também alternável com
⇧⌘. (o mesmo atalho do Finder) ou View → Show Hidden
- Files; cada Location aberto re-escaneia na troca.
+ Files; cada Localização aberta re-escaneia na troca.
Preview First mostra um arquivo com um clique sem mantê-lo —
- uma entrada em itálico (em Open Files, ou sob seu repositório do
+ uma entrada em itálico (em Arquivos Abertos, ou sob seu repositório do
GitHub) que a próxima prévia substitui; clique duas vezes ou comece
a editar para mantê-lo. Open Fully mantém cada arquivo que você
clica. Vale para pastas locais e repositórios navegados do GitHub
diff --git a/site/pt/docs/shortcuts/index.html b/site/pt/docs/shortcuts/index.html
index 0d8dd9e..c0b1bd2 100644
--- a/site/pt/docs/shortcuts/index.html
+++ b/site/pt/docs/shortcuts/index.html
@@ -101,7 +101,7 @@
View
Show/Hide Outline
⌥⌘O
Num documento local
Show/Hide Markdown Source
⌥⌘U
Reload Document
⌘R
Num documento local
-
Show/Hide Hidden Files
⇧⌘.
Dotfiles em Locations — o mesmo atalho do Finder
+
Show/Hide Hidden Files
⇧⌘.
Dotfiles em Localizações — o mesmo atalho do Finder
Show/Hide Margin Notes
—
Os balões de nota em documentos renderizados
Zoom In / Out
⌘= / ⌘-
⌘+ também funciona; pinça e ⌘-rolagem na página igualmente
Actual Size
⌘0
diff --git a/site/pt/docs/sidebar/index.html b/site/pt/docs/sidebar/index.html
index e2eed04..bee1099 100644
--- a/site/pt/docs/sidebar/index.html
+++ b/site/pt/docs/sidebar/index.html
@@ -4,7 +4,7 @@
A barra lateral — Documentação do PullMark
-
+
@@ -16,7 +16,7 @@
-
+
@@ -66,18 +66,18 @@
A barra lateral
pelos quais navega, os pull requests que está revisando e por onde você
já passou.
-
Open Files
-
O conjunto de trabalho (arquivos abertos): cada documento que você
+
Arquivos Abertos
+
O conjunto de trabalho: cada documento que você
abriu explicitamente — pelo Finder, arrastar & soltar, ⌘O, a
linha de comando, ou mantendo um arquivo de
- um Location. Plano, reordenável por arrasto, cada linha removível com o
+ uma Localização. Plano, reordenável por arrasto, cada linha removível com o
✕ que aparece ao passar o mouse (ou ⌫ na linha selecionada). Clique com
o botão direito no cabeçalho da seção para Close All
(fechar tudo).
Prévias
-
Um clique num arquivo dentro de um Location e ele renderiza
- imediatamente — e aparece em Open Files como prévia: uma
+
Um clique num arquivo dentro de uma Localização e ele renderiza
+ imediatamente — e aparece em Arquivos Abertos como prévia: uma
entrada em itálico, sempre a última da seção. Clique em outro arquivo e
a entrada de prévia é substituída, então navegar por uma árvore grande
nunca acumula linhas. É a mesma ideia das abas de prévia do VS Code ou
@@ -100,21 +100,21 @@
Prévias
Repositórios remotos fazem prévia do mesmo jeito, no mesmo
lugar. Navegar pela árvore de um repositório do GitHub, ou
seguir links dentro de um documento remoto, coloca a mesma entrada
- única em itálico em Open Files — com um ícone de livro e uma segunda
+ única em itálico em Arquivos Abertos — com um ícone de livro e uma segunda
linha owner/repo @ ref, já que o arquivo não está no seu
Mac. Só existe uma prévia por janela, local ou remota:
pré-visualizar qualquer coisa substitui o que você estava
pré-visualizando antes. Manter um doc remoto (clique duplo ou Keep
Open) é o que o arquiva com seu repositório — ele se move para a lista
- fixada do repositório sob Locations. ⌘K abre já fixando, porque colar
+ fixada do repositório sob Localizações. ⌘K abre já fixando, porque colar
uma URL é intenção explícita.
-
Qualquer linha de Open Files que more dentro de um Location aberto
- ganha Reveal in Location (revelar no Location) no menu
- do botão direito — o salto de volta de “o que estou lendo” para “onde
- isso mora”.
+
Qualquer linha de Arquivos Abertos que more dentro de uma
+ Localização aberta ganha Reveal in Location (revelar
+ na Localização) no menu do botão direito — o salto de volta de “o que
+ estou lendo” para “onde isso mora”.
-
Locations
-
Raízes navegáveis (locais), onde quer que morem. Dois tipos dividem
+
Localizações
+
Raízes navegáveis, onde quer que morem. Dois tipos dividem
a seção, distinguidos pelo ícone:
Linha
Significado
@@ -130,8 +130,8 @@
Locations
de branches e worktrees:
Worktrees — cada worktree do repositório, com uma
- marca na que esta linha é; escolha outra para abri-la como Location
- próprio. Worktrees nunca sofrem checkout nem troca pelo PullMark —
+ marca na que esta linha é; escolha outra para abri-la como Localização
+ própria. Worktrees nunca sofrem checkout nem troca pelo PullMark —
ele abre a pasta que já está lá.
View Branch from GitHub (ver branch do GitHub) —
leia os arquivos de outra branch remotamente, sem tocar no seu
@@ -149,7 +149,7 @@
Locations
repositório ficam acima da árvore, para nunca se afogarem num
repositório grande; um doc mantido que está visível na árvore é
simplesmente representado ali. (Um doc que você está apenas
- pré-visualizando aparece em Open Files, não
+ pré-visualizando aparece em Arquivos Abertos, não
aqui.)
Uma pasta cujo caminho para de resolver (um volume desmontado, uma
worktree apagada) escurece com um selo de interrogação em vez de sumir
@@ -178,8 +178,8 @@
Pull Requests
removido, círculo → para renomeado, círculo com lápis
para modificado.
-
Recents
-
Arquivos, pastas e pull requests abertos recentemente (recentes) que
+
Recentes
+
Arquivos, pastas e pull requests abertos recentemente que
não estão visíveis acima. Entradas de PR carregam seu ícone de status
ao vivo; um recente cujo arquivo sumiu escurece (selo de relógio) em
vez de desaparecer, e revive quando o caminho volta — feito para trocas
@@ -189,7 +189,7 @@
Recents
Removendo coisas
Passe o mouse sobre qualquer linha de nível superior para o ✕ — ele
remove a linha da barra lateral, nunca nada do disco ou do GitHub. ⌫ na
- linha selecionada faz o mesmo. Arquivos dentro da árvore de um Location
+ linha selecionada faz o mesmo. Arquivos dentro da árvore de uma Localização
não têm ✕: eles são conteúdo de um lugar, não itens da barra
lateral.
@@ -207,7 +207,7 @@
Glossário de ícones
Setas de pull request
Um pull request
Bandeja
Review Requests — PRs aguardando a sua revisão
Balão de fala + número
Num arquivo de PR: comentários de revisão não resolvidos.
- Numa linha de Open Files: notas de margem ainda no documento
+ Numa linha de Arquivos Abertos: notas de margem ainda no documento
“… changed while you were editing this block — nothing wa
relatado com clareza, em vez de mostrar um diff vazio.
Linhas escurecidas: pastas e recentes que “não estão lá”
-
Um Location com selo de interrogação, ou um recente acinzentado,
+
Uma Localização com selo de interrogação, ou um recente acinzentado,
significa que o caminho não resolve agora — um volume desmontado, uma
branch git trocada, uma worktree apagada. As linhas escurecem em vez
de sumir de propósito: elas revivem sozinhas quando o caminho volta.
diff --git a/site/pt/index.html b/site/pt/index.html
index b38589e..ab3c69c 100644
--- a/site/pt/index.html
+++ b/site/pt/index.html
@@ -36,7 +36,7 @@
"license": "https://github.com/jedijashwa/pullmark/blob/main/LICENSE",
"url": "https://pullmark.app/pt/",
"downloadUrl": "https://github.com/jedijashwa/pullmark/releases/latest/download/PullMark.dmg",
- "screenshot": "https://pullmark.app/img/app-doc.png",
+ "screenshot": "https://pullmark.app/img/pt/app-doc.png",
"description": "Um app nativo para macOS que renderiza Markdown local do jeito que os leitores vão vê-lo e revisa pull requests do GitHub carregados de documentação como diffs renderizados, com destaques palavra por palavra.",
"softwareHelp": { "@type": "CreativeWork", "url": "https://pullmark.app/docs/" },
"inLanguage": "pt-BR"
@@ -560,8 +560,8 @@
Docs existem para ser diffados lidos.
-
-
+ Um doc de projeto, formatado — com a história na margem: um avatar por sequência de blocos, cada um uma porta para o seu commit.
@@ -597,8 +597,8 @@
Seu agente escreve planos. Revise como se fossem de um colega.
-
-
+ A spec de um agente, revisada no lugar: três notas assinadas,
@@ -668,8 +668,8 @@
A revisão de docs inteira, direto da página renderizada.
-
-
+ Um PR de documentação como diff renderizado: a única frase alterada
@@ -700,8 +700,8 @@
A revisão de docs inteira, direto da página renderizada.
-
-
+ A conversa como documento: comentários de revisão renderizam suas
@@ -730,13 +730,13 @@
Um leitor de verdade para o Markdown que já está no seu disco.
-
-
+
+ Pastas entram como árvores vivas, cada local veste sua branch git, e
- navegar mostra os arquivos como prévias — a entrada em itálico em Open Files
- (arquivos abertos) que o próximo clique substitui. Pull requests ficam ao lado dos seus
+ navegar mostra os arquivos como prévias — a entrada em itálico em
+ Arquivos Abertos que o próximo clique substitui. Pull requests ficam ao lado dos seus
arquivos locais, e a barra de título sabe onde você está.
@@ -753,7 +753,7 @@
Um leitor de verdade para o Markdown que já está no seu disco.
doc”.
Navegue sem se soterrar — vá de clique em clique por uma pasta ou
um repositório e cada arquivo aparece como prévia: uma única entrada em
- itálico em Open Files que o próximo clique substitui. Clique duas vezes (ou
+ itálico em Arquivos Abertos que o próximo clique substitui. Clique duas vezes (ou
simplesmente comece a editar) para mantê-lo.
Outline (estrutura) — um mapa dos seus títulos no estilo
navegador, a um toque de distância.
@@ -801,8 +801,8 @@
Lei
-
-
+ Modo de edição: o bloco ativo mostra seu código-fonte; todo o resto continua renderizado.
@@ -822,9 +822,9 @@
O G
-
-
+
+ Um doc lido direto do GitHub: a barra de procedência sempre diz onde você
está — repositório, branch, commit fixado — e o chip de branch troca ou abre branches
@@ -833,8 +833,8 @@
O G
-
-
+ Settings → Appearance (Ajustes → Aparência): três prévias de tema ao vivo, renderizadas pelo pipeline de verdade — clique num cartão para trocar.
diff --git a/site/pt/uses/agents/index.html b/site/pt/uses/agents/index.html
index a89681d..0ac1929 100644
--- a/site/pt/uses/agents/index.html
+++ b/site/pt/uses/agents/index.html
@@ -451,8 +451,8 @@
Leia renderizado. Anote no lugar. Devolva.
-
-
+ A spec de um agente, primeira passada de revisão: notas assinadas,
@@ -557,8 +557,8 @@
E quando o doc sobe mesmo para revisão…
-
-
+ Os mesmos instintos de revisão, apontados para um pull request — a
diff --git a/site/uses/agents/index.html b/site/uses/agents/index.html
index 845f719..8b9f5c9 100644
--- a/site/uses/agents/index.html
+++ b/site/uses/agents/index.html
@@ -451,8 +451,8 @@
Read rendered. Note in place. Hand it back.
-
-
+ An agent's spec, a first review pass: signed notes anchored to
@@ -556,8 +556,8 @@
And when the doc does go up for review…
-
-
+ The same review instincts, pointed at a pull request — the
diff --git a/site/zh/docs/cli/index.html b/site/zh/docs/cli/index.html
index 3bc22aa..40d5bc0 100644
--- a/site/zh/docs/cli/index.html
+++ b/site/zh/docs/cli/index.html
@@ -96,10 +96,10 @@