diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index 75f6e3b..3076f68 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -2375,12 +2375,21 @@ where /// an external unmount triggers a remount; errors back off and retry. This is /// the entry point for the systemd user service. fn cmd_daemon(mountpoint: Option) -> Result<()> { + let state_dir = AppDirs::new()?.state_dir(); + // A failure an earlier daemon recorded is not this one's. + pdfs_core::mountfail::clear(&state_dir); + let mut failure: Option = None; loop { // Wait until a session is stored. The GUI enables this service on login, // but the service may also start at boot before the user has logged in. wait_for_session(auth::ready, pdfs_fuse::idle_sleep)?; - match mount_once(mountpoint.clone()) { + let outcome = mount_once(mountpoint.clone()); + if outcome.is_ok() { + // The mount came up, so the next failure starts a new run of them. + failure = None; + } + match outcome { Ok(pdfs_fuse::MountOutcome::Shutdown) => { tracing::info!("daemon stopping"); return Ok(()); @@ -2395,13 +2404,51 @@ fn cmd_daemon(mountpoint: Option) -> Result<()> { Err(e) => { // `{:#}` so the whole anyhow chain lands in the log — the top // context alone ("mount failed") never says *why*. - tracing::error!(error = format!("{e:#}"), "mount failed; retrying in 5s"); - pdfs_fuse::idle_sleep(std::time::Duration::from_secs(5)); + let error = format!("{e:#}"); + let now = unix_now(); + let attempts = failure.as_ref().map_or(1, |f| f.attempts.saturating_add(1)); + let delay = mount_retry_delay(attempts); + tracing::error!( + error, + attempts, + retry_secs = delay.as_secs(), + "mount failed; retrying" + ); + let record = pdfs_core::mountfail::MountFailure { + error: error.clone(), + since: failure.as_ref().map_or(now, |f| f.since), + attempts, + next_attempt: now + delay.as_secs() as i64, + }; + if let Err(e) = pdfs_core::mountfail::record(&state_dir, &record) { + tracing::warn!(error = %e, "could not record the mount failure"); + } + pdfs_fuse::notify_status(&format!("Mount failing: {error}")); + failure = Some(record); + pdfs_fuse::idle_sleep(delay); } } } } +/// How long to wait before mount attempt `attempts + 1`, after `attempts` +/// failures in a row. +/// +/// Doubles from 5 s to a 2-minute ceiling. A flat 5 s retry sent about four +/// requests to Proton per attempt, tens of thousands a day from an account +/// whose mount fails on a key, which no retry fixes (`docs/BUGS.md` B263). The +/// ceiling stays at minutes because a cold start without a network fails the +/// same way, and must mount soon after the network returns. +fn mount_retry_delay(attempts: u32) -> std::time::Duration { + const BASE_SECS: u64 = 5; + const MAX_SECS: u64 = 120; + + let factor = 1u64 + .checked_shl(attempts.saturating_sub(1)) + .unwrap_or(u64::MAX); + std::time::Duration::from_secs(BASE_SECS.saturating_mul(factor).min(MAX_SECS)) +} + /// One mount run: resume the session, mount, and block until the mount ends /// (clean shutdown or external unmount). Returns the [`MountOutcome`] so the /// daemon loop can decide whether to exit or remount. @@ -3857,7 +3904,23 @@ fn cmd_diagnose() -> Result<()> { " daemon responding", format!("stopped or unreachable: {e:#}"), ); - println!(" (start it with `systemctl --user start proton-drive.service`)"); + match pdfs_core::mountfail::read(&dirs.state_dir()) { + // A daemon whose mount keeps failing never opens the socket, + // so this is the only place its reason shows (B263). + Some(failure) => report.finding( + DiagnoseLevel::Fail, + " mount", + format!( + "failing for {}, {} attempt(s): {}", + human_secs(unix_now().saturating_sub(failure.since).max(0) as u64), + failure.attempts, + failure.error + ), + ), + None => println!( + " (start it with `systemctl --user start proton-drive.service`)" + ), + } } } @@ -4017,6 +4080,15 @@ mod diagnose_tests { #[cfg(test)] mod login_wait_tests { use super::*; + + /// The mount retry backs off from 5 s to a ceiling of minutes, rather than + /// asking Proton every 5 s forever (`docs/BUGS.md` B263). + #[test] + fn a_failing_mount_backs_off_to_a_ceiling() { + let secs: Vec = (1..=8).map(|n| mount_retry_delay(n).as_secs()).collect(); + assert_eq!(secs, [5, 10, 20, 40, 80, 120, 120, 120]); + assert_eq!(mount_retry_delay(u32::MAX).as_secs(), 120); + } use std::time::Duration; #[test] diff --git a/crates/pdfs-core/src/lib.rs b/crates/pdfs-core/src/lib.rs index ed19c4f..0f79ec4 100644 --- a/crates/pdfs-core/src/lib.rs +++ b/crates/pdfs-core/src/lib.rs @@ -15,6 +15,7 @@ pub mod kernelkey; pub mod keycheck; pub mod localindex; pub mod menu; +pub mod mountfail; pub mod mounts; pub mod opener; pub mod places; diff --git a/crates/pdfs-core/src/mountfail.rs b/crates/pdfs-core/src/mountfail.rs new file mode 100644 index 0000000..130a155 --- /dev/null +++ b/crates/pdfs-core/src/mountfail.rs @@ -0,0 +1,75 @@ +//! Why the daemon's mount keeps failing, for the front ends to read. +//! +//! The control socket opens only once a mount has succeeded, so a daemon whose +//! mount fails on every try had no way to say why. The app and the tray showed +//! "Connecting…" for days while the reason sat in the journal (`docs/BUGS.md` +//! B263). The daemon now writes its last failure to a small file in the state +//! directory, next to the control socket, and removes it once a mount is up. + +use std::path::{Path, PathBuf}; + +use serde::{Deserialize, Serialize}; + +/// The file's name inside the state directory. +const FILE_NAME: &str = "mount-failure.json"; + +/// The last failed mount attempt. +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] +pub struct MountFailure { + /// The error, in English, as the journal has it. + pub error: String, + /// Unix seconds of the first failure in this run of failures. + pub since: i64, + /// Failed attempts in a row. + pub attempts: u32, + /// Unix seconds of the next attempt. + pub next_attempt: i64, +} + +/// Where the failure is kept for the state directory `state_dir`. +pub fn path(state_dir: &Path) -> PathBuf { + state_dir.join(FILE_NAME) +} + +/// Record `failure`, replacing the one before it. Written to a temporary file +/// and renamed, so a reader never sees half of it. +pub fn record(state_dir: &Path, failure: &MountFailure) -> std::io::Result<()> { + let json = serde_json::to_vec(failure).map_err(std::io::Error::other)?; + let tmp = state_dir.join(format!("{FILE_NAME}.tmp")); + std::fs::write(&tmp, json)?; + std::fs::rename(&tmp, path(state_dir)) +} + +/// Forget the failure: a mount is up, or a new daemon has started. +pub fn clear(state_dir: &Path) { + let _ = std::fs::remove_file(path(state_dir)); +} + +/// The recorded failure, if there is one and it can be read. +pub fn read(state_dir: &Path) -> Option { + let bytes = std::fs::read(path(state_dir)).ok()?; + serde_json::from_slice(&bytes).ok() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn a_recorded_failure_reads_back_until_cleared() { + let dir = std::env::temp_dir().join(format!("pdfs-mountfail-{}", std::process::id())); + std::fs::create_dir_all(&dir).unwrap(); + assert_eq!(read(&dir), None); + let failure = MountFailure { + error: "fetch My Files root: missing key".into(), + since: 1_700_000_000, + attempts: 3, + next_attempt: 1_700_000_040, + }; + record(&dir, &failure).unwrap(); + assert_eq!(read(&dir), Some(failure)); + clear(&dir); + assert_eq!(read(&dir), None); + let _ = std::fs::remove_dir_all(&dir); + } +} diff --git a/crates/pdfs-fuse/src/lib.rs b/crates/pdfs-fuse/src/lib.rs index d9bbb0e..75dc15b 100644 --- a/crates/pdfs-fuse/src/lib.rs +++ b/crates/pdfs-fuse/src/lib.rs @@ -124,7 +124,7 @@ use mount::{ }; use reads::{BlockFlight, BlockRing, PREFETCH_BUDGET, Prefetch, ReaderSlot, STREAM_BYPASS_MIN}; use state::{Entry, Intervals, PendingRevision, State, StateGuard, WriteHandle}; -pub use systemd::idle_sleep; +pub use systemd::{idle_sleep, status as notify_status}; use tracing::{debug, error, info, warn}; use transfers::{CountingWriter, JobGuard, OwnedCountingReader, TransferRegistry}; use r#virtual::{ diff --git a/crates/pdfs-fuse/src/mount.rs b/crates/pdfs-fuse/src/mount.rs index 1aeccdc..a35c3a5 100644 --- a/crates/pdfs-fuse/src/mount.rs +++ b/crates/pdfs-fuse/src/mount.rs @@ -540,12 +540,11 @@ pub(crate) fn mount_with( // and sweeps all operating on a mount that no longer exists (`docs/BUGS.md` B44). let mut workers: Vec> = Vec::new(); for worker in 0..DRAIN_WORKERS { - let core = core.clone(); - workers.push( - std::thread::Builder::new() - .name(format!("pdfs-drain-{worker}")) - .spawn(move || core.run_pending_drain(worker == 0))?, - ); + let drain_core = core.clone(); + let spawned = std::thread::Builder::new() + .name(format!("pdfs-drain-{worker}")) + .spawn(move || drain_core.run_pending_drain(worker == 0)); + keep_or_abandon(&core, control_socket, &mut workers, spawned)?; } // Start the folder-sync engine. It watches every mirror folder, polls the @@ -565,24 +564,22 @@ pub(crate) fn mount_with( info!("conflict sweep disabled by configuration"); } else { info!(mode = ?sweep_mode, "conflict sweep enabled"); - let core = core.clone(); - workers.push( - std::thread::Builder::new() - .name("pdfs-conflict-sweep".into()) - .spawn(move || core.run_conflict_sweep_loop())?, - ); + let sweep_core = core.clone(); + let spawned = std::thread::Builder::new() + .name("pdfs-conflict-sweep".into()) + .spawn(move || sweep_core.run_conflict_sweep_loop()); + keep_or_abandon(&core, control_socket, &mut workers, spawned)?; } // Watch the link for the life of the mount: a mount from the cache waits for // the network to come back, and an online one can lose it at any moment and // must notice it coming back just the same. { - let core = core.clone(); - workers.push( - std::thread::Builder::new() - .name("pdfs-online-probe".into()) - .spawn(move || core.run_online_probe())?, - ); + let probe_core = core.clone(); + let spawned = std::thread::Builder::new() + .name("pdfs-online-probe".into()) + .spawn(move || probe_core.run_online_probe()); + keep_or_abandon(&core, control_socket, &mut workers, spawned)?; } // Keep the launcher prompt's "This computer" index fresh. Its own thread: @@ -593,11 +590,10 @@ pub(crate) fn mount_with( let transfers = core.transfers.clone(); let mountpoint = mountpoint.to_path_buf(); let shutdown = core.shutdown.clone(); - workers.push( - std::thread::Builder::new() - .name("pdfs-localindex".into()) - .spawn(move || run_local_index(db, indexing, transfers, mountpoint, shutdown))?, - ); + let spawned = std::thread::Builder::new() + .name("pdfs-localindex".into()) + .spawn(move || run_local_index(db, indexing, transfers, mountpoint, shutdown)); + keep_or_abandon(&core, control_socket, &mut workers, spawned)?; } // Bind the control socket before the FUSE session takes over the thread. A @@ -606,12 +602,18 @@ pub(crate) fn mount_with( let old_umask = unsafe { libc::umask(0o77) }; let listener_res = UnixListener::bind(control_socket); unsafe { libc::umask(old_umask) }; - let listener = listener_res?; + let listener = match listener_res { + Ok(listener) => listener, + Err(error) => { + abandon_workers(&core, control_socket, workers); + return Err(error); + } + }; // Owner-only before anything can connect: a peer on this socket commands the // daemon's authenticated session without a credential of its own (B6). if let Err(e) = pdfs_core::config::restrict_socket(control_socket) { error!(error = %e, "cannot restrict control socket permissions; refusing to serve"); - let _ = std::fs::remove_file(control_socket); + abandon_workers(&core, control_socket, workers); return Err(std::io::Error::other(format!( "control socket permissions: {e}" ))); @@ -622,7 +624,7 @@ pub(crate) fn mount_with( let bg = match spawn_session(&core, mountpoint, root) { Ok(session) => session, Err(error) => { - let _ = std::fs::remove_file(control_socket); + abandon_workers(&core, control_socket, workers); return Err(error); } }; @@ -642,7 +644,7 @@ pub(crate) fn mount_with( Err(error) => { // A failure here abandons the mount, so the background threads // started above have to be told to stop with it. - stop_workers(&core, control_socket, workers); + abandon_workers(&core, control_socket, workers); let secondaries = core.mounts.lock().close_and_drain(); for (id, mount) in secondaries { if let Err(unmount_error) = mount.teardown() { @@ -692,8 +694,12 @@ pub(crate) fn mount_with( } } // The mount is live and the control socket answers: this is the moment the - // unit is actually usable, which is what `Type=notify` reports. + // unit is actually usable, which is what `Type=notify` reports. Whatever + // failure an earlier attempt recorded for the front ends is over. systemd::ready(); + if let Some(state_dir) = control_socket.parent() { + pdfs_core::mountfail::clear(state_dir); + } // Re-establish on-demand mounts only after the primary session is live. // Keep the worker so shutdown can close publication, wait for any in-flight @@ -859,6 +865,43 @@ fn stop_workers(core: &Core, control_socket: &Path, workers: Vec>) { + halt_workers(core, control_socket, workers); +} + +/// Keep a worker the mount just spawned, or, if the spawn failed, stop the +/// ones already running and hand the error back. +fn keep_or_abandon( + core: &Core, + control_socket: &Path, + workers: &mut Vec>, + spawned: std::io::Result>, +) -> std::io::Result<()> { + match spawned { + Ok(handle) => { + workers.push(handle); + Ok(()) + } + Err(error) => { + abandon_workers(core, control_socket, std::mem::take(workers)); + Err(error) + } + } +} + +/// Signal every worker to stop, then join them up to [`WORKER_JOIN_DEADLINE`]. +fn halt_workers(core: &Core, control_socket: &Path, workers: Vec>) { core.shutdown.stop(); core.wake_drain(); let _ = core.sync_tx.send(sync::SyncMsg::Stop); diff --git a/crates/pdfs-fuse/src/systemd.rs b/crates/pdfs-fuse/src/systemd.rs index 22683bc..f54091e 100644 --- a/crates/pdfs-fuse/src/systemd.rs +++ b/crates/pdfs-fuse/src/systemd.rs @@ -64,11 +64,19 @@ fn send_abstract(socket: &UnixDatagram, name: &str, message: &str) -> bool { /// so `systemctl --user start` returns when the mount actually works rather than /// when the process exists. pub(crate) fn ready() { - if notify("READY=1\n") { + if notify("READY=1\nSTATUS=Mounted\n") { debug!("notified systemd: ready"); } } +/// Set the one-line status `systemctl --user status` shows for the unit, such +/// as why the mount keeps failing (`docs/BUGS.md` B263). +pub fn status(text: &str) { + // A newline would end the `STATUS=` line and start another variable. + let line = text.replace('\n', " "); + notify(&format!("STATUS={line}\n")); +} + /// Tell the manager the daemon is still healthy. pub(crate) fn watchdog_ping() { let _ = notify("WATCHDOG=1\n"); diff --git a/crates/pdfs-gui/src/app/main.rs b/crates/pdfs-gui/src/app/main.rs index 5db14d0..a30fa50 100644 --- a/crates/pdfs-gui/src/app/main.rs +++ b/crates/pdfs-gui/src/app/main.rs @@ -1797,13 +1797,35 @@ pub(crate) fn service_unreachable( ); return; } - status( - &ui, - "network-idle-symbolic", - &gettext("Connecting…"), - &gettext("Waiting for the Proton Drive service to start."), - false, - ); + // Running but not answering may be a mount that fails on every try, + // which never opens the socket. Its reason is in a file the daemon + // keeps for this (B263); "Connecting…" alone looked like a slow start + // for as long as it lasted. + let state_dir = ui.dirs.state_dir(); + let failure = gio::spawn_blocking(move || pdfs_core::mountfail::read(&state_dir)) + .await + .ok() + .flatten(); + match failure { + Some(failure) => status( + &ui, + "dialog-warning-symbolic", + &gettext("Can't open your Drive"), + // Translators: {error} is an error message, in English. + &gettext_f( + "The Proton Drive service keeps failing to start and tries again on its own. The last error was: {error}", + &[("error", &failure.error)], + ), + true, + ), + None => status( + &ui, + "network-idle-symbolic", + &gettext("Connecting…"), + &gettext("Waiting for the Proton Drive service to start."), + false, + ), + } glib::timeout_add_local_once(CONNECT_RETRY_INTERVAL, move || { if ui.stack.visible_child_name().as_deref() == Some(page) { reload(&ui); diff --git a/crates/pdfs-gui/src/main.rs b/crates/pdfs-gui/src/main.rs index 083466e..8471f79 100644 --- a/crates/pdfs-gui/src/main.rs +++ b/crates/pdfs-gui/src/main.rs @@ -194,6 +194,24 @@ fn poll_state(socket: &Path, default_mountpoint: &Path) -> DriveState { ), Phase::Attention, ), + // A daemon whose mount fails on every try never opens the + // socket; the app says why (B263). + Ok(s) + if socket + .parent() + .and_then(pdfs_core::mountfail::read) + .is_some() => + { + ( + // Translators: {username} is the Proton account name. The + // service keeps failing to start; the app shows the error. + gettext_f( + "Signed in as {username} — can't open your Drive", + &[("username", &s.username)], + ), + Phase::Attention, + ) + } Ok(s) => ( // Translators: {username} is the Proton account name. gettext_f( diff --git a/docs/BUGS.md b/docs/BUGS.md index 319b4ca..63536a2 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -77,8 +77,6 @@ original wording. | [B267](#b267--a-key-failure-at-a-start-from-a-warm-cache-shows-as-offline-for-good) | A key failure at a start from a warm cache shows as offline for good | Not fixed | | [B266](#b266--pin-unpin-search-and-node-loads-report-a-database-error-as-offline) | Pin, unpin, search and node loads report a database error as "offline" | Not fixed | | [B265](#b265--address-keys-whose-token-is-for-an-inactive-account-key-never-open) | Address keys whose token is for an inactive account key never open | Needs an SDK change; not reproduced | -| [B264](#b264--a-mount-that-fails-after-starting-its-workers-leaves-them-running) | A mount that fails after starting its workers leaves them running | Not fixed | -| [B263](#b263--a-mount-that-can-never-succeed-retries-every-5-s-and-tells-only-the-journal) | A mount that can never succeed retries every 5 s and tells only the journal | Not fixed | | [B262](#b262--watching-a-large-synced-folder-holds-up-the-sync-engine-and-a-failed-watch-is-never-retried) | Watching a large synced folder holds up the sync engine, and a failed watch is never retried | Not fixed | | [B261](#b261--a-folder-that-has-never-synced-reads-up-to-date) | A folder that has never synced reads "up to date" | Not fixed | | [B260](#b260--the-poll-pushes-a-new-folders-first-sync-behind-every-other-folder) | The poll pushes a new folder's first sync behind every other folder | Not fixed | @@ -96,6 +94,7 @@ original wording. | Entry | Title | What is left | |---|---|---| +| [B263](#b263--a-mount-that-can-never-succeed-retries-every-5-s-and-tells-only-the-journal) | A mount that can never succeed retries every 5 s and tells only the journal | Errors no retry fixes back off like network errors | | [B199](#b199--a-stopped-share-stays-on-the-shared-by-me-page-for-minutes) | A stopped share stays on the Shared by me page for minutes | The share itself is not deleted; the SDK has no call for it | | [B88](#b88--pdfs-pin-rename-move-delete-and-sharing-still-cannot-name-a-path-under-a-secondary-mount) | `pdfs pin`, `rename`, `move`, `delete` and sharing still cannot name a path under a secondary mount | `pin`, `unpin`, opening a file, thumbnails, uploads, sharing and versions | | [B72](#b72--pdfs-trash-never-returns) | `pdfs trash` never returns | The slowness of the first refresh is unmeasured | @@ -116,6 +115,7 @@ a live account since. | Entry | Title | |---|---| +| [B264](#b264--a-mount-that-fails-after-starting-its-workers-leaves-them-running) | A mount that fails after starting its workers leaves them running | | [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version | | [B255](#b255--a-synced-folder-whose-files-are-all-gone-here-is-stuck-for-good) | A synced folder whose files are all gone here is stuck for good | | [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives | @@ -567,7 +567,7 @@ tokens, and only the active ones for signing. Skip and log an address that canno ### B264 — A mount that fails after starting its workers leaves them running -**Status:** Open +**Status:** Fixed, not verified live **Found:** 2026-10-31, code audit after issue #40. **Where:** `run_mount` in `crates/pdfs-fuse/src/mount.rs` @@ -581,14 +581,20 @@ permission check, a `spawn_session` error, and a `?` on a later thread spawn) sk the `flock` held, every later attempt fails with "another daemon is using cache.db" instead of the real error. That part is inferred from the code and not observed. -**Fix.** Not done. Bind the socket and check the mountpoint before any worker starts, and stop -the workers on every error path. +**Fix.** Every early return in `mount` after the first worker starts stops the workers +(`abandon_workers`, `keep_or_abandon` in `crates/pdfs-fuse/src/mount.rs`). Unlike a normal stop +it does not send `STOPPING=1`, because the daemon is about to retry and systemd would +otherwise wait for it to exit and then kill it. The control-thread failure path, which already +stopped its workers, no longer sends it either. + +**Test:** none of its own; the simulations (`sim::daemon`, 55 passed) cover the normal start +and stop. --- ### B263 — A mount that can never succeed retries every 5 s and tells only the journal -**Status:** Open +**Status:** Partly fixed. Errors that no retry fixes are not told apart from network errors yet. **Found:** 2026-10-31, issue #40: the app showed "Connecting… waiting for the Proton Drive service" for days, `pdfs diagnose` only reported the control socket missing, and the reporter uninstalled. @@ -605,9 +611,23 @@ four requests, so a broken account sends tens of thousands a day, which may also Proton's sign-in blocks (#39). The control socket is bound only after the mount succeeds, and the error is written nowhere a front end can read it. -**Fix.** Not done. Back off exponentially, treat key, `KeysLocked` and 4xx errors as permanent -with a long back-off, and write the last error where the app, the tray and `diagnose` can -show it (a state file, and `STATUS=` to systemd). +**Fix.** +- The retry doubles from 5 s to a 2-minute ceiling (`mount_retry_delay` in + `crates/pdfs-cli/src/main.rs`), about 720 attempts a day instead of 17,000. The ceiling stays + at minutes because a cold start without a network fails the same way and has to mount soon + after the network returns. +- Each failure is written to `mount-failure.json` in the state directory + (`crates/pdfs-core/src/mountfail.rs`), with the error, since when it fails and the attempt + count. A mount that comes up removes it, and so does a new daemon. +- The app shows "Can't open your Drive" with the error and a Retry button instead of + "Connecting…". The tray says "Signed in as … — can't open your Drive". `pdfs diagnose` reports + `[FAIL] mount: failing for …`. `systemctl --user status` shows the error as the unit's status. +- Not done: key, `KeysLocked` and 4xx errors still retry like network errors, only less often. + +**Test:** `a_failing_mount_backs_off_to_a_ceiling` in `pdfs-cli`; +`a_recorded_failure_reads_back_until_cleared` in `pdfs-core`. On 2026-10-31 a second +`pdfs daemon` beside the running one failed on the database lock three times in 18 s (at 0, 5 +and 15 s) and recorded `attempts: 3` with the lock error. --- diff --git a/po/de.po b/po/de.po index 7ac1044..5f4b380 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -424,14 +424,25 @@ msgstr "Nicht verbunden" msgid "The Proton Drive service isn't running." msgstr "Der Proton-Drive-Dienst läuft nicht." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Proton Drive kann nicht geöffnet werden" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "Der Proton-Drive-Dienst kann wiederholt nicht starten und versucht es selbstständig erneut. Letzter Fehler: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Verbindung wird hergestellt …" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "Warten auf den Start des Proton-Drive-Dienstes." @@ -2908,7 +2919,7 @@ msgid "Sync paused until you resume" msgstr "Synchronisierung bis zur Fortsetzung pausiert" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Synchronisierung pausiert" @@ -5136,7 +5147,7 @@ msgstr "Wird {time} fortgesetzt" msgid "Until you resume" msgstr "Bis zur manuellen Fortsetzung" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6371,52 +6382,57 @@ msgstr "Proton Drive reagiert nicht" msgid "Signed in as {username} — locked" msgstr "Angemeldet als {username} – gesperrt" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Angemeldet als {username} – Proton Drive kann nicht geöffnet werden" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Angemeldet als {username} – nicht verbunden" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Nicht angemeldet" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Fehler: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive hat unerwartet geantwortet" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Sitzung abgelaufen – erneut anmelden" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Anmeldung nicht gespeichert – Schlüsselbund entsperren" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Update nicht abgeschlossen – Proton Drive neu starten" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "Aktuell in {mountpoint} ({n} angeheftet)" msgstr[1] "Aktuell in {mountpoint} ({n} angeheftet)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Wird synchronisiert – {queued} ({n} angeheftet)" msgstr[1] "Wird synchronisiert – {queued} ({n} angeheftet)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6424,60 +6440,60 @@ msgstr[0] "Offline – nur zwischengespeicherte Dateien ({n} angeheftet)" msgstr[1] "Offline – nur zwischengespeicherte Dateien ({n} angeheftet)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Offline – {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} Problem – Anzeigen" msgstr[1] "{n} Probleme – Anzeigen" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Anmelden …" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Erneut anmelden …" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Proton Drive öffnen" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Proton Drive neu starten" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Ordner öffnen" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Synchronisierung fortsetzen" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Synchronisierung pausieren" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Verbinden" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Symbol im Benachrichtigungsfeld ausblenden" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Proton Drive beenden …" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Beenden" diff --git a/po/en_GB.po b/po/en_GB.po index 5a2e3c1..33a2a9c 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -420,14 +420,25 @@ msgstr "Not connected" msgid "The Proton Drive service isn't running." msgstr "The Proton Drive service isn't running." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Can't open your Drive" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "The Proton Drive service keeps failing to start and tries again on its own. The last error was: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Connecting…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "Waiting for the Proton Drive service to start." @@ -2869,7 +2880,7 @@ msgid "Sync paused until you resume" msgstr "Sync paused until you resume" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Sync paused" @@ -5035,7 +5046,7 @@ msgstr "Resumes {time}" msgid "Until you resume" msgstr "Until you resume" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6246,52 +6257,57 @@ msgstr "Proton Drive isn't responding" msgid "Signed in as {username} — locked" msgstr "Signed in as {username} — locked" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Signed in as {username} — can't open your Drive" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Signed in as {username} — not connected" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Not signed in" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Error: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive sent an unexpected reply" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Session expired — sign in again" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Sign-in not saved — unlock your keyring" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Update not finished — restart Proton Drive" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "Up to date in {mountpoint} ({n} pinned)" msgstr[1] "Up to date in {mountpoint} ({n} pinned)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Syncing — {queued} ({n} pinned)" msgstr[1] "Syncing — {queued} ({n} pinned)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6299,60 +6315,60 @@ msgstr[0] "Offline — cached files only ({n} pinned)" msgstr[1] "Offline — cached files only ({n} pinned)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Offline — {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} issue — View" msgstr[1] "{n} issues — View" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Sign In…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Sign In Again…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Open Proton Drive" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Restart Proton Drive" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Open Folder" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Resume Sync" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Pause Sync" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Connect" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Hide Tray Icon" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Stop Proton Drive…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Quit" diff --git a/po/es.po b/po/es.po index 9ecbbaf..25156aa 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -422,14 +422,25 @@ msgstr "Sin conexión" msgid "The Proton Drive service isn't running." msgstr "El servicio de Proton Drive no está en ejecución." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "No se puede abrir Proton Drive" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "El servicio de Proton Drive no consigue iniciarse y vuelve a intentarlo por sí solo. Último error: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Conectando…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "Esperando a que se inicie el servicio de Proton Drive." @@ -2891,7 +2902,7 @@ msgid "Sync paused until you resume" msgstr "Sincronización en pausa hasta que la reanude" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Sincronización en pausa" @@ -5095,7 +5106,7 @@ msgstr "Se reanuda {time}" msgid "Until you resume" msgstr "Hasta que la reanude" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6327,52 +6338,57 @@ msgstr "Proton Drive no responde" msgid "Signed in as {username} — locked" msgstr "Sesión iniciada como {username} — bloqueado" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Sesión iniciada como {username} — no se puede abrir Proton Drive" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Sesión iniciada como {username} — sin conexión" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Sesión no iniciada" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Error: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive envió una respuesta inesperada" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Sesión caducada: vuelva a iniciar sesión" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Inicio de sesión no guardado: desbloquee el depósito de claves" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Actualización sin terminar: reinicie Proton Drive" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "Actualizado en {mountpoint} ({n} fijado)" msgstr[1] "Actualizado en {mountpoint} ({n} fijados)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Sincronizando: {queued} ({n} anclado)" msgstr[1] "Sincronizando: {queued} ({n} anclados)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6380,60 +6396,60 @@ msgstr[0] "Sin conexión: solo archivos en caché ({n} anclado)" msgstr[1] "Sin conexión: solo archivos en caché ({n} anclados)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Sin conexión: {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} problema: ver" msgstr[1] "{n} problemas: ver" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Iniciar sesión…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Volver a iniciar sesión…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Abrir Proton Drive" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Reiniciar Proton Drive" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Abrir carpeta" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Reanudar la sincronización" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Pausar la sincronización" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Conectar" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Ocultar el icono de la bandeja" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Detener Proton Drive…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Salir" diff --git a/po/fr.po b/po/fr.po index 8a20308..80269d4 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -424,14 +424,25 @@ msgstr "Non connecté" msgid "The Proton Drive service isn't running." msgstr "Le service Proton Drive n’est pas en cours d’exécution." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Impossible d’ouvrir Proton Drive" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "Le service Proton Drive n’arrive pas à démarrer et réessaie de lui-même. Dernière erreur : {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Connexion…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "En attente du démarrage du service Proton Drive." @@ -2908,7 +2919,7 @@ msgid "Sync paused until you resume" msgstr "Synchronisation en pause jusqu’à la reprise" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Synchronisation en pause" @@ -5138,7 +5149,7 @@ msgstr "Reprise {time}" msgid "Until you resume" msgstr "Jusqu’à la reprise" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6375,52 +6386,57 @@ msgstr "Proton Drive ne répond pas" msgid "Signed in as {username} — locked" msgstr "Connecté en tant que {username} — verrouillé" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Connecté en tant que {username} — impossible d’ouvrir Proton Drive" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Connecté en tant que {username} — non connecté" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Non connecté" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Erreur : {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive a envoyé une réponse inattendue" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Session expirée — reconnectez-vous" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Connexion non enregistrée — déverrouillez votre trousseau" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Mise à jour inachevée — redémarrez Proton Drive" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "À jour dans {mountpoint} ({n} épinglé)" msgstr[1] "À jour dans {mountpoint} ({n} épinglés)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Synchronisation — {queued} ({n} épinglé)" msgstr[1] "Synchronisation — {queued} ({n} épinglés)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6428,60 +6444,60 @@ msgstr[0] "Hors ligne — fichiers en cache uniquement ({n} épinglé)" msgstr[1] "Hors ligne — fichiers en cache uniquement ({n} épinglés)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Hors ligne — {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} problème — Afficher" msgstr[1] "{n} problèmes — Afficher" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Se connecter…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Se reconnecter…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Ouvrir Proton Drive" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Redémarrer Proton Drive" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Ouvrir le dossier" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Reprendre la synchronisation" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Mettre en pause la synchronisation" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Connecter" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Masquer l’icône de la zone de notification" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Arrêter Proton Drive…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Quitter" diff --git a/po/it.po b/po/it.po index c035843..8487641 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -420,14 +420,25 @@ msgstr "Non connesso" msgid "The Proton Drive service isn't running." msgstr "Il servizio di Proton Drive non è in esecuzione." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Impossibile aprire Proton Drive" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "Il servizio di Proton Drive non riesce ad avviarsi e riprova da solo. Ultimo errore: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Connessione…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "In attesa dell’avvio del servizio di Proton Drive." @@ -2906,7 +2917,7 @@ msgid "Sync paused until you resume" msgstr "Sincronizzazione in pausa finché non riprendi" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Sincronizzazione in pausa" @@ -5114,7 +5125,7 @@ msgstr "Riprende {time}" msgid "Until you resume" msgstr "Finché non riprendi" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6351,52 +6362,57 @@ msgstr "Proton Drive non risponde" msgid "Signed in as {username} — locked" msgstr "Accesso effettuato come {username} — bloccato" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Accesso effettuato come {username} — impossibile aprire Proton Drive" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Accesso effettuato come {username} — non connesso" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Accesso non eseguito" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Errore: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive ha inviato una risposta inattesa" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Sessione scaduta: accedi di nuovo" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Accesso non salvato: sblocca il portachiavi" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Aggiornamento non completato: riavvia Proton Drive" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "Aggiornato in {mountpoint} ({n} fissato)" msgstr[1] "Aggiornato in {mountpoint} ({n} fissati)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Sincronizzazione: {queued} ({n} fissato)" msgstr[1] "Sincronizzazione: {queued} ({n} fissati)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6404,60 +6420,60 @@ msgstr[0] "Offline: solo file in cache ({n} fissato)" msgstr[1] "Offline: solo file in cache ({n} fissati)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Offline: {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} problema: visualizza" msgstr[1] "{n} problemi: visualizza" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Accedi…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Accedi di nuovo…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Apri Proton Drive" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Riavvia Proton Drive" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Apri cartella" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Riprendi sincronizzazione" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Metti in pausa sincronizzazione" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Connetti" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Nascondi icona nell'area di notifica" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Arresta Proton Drive…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Esci" diff --git a/po/nl.po b/po/nl.po index 1de0e6f..26a0fbc 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -421,14 +421,25 @@ msgstr "Niet verbonden" msgid "The Proton Drive service isn't running." msgstr "De Proton Drive-service draait niet." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Kan Proton Drive niet openen" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "De Proton Drive-service kan steeds niet starten en probeert het zelf opnieuw. Laatste fout: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Verbinden…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "Wachten tot de Proton Drive-service is gestart." @@ -2896,7 +2907,7 @@ msgid "Sync paused until you resume" msgstr "Synchronisatie gepauzeerd totdat je hervat" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Synchronisatie gepauzeerd" @@ -5108,7 +5119,7 @@ msgstr "Hervat {time}" msgid "Until you resume" msgstr "Totdat je hervat" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6337,52 +6348,57 @@ msgstr "Proton Drive reageert niet" msgid "Signed in as {username} — locked" msgstr "Aangemeld als {username} — vergrendeld" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Aangemeld als {username} — kan Proton Drive niet openen" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Aangemeld als {username} — niet verbonden" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Niet aangemeld" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Fout: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive gaf een onverwacht antwoord" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Sessie verlopen — meld je opnieuw aan" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Aanmelding niet opgeslagen — ontgrendel je sleutelbos" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Update niet voltooid — start Proton Drive opnieuw" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "Bijgewerkt in {mountpoint} ({n} vastgezet)" msgstr[1] "Bijgewerkt in {mountpoint} ({n} vastgezet)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Synchroniseren — {queued} ({n} vastgezet)" msgstr[1] "Synchroniseren — {queued} ({n} vastgezet)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6390,60 +6406,60 @@ msgstr[0] "Offline — alleen bestanden in cache ({n} vastgezet)" msgstr[1] "Offline — alleen bestanden in cache ({n} vastgezet)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Offline — {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} probleem — Bekijken" msgstr[1] "{n} problemen — Bekijken" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Aanmelden…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Opnieuw aanmelden…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Proton Drive openen" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Proton Drive opnieuw starten" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Map openen" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Synchronisatie hervatten" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Synchronisatie pauzeren" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Verbinden" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Pictogram in systeemvak verbergen" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Proton Drive stoppen…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Afsluiten" diff --git a/po/pdfs.pot b/po/pdfs.pot index 90860e8..dad3a5c 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.6.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:28+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -397,14 +397,25 @@ msgstr "" msgid "The Proton Drive service isn't running." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "" @@ -2788,7 +2799,7 @@ msgid "Sync paused until you resume" msgstr "" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "" @@ -4883,7 +4894,7 @@ msgstr "" msgid "Until you resume" msgstr "" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6071,52 +6082,57 @@ msgstr "" msgid "Signed in as {username} — locked" msgstr "" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6124,60 +6140,60 @@ msgstr[0] "" msgstr[1] "" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "" diff --git a/po/pl.po b/po/pl.po index 8acb1fb..41a7913 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -425,14 +425,25 @@ msgstr "Brak połączenia" msgid "The Proton Drive service isn't running." msgstr "Usługa Proton Drive nie jest uruchomiona." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Nie można otworzyć Proton Drive" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "Usługa Proton Drive nie może się uruchomić i sama ponawia próby. Ostatni błąd: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Łączenie…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "Oczekiwanie na uruchomienie usługi Proton Drive." @@ -2961,7 +2972,7 @@ msgid "Sync paused until you resume" msgstr "Wstrzymano synchronizację do czasu wznowienia" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Wstrzymano synchronizację" @@ -5188,7 +5199,7 @@ msgstr "Wznowienie {time}" msgid "Until you resume" msgstr "Do czasu wznowienia" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6439,38 +6450,43 @@ msgstr "Proton Drive nie odpowiada" msgid "Signed in as {username} — locked" msgstr "Zalogowano jako {username} — zablokowane" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Zalogowano jako {username} — nie można otworzyć Proton Drive" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Zalogowano jako {username} — brak połączenia" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Nie zalogowano" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Błąd: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "Proton Drive wysłał nieoczekiwaną odpowiedź" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Sesja wygasła — zaloguj się ponownie" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Logowanie nie zostało zapisane — odblokuj bazę kluczy" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Aktualizacja niedokończona — uruchom ponownie Proton Drive" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" @@ -6478,7 +6494,7 @@ msgstr[0] "Aktualne w {mountpoint} ({n} przypięty)" msgstr[1] "Aktualne w {mountpoint} ({n} przypięte)" msgstr[2] "Aktualne w {mountpoint} ({n} przypiętych)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" @@ -6486,7 +6502,7 @@ msgstr[0] "Synchronizowanie — {queued} (przypięte: {n})" msgstr[1] "Synchronizowanie — {queued} (przypięte: {n})" msgstr[2] "Synchronizowanie — {queued} (przypięte: {n})" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6495,13 +6511,13 @@ msgstr[1] "Offline — tylko pliki w pamięci podręcznej (przypięte: {n})" msgstr[2] "Offline — tylko pliki w pamięci podręcznej (przypięte: {n})" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Offline — {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" @@ -6509,47 +6525,47 @@ msgstr[0] "{n} problem — wyświetl" msgstr[1] "{n} problemy — wyświetl" msgstr[2] "{n} problemów — wyświetl" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Zaloguj się…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Zaloguj się ponownie…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Otwórz Proton Drive" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Uruchom ponownie Proton Drive" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Otwórz katalog" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Wznów synchronizację" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Wstrzymaj synchronizację" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Połącz" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Ukryj ikonę w obszarze powiadamiania" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Zatrzymaj Proton Drive…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Zakończ" diff --git a/po/pt_BR.po b/po/pt_BR.po index 56b0d45..3080c77 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 22:26+0100\n" +"POT-Creation-Date: 2026-10-31 10:37+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -420,14 +420,25 @@ msgstr "Não conectado" msgid "The Proton Drive service isn't running." msgstr "O serviço do Proton Drive não está em execução." -#: crates/pdfs-gui/src/app/main.rs:1803 +#: crates/pdfs-gui/src/app/main.rs:1813 +msgid "Can't open your Drive" +msgstr "Não foi possível abrir o Proton Drive" + +#: crates/pdfs-gui/src/app/main.rs:1816 +#, rust-format +msgid "" +"The Proton Drive service keeps failing to start and tries again on its own. " +"The last error was: {error}" +msgstr "O serviço do Proton Drive não consegue iniciar e tenta de novo sozinho. Último erro: {error}" + +#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 -#: crates/pdfs-gui/src/main.rs:475 crates/pdfs-gui/src/main.rs:517 +#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 msgid "Connecting…" msgstr "Conectando…" -#: crates/pdfs-gui/src/app/main.rs:1804 +#: crates/pdfs-gui/src/app/main.rs:1825 msgid "Waiting for the Proton Drive service to start." msgstr "Aguardando o serviço do Proton Drive iniciar." @@ -2892,7 +2903,7 @@ msgid "Sync paused until you resume" msgstr "Sincronização pausada até você retomar" #: crates/pdfs-gui/src/app/pages/locations.rs:570 -#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:290 +#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 msgid "Sync paused" msgstr "Sincronização pausada" @@ -5093,7 +5104,7 @@ msgstr "Retoma {time}" msgid "Until you resume" msgstr "Até você retomar" -#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:292 +#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #, rust-format msgid "{n} change needs attention" msgid_plural "{n} changes need attention" @@ -6324,52 +6335,57 @@ msgstr "O Proton Drive não está respondendo" msgid "Signed in as {username} — locked" msgstr "Conectado como {username} — bloqueado" -#: crates/pdfs-gui/src/main.rs:200 +#: crates/pdfs-gui/src/main.rs:209 +#, rust-format +msgid "Signed in as {username} — can't open your Drive" +msgstr "Conectado como {username} — não foi possível abrir o Proton Drive" + +#: crates/pdfs-gui/src/main.rs:218 #, rust-format msgid "Signed in as {username} — not connected" msgstr "Conectado como {username} — sem conexão" -#: crates/pdfs-gui/src/main.rs:205 +#: crates/pdfs-gui/src/main.rs:223 msgid "Not signed in" msgstr "Não conectado" #. Translators: {error} is an error message, in English. -#: crates/pdfs-gui/src/main.rs:208 +#: crates/pdfs-gui/src/main.rs:226 #, rust-format msgid "Error: {error}" msgstr "Erro: {error}" -#: crates/pdfs-gui/src/main.rs:230 +#: crates/pdfs-gui/src/main.rs:248 msgid "Proton Drive sent an unexpected reply" msgstr "O Proton Drive enviou uma resposta inesperada" -#: crates/pdfs-gui/src/main.rs:284 +#: crates/pdfs-gui/src/main.rs:302 msgid "Session expired — sign in again" msgstr "Sessão expirada — entre novamente" -#: crates/pdfs-gui/src/main.rs:286 +#: crates/pdfs-gui/src/main.rs:304 msgid "Sign-in not saved — unlock your keyring" msgstr "Login não salvo — desbloqueie o chaveiro" -#: crates/pdfs-gui/src/main.rs:289 +#: crates/pdfs-gui/src/main.rs:307 msgid "Update not finished — restart Proton Drive" msgstr "Atualização não concluída — reinicie o Proton Drive" -#: crates/pdfs-gui/src/main.rs:299 +#: crates/pdfs-gui/src/main.rs:317 #, rust-format msgid "Up to date in {mountpoint} ({n} pinned)" msgid_plural "Up to date in {mountpoint} ({n} pinned)" msgstr[0] "Atualizado em {mountpoint} ({n} fixado)" msgstr[1] "Atualizado em {mountpoint} ({n} fixados)" -#: crates/pdfs-gui/src/main.rs:306 +#: crates/pdfs-gui/src/main.rs:324 #, rust-format msgid "Syncing — {queued} ({n} pinned)" msgid_plural "Syncing — {queued} ({n} pinned)" msgstr[0] "Sincronizando — {queued} ({n} fixado)" msgstr[1] "Sincronizando — {queued} ({n} fixados)" -#: crates/pdfs-gui/src/main.rs:313 +#: crates/pdfs-gui/src/main.rs:331 #, rust-format msgid "Offline — cached files only ({n} pinned)" msgid_plural "Offline — cached files only ({n} pinned)" @@ -6377,60 +6393,60 @@ msgstr[0] "Offline — somente arquivos em cache ({n} fixado)" msgstr[1] "Offline — somente arquivos em cache ({n} fixados)" #. Translators: {queued} is a queue summary such as "3 uploads queued". -#: crates/pdfs-gui/src/main.rs:319 +#: crates/pdfs-gui/src/main.rs:337 #, rust-format msgid "Offline — {queued}" msgstr "Offline — {queued}" #. Translators: a menu item that opens the list of failing changes. -#: crates/pdfs-gui/src/main.rs:358 +#: crates/pdfs-gui/src/main.rs:376 #, rust-format msgid "{n} issue — View" msgid_plural "{n} issues — View" msgstr[0] "{n} problema — Ver" msgstr[1] "{n} problemas — Ver" -#: crates/pdfs-gui/src/main.rs:465 +#: crates/pdfs-gui/src/main.rs:483 msgid "Sign In…" msgstr "Entrar…" -#: crates/pdfs-gui/src/main.rs:466 +#: crates/pdfs-gui/src/main.rs:484 msgid "Sign In Again…" msgstr "Entrar novamente…" -#: crates/pdfs-gui/src/main.rs:469 +#: crates/pdfs-gui/src/main.rs:487 msgid "Open Proton Drive" msgstr "Abrir o Proton Drive" -#: crates/pdfs-gui/src/main.rs:473 +#: crates/pdfs-gui/src/main.rs:491 msgid "Restart Proton Drive" msgstr "Reiniciar o Proton Drive" -#: crates/pdfs-gui/src/main.rs:482 +#: crates/pdfs-gui/src/main.rs:500 msgid "Open Folder" msgstr "Abrir pasta" -#: crates/pdfs-gui/src/main.rs:494 +#: crates/pdfs-gui/src/main.rs:512 msgid "Resume Sync" msgstr "Retomar sincronização" -#: crates/pdfs-gui/src/main.rs:496 +#: crates/pdfs-gui/src/main.rs:514 msgid "Pause Sync" msgstr "Pausar sincronização" -#: crates/pdfs-gui/src/main.rs:515 +#: crates/pdfs-gui/src/main.rs:533 msgid "Connect" msgstr "Conectar" -#: crates/pdfs-gui/src/main.rs:522 +#: crates/pdfs-gui/src/main.rs:540 msgid "Hide Tray Icon" msgstr "Ocultar ícone da bandeja" -#: crates/pdfs-gui/src/main.rs:526 +#: crates/pdfs-gui/src/main.rs:544 msgid "Stop Proton Drive…" msgstr "Parar o Proton Drive…" -#: crates/pdfs-gui/src/main.rs:530 +#: crates/pdfs-gui/src/main.rs:548 msgid "Quit" msgstr "Sair"