mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
fix(cli,core,fuse,gui): say why the mount keeps failing, and back off
A mount that failed on every try retried every 5 s forever, and the reason was only in the journal: the app and the tray said Connecting... for days (B263, issue #40). The retry now doubles to a 2-minute ceiling, and the last failure is kept in mount-failure.json for the app, the tray, pdfs diagnose and systemctl status. The early returns in mount left the workers they had started running beside the next attempt (B264). They are now stopped on every error path, without telling systemd the daemon is stopping.
This commit is contained in:
1 parent
9460c93b50
commit
e9577f953f
18 files changed
+714
-311
No files matched your search
@@ -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<PathBuf>) -> 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<pdfs_core::mountfail::MountFailure> = 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<PathBuf>) -> 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<u64> = (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]
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<MountFailure> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -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::{
|
||||
|
||||
@@ -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<std::thread::JoinHandle<()>> = 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<std::thread::Jo
|
||||
// Say so before the joins: a teardown that takes a while must not be read as
|
||||
// a missed watchdog ping and turned into a kill.
|
||||
systemd::stopping();
|
||||
halt_workers(core, control_socket, workers);
|
||||
}
|
||||
|
||||
/// Stop the threads a mount attempt started before it failed.
|
||||
///
|
||||
/// The early returns used to leave them running: every retry started another
|
||||
/// set beside the last one's, and their `Core` kept the database open, so the
|
||||
/// next attempt could fail on its lock instead of the real error
|
||||
/// (`docs/BUGS.md` B264). Unlike [`stop_workers`] this does not tell systemd
|
||||
/// the daemon is stopping, because it is about to try again, and a manager
|
||||
/// told so would wait for the process to exit and then kill it.
|
||||
fn abandon_workers(core: &Core, control_socket: &Path, workers: Vec<std::thread::JoinHandle<()>>) {
|
||||
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<std::thread::JoinHandle<()>>,
|
||||
spawned: std::io::Result<std::thread::JoinHandle<()>>,
|
||||
) -> 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<std::thread::JoinHandle<()>>) {
|
||||
core.shutdown.stop();
|
||||
core.wake_drain();
|
||||
let _ = core.sync_tx.send(sync::SyncMsg::Stop);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(
|
||||
|
||||
+29
-9
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
+45
-29
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
+45
-29
@@ -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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
+45
-29
@@ -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"
|
||||
|
||||
|
||||
Reference in new issue
Block a user