Merge branch 'fix/never-synced-label' into fix/mount-failure-surfaced

# Conflicts:
#	docs/BUGS.md
#	po/de.po
#	po/en_GB.po
#	po/es.po
#	po/fr.po
#	po/it.po
#	po/nl.po
#	po/pdfs.pot
#	po/pl.po
#	po/pt_BR.po
This commit is contained in:
nvrl committed 2026-10-31 19:26:34 +01:00
commit b093010b64
21 files changed
+1608 -858

No files matched your search

+122
View File
@@ -0,0 +1,122 @@
//! Log priorities for journald.
//!
//! journald files each line a service writes at the unit's default priority,
//! info, unless the line opens with a syslog `<N>` prefix. Without one every
//! WARN and ERROR the daemon logs is stored as info, and the
//! `journalctl -p warning` that the troubleshooting guide asks for shows
//! nothing (`docs/BUGS.md` B258).
use std::fmt;
use std::os::unix::fs::MetadataExt;
use tracing::{Event, Level, Subscriber};
use tracing_subscriber::fmt::format::Writer;
use tracing_subscriber::fmt::{FmtContext, FormatEvent, FormatFields};
use tracing_subscriber::registry::LookupSpan;
/// Whether standard output is the journal stream systemd connected this
/// process to.
///
/// `JOURNAL_STREAM` alone does not say so: a terminal started from a user unit
/// inherits it, and every `pdfs` run in that terminal would print the
/// prefixes. systemd sets it to the stream's `device:inode`, so it is compared
/// against what fd 1 actually is.
pub(crate) fn stdout_is_journal() -> bool {
let Some(stream) = std::env::var_os("JOURNAL_STREAM") else {
return false;
};
let Ok(stdout) = std::fs::metadata("/proc/self/fd/1") else {
return false;
};
stream
.to_str()
.is_some_and(|value| names_stream(value, stdout.dev(), stdout.ino()))
}
/// Whether a `JOURNAL_STREAM` value names the file `dev`:`ino`.
fn names_stream(value: &str, dev: u64, ino: u64) -> bool {
value
.split_once(':')
.is_some_and(|(d, i)| d.parse() == Ok(dev) && i.parse() == Ok(ino))
}
/// The syslog priority journald should file a `level` line at.
fn priority(level: &Level) -> u8 {
match *level {
Level::ERROR => 3,
Level::WARN => 4,
Level::INFO => 6,
Level::DEBUG | Level::TRACE => 7,
}
}
/// An event format that opens each line with its `<N>` priority, then writes
/// the line as `F` would.
pub(crate) struct Prioritized<F>(pub(crate) F);
impl<S, N, F> FormatEvent<S, N> for Prioritized<F>
where
S: Subscriber + for<'a> LookupSpan<'a>,
N: for<'a> FormatFields<'a> + 'static,
F: FormatEvent<S, N>,
{
fn format_event(
&self,
ctx: &FmtContext<'_, S, N>,
mut writer: Writer<'_>,
event: &Event<'_>,
) -> fmt::Result {
write!(writer, "<{}>", priority(event.metadata().level()))?;
self.0.format_event(ctx, writer, event)
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::io;
use std::sync::{Arc, Mutex};
#[derive(Clone)]
struct Buf(Arc<Mutex<Vec<u8>>>);
impl io::Write for Buf {
fn write(&mut self, bytes: &[u8]) -> io::Result<usize> {
self.0.lock().unwrap().extend_from_slice(bytes);
Ok(bytes.len())
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
#[test]
fn each_line_opens_with_the_priority_of_its_level() {
let buf = Buf(Arc::new(Mutex::new(Vec::new())));
let writer = buf.clone();
let subscriber = tracing_subscriber::fmt()
.with_max_level(Level::DEBUG)
.with_ansi(false)
.with_writer(move || writer.clone())
.event_format(Prioritized(tracing_subscriber::fmt::format()))
.finish();
tracing::subscriber::with_default(subscriber, || {
tracing::error!("e");
tracing::warn!("w");
tracing::info!("i");
tracing::debug!("d");
});
let out = String::from_utf8(buf.0.lock().unwrap().clone()).unwrap();
let prefixes: Vec<&str> = out.lines().map(|line| &line[..3]).collect();
assert_eq!(prefixes, ["<3>", "<4>", "<6>", "<7>"]);
}
#[test]
fn journal_stream_must_name_the_same_file() {
assert!(names_stream("8:12345", 8, 12345));
assert!(!names_stream("8:12345", 8, 54321));
assert!(!names_stream("9:12345", 8, 12345));
assert!(!names_stream("8", 8, 12345));
assert!(!names_stream("", 8, 12345));
}
}
+39 -9
View File
@@ -20,6 +20,8 @@ use pdfs_core::control::{
use pdfs_core::db::Db; use pdfs_core::db::Db;
use pdfs_core::service; use pdfs_core::service;
mod journal;
/// `println!` for this binary, shadowing std's, which panics when stdout is /// `println!` for this binary, shadowing std's, which panics when stdout is
/// closed: `pdfs ls | head` ended in a "Broken pipe" panic once `head` had its /// closed: `pdfs ls | head` ended in a "Broken pipe" panic once `head` had its
/// lines. This one hands the failure to [`stdout_written`] instead. /// lines. This one hands the failure to [`stdout_written`] instead.
@@ -879,15 +881,22 @@ fn cli_error(kind: ErrorKind, message: &str) -> String {
} }
fn main() -> Result<()> { fn main() -> Result<()> {
tracing_subscriber::fmt() let filter = tracing_subscriber::EnvFilter::try_from_default_env()
.with_env_filter( // `pgp` logs a benign WARN when it re-serializes a Proton secret-key
tracing_subscriber::EnvFilter::try_from_default_env() // packet with a longer (but equivalent) length encoding than the
// `pgp` logs a benign WARN when it re-serializes a Proton secret-key // original; drop it to error so normal runs stay quiet.
// packet with a longer (but equivalent) length encoding than the .unwrap_or_else(|_| "info,pgp=error".into());
// original; drop it to error so normal runs stay quiet. if journal::stdout_is_journal() {
.unwrap_or_else(|_| "info,pgp=error".into()), // journalctl colours lines by the priority the prefix gives them, so
) // the escape codes would only be noise in the stored text.
.init(); tracing_subscriber::fmt()
.with_env_filter(filter)
.with_ansi(false)
.event_format(journal::Prioritized(tracing_subscriber::fmt::format()))
.init();
} else {
tracing_subscriber::fmt().with_env_filter(filter).init();
}
let cli = Cli::parse(); let cli = Cli::parse();
JSON_OUTPUT.store(cli.json, std::sync::atomic::Ordering::Relaxed); JSON_OUTPUT.store(cli.json, std::sync::atomic::Ordering::Relaxed);
@@ -3143,6 +3152,24 @@ fn human_secs(secs: u64) -> String {
} }
} }
/// The sync engine's line in `pdfs diagnostics`: whether it runs, and which
/// folder's pass it is on.
fn sync_engine_line(sync: &pdfs_core::control::SyncEngineState) -> String {
let mut line = match (sync.running, sync.pass_folder) {
(false, _) => "STOPPED; synced folders do not sync until the daemon restarts".to_string(),
(true, None) => "idle".to_string(),
(true, Some(folder)) => format!(
"pass on folder {folder} for {}, last progress {} ago",
human_secs(sync.pass_age_secs),
human_secs(sync.pass_idle_secs),
),
};
if sync.panics > 0 {
line.push_str(&format!("; {} pass(es) panicked", sync.panics));
}
line
}
fn cmd_diagnostics() -> Result<()> { fn cmd_diagnostics() -> Result<()> {
let response = control_request(CtlRequest::Diagnostics)?; let response = control_request(CtlRequest::Diagnostics)?;
if emit_json(&response)? { if emit_json(&response)? {
@@ -3178,6 +3205,9 @@ fn cmd_diagnostics() -> Result<()> {
human_secs(worker.age_secs) human_secs(worker.age_secs)
); );
} }
if let Some(sync) = &d.sync {
println!("sync engine: {}", sync_engine_line(sync));
}
if d.inflight.is_empty() { if d.inflight.is_empty() {
println!("in-flight requests: none"); println!("in-flight requests: none");
} else { } else {
+23
View File
@@ -1980,6 +1980,29 @@ pub struct Diagnostics {
pub control_handler_limit: usize, pub control_handler_limit: usize,
/// Queued mutations not yet drained. /// Queued mutations not yet drained.
pub pending_ops: u64, pub pending_ops: u64,
/// The folder-sync engine. `None` from a daemon that predates the field.
#[serde(default)]
pub sync: Option<SyncEngineState>,
}
/// What the folder-sync engine is doing, for [`Diagnostics`].
///
/// The engine is one thread that runs every synced folder's passes in turn.
/// Dead or stuck, it looked exactly like an idle one: workers idle, nothing
/// queued, nothing in the journal (`docs/BUGS.md` B259).
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct SyncEngineState {
/// Whether the engine thread is running. Once it has ended, nothing syncs
/// until the daemon restarts.
pub running: bool,
/// The synced folder whose pass is running, if one is.
pub pass_folder: Option<i64>,
/// How long that pass has been running.
pub pass_age_secs: u64,
/// How long since that pass last reported progress.
pub pass_idle_secs: u64,
/// Passes that ended in a panic since the daemon started.
pub panics: u64,
} }
/// The daemon's reply to a [`Request`]. /// The daemon's reply to a [`Request`].
+1
View File
@@ -163,6 +163,7 @@ impl Core {
control_handlers: super::control::active_handlers(), control_handlers: super::control::active_handlers(),
control_handler_limit: super::control::handler_limit(), control_handler_limit: super::control::handler_limit(),
pending_ops: self.pending_ops_quickly(), pending_ops: self.pending_ops_quickly(),
sync: Some(self.sync_engine.report()),
} }
} }
+3
View File
@@ -728,6 +728,8 @@ struct Core {
/// can say what a pass is doing rather than just "syncing". An entry exists /// can say what a pass is doing rather than just "syncing". An entry exists
/// only while that folder's reconcile pass is running. /// only while that folder's reconcile pass is running.
sync_progress: Arc<Mutex<HashMap<i64, SyncProgress>>>, sync_progress: Arc<Mutex<HashMap<i64, SyncProgress>>>,
/// Whether the folder-sync engine is alive, and which pass it is on.
sync_engine: Arc<sync::EngineHealth>,
/// Channel to the folder-sync engine: nudges it to /// Channel to the folder-sync engine: nudges it to
/// reconcile a folder, reconcile everything, or re-scan its watch set. /// reconcile a folder, reconcile everything, or re-scan its watch set.
sync_tx: std::sync::mpsc::Sender<sync::SyncMsg>, sync_tx: std::sync::mpsc::Sender<sync::SyncMsg>,
@@ -5989,6 +5991,7 @@ impl Core {
if let Some(p) = self.sync_progress.lock().get_mut(&folder_id) { if let Some(p) = self.sync_progress.lock().get_mut(&folder_id) {
f(p); f(p);
} }
self.sync_engine.moved();
} }
/// Set the number of items the scan expects to check, from the size of the /// Set the number of items the scan expects to check, from the size of the
+1
View File
@@ -507,6 +507,7 @@ pub(crate) fn mount_with(
events: Arc::new(Default::default()), events: Arc::new(Default::default()),
indexing: Arc::new(AtomicBool::new(false)), indexing: Arc::new(AtomicBool::new(false)),
sync_progress: Arc::new(Mutex::new(HashMap::new())), sync_progress: Arc::new(Mutex::new(HashMap::new())),
sync_engine: Arc::default(),
sync_tx, sync_tx,
mounts: Arc::new(Mutex::new(SecondaryMountRegistry::default())), mounts: Arc::new(Mutex::new(SecondaryMountRegistry::default())),
sync_locks: Arc::new(Mutex::new(HashMap::new())), sync_locks: Arc::new(Mutex::new(HashMap::new())),
+67 -1
View File
@@ -36,6 +36,11 @@ const TICK: Duration = Duration::from_secs(15);
/// would train everyone to ignore the real one. /// would train everyone to ignore the real one.
const STALL_AFTER: Duration = Duration::from_secs(120); const STALL_AFTER: Duration = Duration::from_secs(120);
/// How long a sync pass may go without reporting progress before it is called
/// out. Much longer than [`STALL_AFTER`]: one large file in a pass reports
/// nothing until its whole transfer is done.
const SYNC_STALL_AFTER: Duration = Duration::from_secs(900);
/// How often resident size goes into the log. /// How often resident size goes into the log.
const RSS_EVERY: Duration = Duration::from_secs(300); const RSS_EVERY: Duration = Duration::from_secs(300);
@@ -137,6 +142,26 @@ fn report_stalls(report: &pdfs_core::control::Diagnostics, last_completed: (u64,
"the transfer lane has not completed a job since the last check" "the transfer lane has not completed a job since the last check"
); );
} }
// The engine is one thread for every synced folder, so a dead or stuck one
// stops all of them while the worker pool looks idle (B259).
if let Some(sync) = &report.sync {
if !sync.running {
stalled = true;
warn!(
"the sync engine is not running; synced folders do not sync until the daemon restarts"
);
} else if let Some(folder) = sync.pass_folder
&& sync.pass_idle_secs >= SYNC_STALL_AFTER.as_secs()
{
stalled = true;
warn!(
folder,
age_secs = sync.pass_age_secs,
idle_secs = sync.pass_idle_secs,
"a sync pass has not reported progress for a long time"
);
}
}
stalled stalled
} }
@@ -169,7 +194,7 @@ fn probe(control_socket: &Path) -> bool {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use pdfs_core::control::{Diagnostics, InflightRequest, WorkerState}; use pdfs_core::control::{Diagnostics, InflightRequest, SyncEngineState, WorkerState};
fn busy_worker(age_secs: u64) -> WorkerState { fn busy_worker(age_secs: u64) -> WorkerState {
WorkerState { WorkerState {
@@ -226,4 +251,45 @@ mod tests {
assert!(!report_stalls(&report, (0, 30))); assert!(!report_stalls(&report, (0, 30)));
assert!(report_stalls(&report, (0, 40))); assert!(report_stalls(&report, (0, 40)));
} }
fn with_sync(sync: SyncEngineState) -> Diagnostics {
Diagnostics {
sync: Some(sync),
..Default::default()
}
}
/// A sync engine that has ended stops every synced folder while the
/// workers look idle, which is what issue #53 looked like (B259).
#[test]
fn a_stopped_sync_engine_is_a_stall() {
assert!(report_stalls(
&with_sync(SyncEngineState::default()),
(0, 0)
));
}
/// A pass that keeps reporting progress is working, however long it runs;
/// one that has gone quiet past the threshold is not.
#[test]
fn only_a_quiet_sync_pass_is_a_stall() {
let busy = SyncEngineState {
running: true,
pass_folder: Some(3),
pass_age_secs: SYNC_STALL_AFTER.as_secs() * 4,
pass_idle_secs: 5,
panics: 0,
};
assert!(!report_stalls(&with_sync(busy.clone()), (0, 0)));
let quiet = SyncEngineState {
pass_idle_secs: SYNC_STALL_AFTER.as_secs(),
..busy
};
assert!(report_stalls(&with_sync(quiet), (0, 0)));
let idle = SyncEngineState {
running: true,
..Default::default()
};
assert!(!report_stalls(&with_sync(idle), (0, 0)));
}
} }
+94 -1
View File
@@ -49,7 +49,9 @@ mod local_scan;
mod model; mod model;
mod planner; mod planner;
pub(crate) use engine::SYNC_CONCURRENCY; pub(crate) use engine::SYNC_CONCURRENCY;
pub(crate) use engine::{SyncMsg, spawn}; pub(crate) use engine::{EngineHealth, SyncMsg, spawn};
#[cfg(test)]
use engine::{Running, burst_order, keep_wanted};
#[cfg(test)] #[cfg(test)]
use engine::{classify, event_target, settle_with}; use engine::{classify, event_target, settle_with};
#[cfg(test)] #[cfg(test)]
@@ -67,6 +69,11 @@ use planner::{
plan_file, rel_to_path, remote_sig, remote_subtree_changed, revision_moved, tracked_baseline, plan_file, rel_to_path, remote_sig, remote_subtree_changed, revision_moved, tracked_baseline,
unchanged_remote_size, unchanged_remote_size,
}; };
/// A pass that took at least this long is logged at info even when it changed
/// nothing, so the journal says where a slow engine spends its time.
const SLOW_PASS: Duration = Duration::from_secs(30);
/// What a [`Pending`] op did, so the reconcile can update shared state on the /// What a [`Pending`] op did, so the reconcile can update shared state on the
/// engine thread (never inside a task). /// engine thread (never inside a task).
enum Applied { enum Applied {
@@ -154,6 +161,14 @@ impl Core {
// The cost is one small file read against a pass that is about to walk the // The cost is one small file read against a pass that is about to walk the
// whole tree. // whole tree.
let rules = self.ignore_rules(&local_root); let rules = self.ignore_rules(&local_root);
// A first pass is the one a user waits on after adding or restoring a
// folder, so it is said at info; the poll's passes stay at debug.
if folder.last_sync == 0 {
info!(id = folder.id, path = %folder.local_path, "sync: first pass starting");
} else {
debug!(id = folder.id, "sync: pass starting");
}
let started = Instant::now();
self.progress_begin(folder.id); self.progress_begin(folder.id);
let result = if push_only { let result = if push_only {
self.push_pass(folder.id, &local_root, &remote_root, &rules) self.push_pass(folder.id, &local_root, &remote_root, &rules)
@@ -195,6 +210,18 @@ impl Core {
"idle" "idle"
}; };
let _ = self.db.sync_folder_set_state(folder.id, state, now_secs()); let _ = self.db.sync_folder_set_state(folder.id, state, now_secs());
let elapsed = started.elapsed();
if folder.last_sync == 0 || !outcome.is_empty() || elapsed >= SLOW_PASS {
info!(
id = folder.id,
state,
elapsed_ms = elapsed.as_millis() as u64,
summary = %outcome.summary(),
"sync: pass finished"
);
} else {
debug!(id = folder.id, state, "sync: pass finished");
}
self.report_unscanned(folder.id, name, &outcome.unscanned); self.report_unscanned(folder.id, name, &outcome.unscanned);
// Summarise a pass that actually moved something. A poll over an // Summarise a pass that actually moved something. A poll over an
// unchanged folder does nothing and says nothing — otherwise the // unchanged folder does nothing and says nothing — otherwise the
@@ -2438,6 +2465,72 @@ fn system_mtime_ns(meta: &std::fs::Metadata) -> Option<i64> {
mod tests { mod tests {
use super::*; use super::*;
/// A panic in a pass ends that pass and is counted; the engine is not
/// left believing the pass still runs (`docs/BUGS.md` B259).
#[test]
fn a_panicking_pass_is_contained_and_counted() {
let health = EngineHealth::default();
assert!(!health.contain(7, || panic!("a pass that panics")));
let report = health.report();
assert_eq!(report.panics, 1);
assert_eq!(report.pass_folder, None);
assert!(health.contain(7, || {}));
assert_eq!(health.report().panics, 1);
}
/// Folders named by id run before the rest of a `ReconcileAll` in the
/// same burst, so a folder just added does not wait behind a pass over
/// every other folder (`docs/BUGS.md` B260).
#[test]
fn named_folders_run_before_the_rest_of_a_burst() {
let ids: HashSet<i64> = [9, 4].into();
assert_eq!(burst_order(&ids, &[1, 4, 6, 9]), [4, 9, 1, 6]);
assert_eq!(burst_order(&HashSet::new(), &[1, 4]), [1, 4]);
// A folder the list no longer has still gets the pass it asked for.
assert_eq!(burst_order(&[12].into(), &[1]), [12, 1]);
}
/// A folder removed and added again keeps its watch under the new id;
/// a folder that is gone loses its watch (`docs/BUGS.md` B272).
#[test]
fn a_re_added_folder_keeps_its_watch_under_the_new_id() {
let mut have = vec![(PathBuf::from("/a"), 1), (PathBuf::from("/b"), 2)];
let dropped = keep_wanted(&mut have, &[(PathBuf::from("/a"), 7)]);
assert_eq!(have, [(PathBuf::from("/a"), 7)]);
assert_eq!(dropped, [PathBuf::from("/b")]);
}
/// While a pass runs, the report names its folder, which is what tells a
/// long pass apart from an idle engine.
#[test]
fn the_running_pass_is_reported() {
let health = EngineHealth::default();
let mut seen = None;
health.contain(7, || seen = health.report().pass_folder);
assert_eq!(seen, Some(7));
}
/// The engine reads as running only while its thread lives, including
/// when the thread ends in a panic.
#[test]
fn the_engine_reads_as_stopped_once_its_thread_ends() {
let health = Arc::new(EngineHealth::default());
let thread_health = health.clone();
let (started_tx, started_rx) = std::sync::mpsc::channel();
let (end_tx, end_rx) = std::sync::mpsc::channel::<()>();
let thread = std::thread::spawn(move || {
let _running = Running::start(&thread_health);
started_tx.send(()).unwrap();
let _ = end_rx.recv();
panic!("the engine thread panics");
});
started_rx.recv().unwrap();
assert!(health.report().running);
end_tx.send(()).unwrap();
assert!(thread.join().is_err());
assert!(!health.report().running);
}
/// A removal of something already gone has produced the state the sync /// A removal of something already gone has produced the state the sync
/// engine wanted, so its baseline is dropped rather than retried forever. /// engine wanted, so its baseline is dropped rather than retried forever.
/// Anything else stays an error and keeps the baseline (`docs/BUGS.md` B42). /// Anything else stays an error and keeps the baseline (`docs/BUGS.md` B42).
+253 -72
View File
@@ -1,5 +1,11 @@
//! Filesystem watcher, polling, and debounce control plane. //! Filesystem watcher, polling, and debounce control plane.
use std::panic::AssertUnwindSafe;
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
use pdfs_core::control::SyncEngineState;
use tracing::error;
use super::*; use super::*;
/// How long the watcher must go quiet before a burst counts as finished. /// How long the watcher must go quiet before a burst counts as finished.
@@ -23,6 +29,9 @@ const POLL_INTERVAL: Duration = Duration::from_secs(120);
/// unusable done one-at-a-time; this bounds concurrency like the bulk-upload /// unusable done one-at-a-time; this bounds concurrency like the bulk-upload
/// engine does. /// engine does.
pub(crate) const SYNC_CONCURRENCY: usize = 8; pub(crate) const SYNC_CONCURRENCY: usize = 8;
/// How long after a failed watch the engine tries the watches again. Each try
/// walks the folder's whole tree, so not on every burst.
const REWATCH_RETRY: Duration = Duration::from_secs(600);
/// A message to the sync engine's control thread. /// A message to the sync engine's control thread.
pub(crate) enum SyncMsg { pub(crate) enum SyncMsg {
@@ -53,32 +62,159 @@ pub(crate) fn spawn(core: Core, rx: Receiver<SyncMsg>) -> Option<std::thread::Jo
} }
} }
/// Whether the engine is alive and which pass it is on, for
/// [`Core::diagnostics`] and the supervisor.
///
/// A panic in a pass used to end the engine thread. Every later add, sync-now,
/// file event and poll then went into a channel nobody read, the folder stayed
/// `syncing`, and nothing said so until a restart (`docs/BUGS.md` B259).
#[derive(Default)]
pub(crate) struct EngineHealth {
running: AtomicBool,
pass: Mutex<Option<PassClock>>,
panics: AtomicU64,
}
#[derive(Clone, Copy)]
struct PassClock {
folder: i64,
started: Instant,
moved: Instant,
}
impl EngineHealth {
/// Note that the running pass reported progress.
pub(crate) fn moved(&self) {
if let Some(pass) = self.pass.lock().as_mut() {
pass.moved = Instant::now();
}
}
/// The engine's state now. `try_lock`, like the rest of the diagnostics:
/// a report must not wait on the thing it reports about.
pub(crate) fn report(&self) -> SyncEngineState {
let pass = self.pass.try_lock().and_then(|pass| *pass);
SyncEngineState {
running: self.running.load(Ordering::Relaxed),
pass_folder: pass.map(|p| p.folder),
pass_age_secs: pass.map_or(0, |p| p.started.elapsed().as_secs()),
pass_idle_secs: pass.map_or(0, |p| p.moved.elapsed().as_secs()),
panics: self.panics.load(Ordering::Relaxed),
}
}
/// Run `pass` over `folder` as the current pass. Returns `false` when it
/// panicked: the panic ends that pass, not the engine.
pub(super) fn contain(&self, folder: i64, pass: impl FnOnce()) -> bool {
let now = Instant::now();
*self.pass.lock() = Some(PassClock {
folder,
started: now,
moved: now,
});
let finished = std::panic::catch_unwind(AssertUnwindSafe(pass)).is_ok();
*self.pass.lock() = None;
if !finished {
self.panics.fetch_add(1, Ordering::Relaxed);
}
finished
}
}
/// Marks the engine running for as long as it lives.
pub(super) struct Running<'a>(&'a EngineHealth);
impl<'a> Running<'a> {
pub(super) fn start(health: &'a EngineHealth) -> Self {
health.running.store(true, Ordering::Relaxed);
Self(health)
}
}
impl Drop for Running<'_> {
fn drop(&mut self) {
self.0.running.store(false, Ordering::Relaxed);
if std::thread::panicking() {
error!("sync engine stopped by a panic; nothing syncs until the daemon restarts");
}
}
}
/// One folder's pass, contained: a panic in it sets the folder to `error` and
/// leaves the engine running for the next one.
fn run_pass(core: &Core, folder: &StoredSyncFolder) {
if core
.sync_engine
.contain(folder.id, || core.reconcile_folder(folder))
{
return;
}
core.progress_end(folder.id);
let _ = core
.db
.sync_folder_set_state(folder.id, "error", folder.last_sync);
error!(
id = folder.id,
path = %folder.local_path,
"sync: pass panicked; the folder is set to error and tried again on the next poll"
);
core.log_activity(
ActivityKind::Sync,
format!("sync failed for {}", base_name(&folder.local_path)),
"an internal error stopped the pass; it is tried again on the next poll",
false,
);
}
/// The pass a `Reconcile(id)` asked for. A folder removed since, or one the
/// database cannot read, is said so rather than dropped in silence.
fn run_pass_by_id(core: &Core, id: i64) {
match core.db.sync_folder_get(id) {
Ok(Some(folder)) => run_pass(core, &folder),
Ok(None) => debug!(id, "sync: folder removed before its pass; skipping"),
Err(e) => warn!(id, error = ?e, "sync: cannot read folder; skipping its pass"),
}
}
/// The engine control loop. Single-threaded so reconcile passes never overlap. /// The engine control loop. Single-threaded so reconcile passes never overlap.
fn engine_loop(core: Core, rx: Receiver<SyncMsg>) { fn engine_loop(core: Core, rx: Receiver<SyncMsg>) {
let health = core.sync_engine.clone();
let _running = Running::start(&health);
// Paths the watcher currently covers, mapped to their folder id, so an event // Paths the watcher currently covers, mapped to their folder id, so an event
// path can be resolved back to the folder it belongs to. // path can be resolved back to the folder it belongs to.
let watched: Arc<Mutex<Vec<(PathBuf, i64)>>> = Arc::new(Mutex::new(Vec::new())); let watched: Arc<Mutex<Vec<(PathBuf, i64)>>> = Arc::new(Mutex::new(Vec::new()));
let tx_events = core.sync_tx.clone(); let tx_events = core.sync_tx.clone();
let watched_events = watched.clone(); let watched_events = watched.clone();
let mut watcher = let handler = move |res: notify::Result<notify::Event>| {
match notify::recommended_watcher(move |res: notify::Result<notify::Event>| { let event = match res {
let Ok(event) = res else { return }; Ok(event) => event,
// Ignore pure metadata/access noise; content changes are what matter. // Running out of inotify watches for a new subfolder, say: that
if matches!(event.kind, notify::EventKind::Access(_)) { // subfolder's changes are then found by the poll only (B262).
return;
}
let msg = event_target(&watched_events.lock(), &event.paths);
let _ = tx_events.send(msg);
}) {
Ok(w) => w,
Err(e) => { Err(e) => {
warn!(error = %e, "filesystem watcher unavailable; sync is poll-only"); warn!(error = %e, "sync: filesystem watcher error");
// Still run the loop so polling and explicit SyncNow work.
poll_only_loop(&core, rx);
return; return;
} }
}; };
// Ignore pure metadata/access noise; content changes are what matter.
if matches!(event.kind, notify::EventKind::Access(_)) {
return;
}
let msg = event_target(&watched_events.lock(), &event.paths);
let _ = tx_events.send(msg);
};
// The local walk skips symlinks, so following them here would only watch
// trees outside the folder, and run passes over it for changes made there.
let config = notify::Config::default().with_follow_symlinks(false);
let mut watcher = match notify::RecommendedWatcher::new(handler, config) {
Ok(w) => w,
Err(e) => {
warn!(error = %e, "filesystem watcher unavailable; sync is poll-only");
// Still run the loop so polling and explicit SyncNow work.
poll_only_loop(&core, rx);
return;
}
};
// Periodic remote poll. // Periodic remote poll.
{ {
@@ -96,8 +232,9 @@ fn engine_loop(core: Core, rx: Receiver<SyncMsg>) {
.ok(); .ok();
} }
rewatch(&core, &mut watcher, &watched); let mut unwatched = rewatch(&core, &mut watcher, &watched);
reconcile_all(&core); let mut last_rewatch = Instant::now();
run_burst(&core, &HashSet::new(), true);
while let Ok(msg) = rx.recv() { while let Ok(msg) = rx.recv() {
let mut ids: HashSet<i64> = HashSet::new(); let mut ids: HashSet<i64> = HashSet::new();
@@ -110,21 +247,16 @@ fn engine_loop(core: Core, rx: Receiver<SyncMsg>) {
return; return;
} }
// A folder whose watch failed is tried again now and then, not only
// when the folder set changes.
if unwatched && last_rewatch.elapsed() >= REWATCH_RETRY {
do_rewatch = true;
}
if do_rewatch { if do_rewatch {
rewatch(&core, &mut watcher, &watched); unwatched = rewatch(&core, &mut watcher, &watched);
} last_rewatch = Instant::now();
if all {
reconcile_all(&core);
} else {
for id in ids {
if core.sync_paused() {
break;
}
if let Ok(Some(folder)) = core.db.sync_folder_get(id) {
core.reconcile_folder(&folder);
}
}
} }
run_burst(&core, &ids, all);
} }
} }
@@ -141,7 +273,7 @@ fn poll_only_loop(core: &Core, rx: Receiver<SyncMsg>) {
} }
}); });
} }
reconcile_all(core); run_burst(core, &HashSet::new(), true);
while let Ok(msg) = rx.recv() { while let Ok(msg) = rx.recv() {
let mut ids: HashSet<i64> = HashSet::new(); let mut ids: HashSet<i64> = HashSet::new();
let mut all = false; let mut all = false;
@@ -152,21 +284,59 @@ fn poll_only_loop(core: &Core, rx: Receiver<SyncMsg>) {
info!("sync engine stopping"); info!("sync engine stopping");
return; return;
} }
if all { run_burst(core, &ids, all);
reconcile_all(core); }
} else { }
for id in ids {
if core.sync_paused() { /// Run the passes one burst asked for: the folders named by id, then, when the
break; /// burst also holds a `ReconcileAll`, every other folder.
} ///
if let Ok(Some(folder)) = core.db.sync_folder_get(id) { /// The named folders go first. A poll's `ReconcileAll` in the same burst used
core.reconcile_folder(&folder); /// to take their place, and a folder just added, which has the highest id,
} /// waited behind a full pass over every other folder (`docs/BUGS.md` B260).
///
/// Skipped while sync is paused, and cut short when a pause lands between
/// passes: the resume sends a fresh [`SyncMsg::ReconcileAll`], which walks
/// everything the watcher reported meanwhile.
fn run_burst(core: &Core, ids: &HashSet<i64>, all: bool) {
if core.sync_paused() {
debug!("sync: paused, skipping reconcile");
return;
}
let folders = if all {
match core.db.sync_folder_list() {
Ok(folders) => folders,
Err(e) => {
warn!(error = ?e, "sync: cannot list folders");
Vec::new()
} }
} }
} else {
Vec::new()
};
let listed: Vec<i64> = folders.iter().map(|f| f.id).collect();
for id in burst_order(ids, &listed) {
if core.sync_paused() {
break;
}
// A folder named by id is read again: it may have been added or
// changed after the list was read.
match folders.iter().find(|f| f.id == id) {
Some(folder) if !ids.contains(&id) => run_pass(core, folder),
_ => run_pass_by_id(core, id),
}
} }
} }
/// The order of a burst's passes: the folders named by id, lowest first, then
/// the rest of `listed` in its own order.
pub(super) fn burst_order(ids: &HashSet<i64>, listed: &[i64]) -> Vec<i64> {
let mut order: Vec<i64> = ids.iter().copied().collect();
order.sort_unstable();
order.extend(listed.iter().copied().filter(|id| !ids.contains(id)));
order
}
/// Absorb the rest of an event burst, returning once the watcher has been quiet /// Absorb the rest of an event burst, returning once the watcher has been quiet
/// for `quiet` or `cap` has elapsed since the first event — whichever comes /// for `quiet` or `cap` has elapsed since the first event — whichever comes
/// first. The caller has already classified the event that opened the burst. /// first. The caller has already classified the event that opened the burst.
@@ -238,26 +408,6 @@ pub(super) fn classify(
true true
} }
/// Reconcile every mirror folder in turn. Skipped while sync is paused: the
/// resume sends a fresh [`SyncMsg::ReconcileAll`], which walks everything the
/// watcher reported meanwhile.
fn reconcile_all(core: &Core) {
if core.sync_paused() {
debug!("sync: paused, skipping reconcile");
return;
}
let folders = match core.db.sync_folder_list() {
Ok(f) => f,
Err(e) => {
warn!(error = ?e, "sync: cannot list folders");
return;
}
};
for folder in folders {
core.reconcile_folder(&folder);
}
}
/// The reconcile a watcher event asks for: the one mirror folder all its paths /// The reconcile a watcher event asks for: the one mirror folder all its paths
/// lie in, so an edit in one folder does not walk every other one too. An event /// lie in, so an edit in one folder does not walk every other one too. An event
/// that spans folders, or that no watched folder claims (a watch list a moment /// that spans folders, or that no watched folder claims (a watch list a moment
@@ -278,7 +428,8 @@ pub(super) fn event_target(watched: &[(PathBuf, i64)], paths: &[PathBuf]) -> Syn
} }
/// Bring the filesystem watches in line with the current mirror-folder set: /// Bring the filesystem watches in line with the current mirror-folder set:
/// watch newly-added folders, drop removed ones. /// watch newly-added folders, drop removed ones. Returns whether a folder is
/// left unwatched because its watch failed.
/// ///
/// The watch calls run on a copy, outside the lock: the watcher's event /// The watch calls run on a copy, outside the lock: the watcher's event
/// callback takes the same lock, and a backend that hands a watch request to /// callback takes the same lock, and a backend that hands a watch request to
@@ -287,7 +438,7 @@ fn rewatch(
core: &Core, core: &Core,
watcher: &mut notify::RecommendedWatcher, watcher: &mut notify::RecommendedWatcher,
watched: &Mutex<Vec<(PathBuf, i64)>>, watched: &Mutex<Vec<(PathBuf, i64)>>,
) { ) -> bool {
let want: Vec<(PathBuf, i64)> = match core.db.sync_folder_list() { let want: Vec<(PathBuf, i64)> = match core.db.sync_folder_list() {
Ok(f) => f Ok(f) => f
.into_iter() .into_iter()
@@ -296,30 +447,60 @@ fn rewatch(
.collect(), .collect(),
Err(e) => { Err(e) => {
warn!(error = ?e, "sync: cannot list folders to watch"); warn!(error = ?e, "sync: cannot list folders to watch");
return; return false;
} }
}; };
let mut have = watched.lock().clone(); let mut have = watched.lock().clone();
// Drop watches no longer wanted. // Drop watches no longer wanted.
have.retain(|(path, _)| { for path in keep_wanted(&mut have, &want) {
if want.iter().any(|(p, _)| p == path) { let _ = watcher.unwatch(&path);
true }
} else {
let _ = watcher.unwatch(path);
false
}
});
// Add newly wanted watches. // Add newly wanted watches.
let mut failed = false;
for (path, id) in &want { for (path, id) in &want {
if have.iter().any(|(p, _)| p == path) { if have.iter().any(|(p, _)| p == path) {
continue; continue;
} }
match watcher.watch(path, RecursiveMode::Recursive) { match watcher.watch(path, RecursiveMode::Recursive) {
Ok(()) => have.push((path.clone(), *id)), Ok(()) => have.push((path.clone(), *id)),
Err(e) => warn!(path = %path.display(), error = %e, "sync: watch failed"), Err(e) => {
// A recursive watch that fails partway keeps the watches it had
// added. Their events would match no folder and run a pass over
// every one, and they hold watches the next folder needs (B262).
let _ = watcher.unwatch(path);
failed = true;
warn!(
path = %path.display(),
error = %e,
"sync: watch failed; the poll finds this folder's changes until a retry \
works. A low fs.inotify.max_user_watches is the usual cause"
);
}
} }
} }
*watched.lock() = have; *watched.lock() = have;
failed
}
/// Keep the watches in `have` that `want` still asks for, and return the paths
/// of the others, to unwatch.
///
/// A path is matched alone, but takes the id `want` gives it: a folder removed
/// and added again in one burst keeps its watch, and its events go to the new
/// row rather than to the removed one (`docs/BUGS.md` B272).
pub(super) fn keep_wanted(have: &mut Vec<(PathBuf, i64)>, want: &[(PathBuf, i64)]) -> Vec<PathBuf> {
let mut dropped = Vec::new();
have.retain_mut(|(path, id)| match want.iter().find(|(p, _)| p == path) {
Some((_, wanted)) => {
*id = *wanted;
true
}
None => {
dropped.push(path.clone());
false
}
});
dropped
} }
// ---- reconcile ------------------------------------------------------------ // ---- reconcile ------------------------------------------------------------
+52 -3
View File
@@ -597,6 +597,19 @@ pub(crate) fn this_computer_subtitle(folders: &[SyncFolderInfo]) -> String {
folders.len() as u64, folders.len() as u64,
&[], &[],
); );
// A folder whose first pass has not run is not backed up yet, whatever its
// state column says (`docs/BUGS.md` B261).
let waiting = folders.iter().filter(|f| never_synced(f)).count();
let count = match waiting {
0 => count,
// Translators: {folders} is "N folders backed up"; {n} counts the folders whose first sync has not run yet.
n => ngettext_f(
"{folders} · {n} waiting for its first sync",
"{folders} · {n} waiting for their first sync",
n as u64,
&[("folders", &count)],
),
};
let attention = folders let attention = folders
.iter() .iter()
.filter(|f| f.state == "error" || f.state == "conflict") .filter(|f| f.state == "error" || f.state == "conflict")
@@ -613,12 +626,21 @@ pub(crate) fn this_computer_subtitle(folders: &[SyncFolderInfo]) -> String {
} }
} }
/// Human label for a synced folder's `state` column. /// Whether a synced folder is a mirror whose first pass has not finished.
pub(crate) fn sync_state_label(state: &str) -> String { /// Its `state` starts out `idle`, which would read as "up to date".
fn never_synced(folder: &SyncFolderInfo) -> bool {
folder.mode == "mirror" && folder.last_sync == 0 && folder.state == "idle"
}
/// Human label for a synced folder's `state` column. `never_synced` is a
/// mirror folder whose first pass has not finished: its `state` starts out
/// `idle`, and "up to date" would say the opposite of the truth (B261).
pub(crate) fn sync_state_label(state: &str, never_synced: bool) -> String {
match state { match state {
"syncing" => gettext("syncing…"), "syncing" => gettext("syncing…"),
"error" => gettext("sync error"), "error" => gettext("sync error"),
"conflict" => gettext("needs attention"), "conflict" => gettext("needs attention"),
_ if never_synced => gettext("waiting for first sync"),
_ => gettext("up to date"), _ => gettext("up to date"),
} }
} }
@@ -1274,7 +1296,7 @@ mod tests {
remote_uid: "vol~link".into(), remote_uid: "vol~link".into(),
mode: "mirror".into(), mode: "mirror".into(),
state: state.into(), state: state.into(),
last_sync: 0, last_sync: 1_700_000_000,
pending_mode: None, pending_mode: None,
progress: None, progress: None,
paused: false, paused: false,
@@ -1286,6 +1308,33 @@ mod tests {
assert_eq!(this_computer_subtitle(&[]), "No folders backed up yet"); assert_eq!(this_computer_subtitle(&[]), "No folders backed up yet");
} }
/// A folder added a moment ago is not backed up yet, and the row must not
/// say it is (`docs/BUGS.md` B261). An on-demand folder has no first sync.
#[test]
fn a_folder_before_its_first_sync_is_not_counted_as_backed_up() {
let new = SyncFolderInfo {
last_sync: 0,
..folder("idle")
};
assert_eq!(
this_computer_subtitle(&[folder("idle"), new.clone()]),
"2 folders backed up · 1 waiting for its first sync"
);
let failed = SyncFolderInfo {
state: "error".into(),
..new.clone()
};
assert_eq!(
this_computer_subtitle(&[new.clone(), failed]),
"2 folders backed up · 1 waiting for its first sync · 1 needs attention"
);
let on_demand = SyncFolderInfo {
mode: "ondemand".into(),
..new
};
assert_eq!(this_computer_subtitle(&[on_demand]), "1 folder backed up");
}
#[test] #[test]
fn folders_needing_attention_are_counted_not_hidden() { fn folders_needing_attention_are_counted_not_hidden() {
// The per-folder rows live on the Sync page, so this row is the only // The per-folder rows live on the Sync page, so this row is the only
+22 -1
View File
@@ -1729,7 +1729,10 @@ pub(crate) fn location_subtitle(spec: &MountSpec) -> String {
parts.push(match &spec.progress { parts.push(match &spec.progress {
Some(p) => sync_progress_label(p), Some(p) => sync_progress_label(p),
None if spec.paused => pgettext("state", "paused"), None if spec.paused => pgettext("state", "paused"),
None => sync_state_label(&spec.state).to_string(), None => sync_state_label(
&spec.state,
spec.mode == MountMode::Mirror && spec.last_sync == 0,
),
}); });
} }
// Only the locations that are supposed to have a session report its absence: // Only the locations that are supposed to have a session report its absence:
@@ -1775,7 +1778,25 @@ mod tests {
MountMode::Mirror, MountMode::Mirror,
false, false,
); );
assert_eq!(location_subtitle(&spec), "Synced · waiting for first sync");
}
/// A folder whose first pass has not run is not up to date, though its
/// state column starts out `idle` (`docs/BUGS.md` B261).
#[test]
fn a_folder_reads_up_to_date_only_after_its_first_sync() {
let mut spec = spec(
MountKind::Device { sync_folder_id: 7 },
MountMode::Mirror,
false,
);
assert_eq!(location_subtitle(&spec), "Synced · waiting for first sync");
spec.last_sync = 1_700_000_000;
assert_eq!(location_subtitle(&spec), "Synced · up to date"); assert_eq!(location_subtitle(&spec), "Synced · up to date");
// A folder that failed before it ever synced says so.
spec.last_sync = 0;
spec.state = "error".into();
assert_eq!(location_subtitle(&spec), "Synced · sync error");
} }
#[test] #[test]
+69 -25
View File
@@ -69,7 +69,6 @@ original wording.
| Entry | Title | What is left | | Entry | Title | What is left |
|---|---|---| |---|---|---|
| [B273](#b273--a-restore-proposes-another-computers-paths-when-the-two-share-a-hostname) | A restore proposes another computer's paths when the two share a hostname | Not fixed | | [B273](#b273--a-restore-proposes-another-computers-paths-when-the-two-share-a-hostname) | A restore proposes another computer's paths when the two share a hostname | Not fixed |
| [B272](#b272--after-a-folder-is-removed-and-added-again-its-file-events-go-to-the-old-id) | After a folder is removed and added again, its file events go to the old id | Not fixed |
| [B271](#b271--one-failed-listing-makes-a-large-first-sync-start-over-from-nothing) | One failed listing makes a large first sync start over from nothing | Not fixed | | [B271](#b271--one-failed-listing-makes-a-large-first-sync-start-over-from-nothing) | One failed listing makes a large first sync start over from nothing | Not fixed |
| [B270](#b270--one-file-left-in-a-mirror-folder-clears-the-wipe-guard-for-all-the-others) | One file left in a mirror folder clears the wipe guard for all the others | Not fixed | | [B270](#b270--one-file-left-in-a-mirror-folder-clears-the-wipe-guard-for-all-the-others) | One file left in a mirror folder clears the wipe guard for all the others | Not fixed |
| [B269](#b269--a-restore-that-skipped-every-folder-reports-success) | A restore that skipped every folder reports success | Not fixed | | [B269](#b269--a-restore-that-skipped-every-folder-reports-success) | A restore that skipped every folder reports success | Not fixed |
@@ -77,11 +76,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 | | [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 | | [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 | | [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 |
| [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 |
| [B259](#b259--the-sync-engine-can-die-or-hang-and-nothing-shows-it-until-a-restart) | The sync engine can die or hang, and nothing shows it until a restart | Not fixed; the trigger in #53 is not known |
| [B258](#b258--journalctl--p-warning-shows-nothing-whatever-the-daemon-logged) | `journalctl -p warning` shows nothing, whatever the daemon logged | Not fixed |
| [B134](#b134--a-file-deleted-online-while-the-drain-checks-its-write-is-kept-as-a-conflict-copy) | A file deleted online while the drain checks its write is kept as a conflict copy | Only with `local_first` off | | [B134](#b134--a-file-deleted-online-while-the-drain-checks-its-write-is-kept-as-a-conflict-copy) | A file deleted online while the drain checks its write is kept as a conflict copy | Only with `local_first` off |
| [B91](#b91--the-daemon-hung-overnight-and-nothing-could-say-what-it-was-waiting-on) | The daemon hung overnight, and nothing could say what it was waiting on | The cause is not diagnosed; the daemon now reports where it is stuck and is restarted | | [B91](#b91--the-daemon-hung-overnight-and-nothing-could-say-what-it-was-waiting-on) | The daemon hung overnight, and nothing could say what it was waiting on | The cause is not diagnosed; the daemon now reports where it is stuck and is restarted |
| [B67](#b67--fresh-state-restore-can-silently-select-a-new-device-high-22) | Fresh-state restore can silently select a new device (HIGH-22) | An ambiguous device after a loss of local state is not asked about | | [B67](#b67--fresh-state-restore-can-silently-select-a-new-device-high-22) | Fresh-state restore can silently select a new device (HIGH-22) | An ambiguous device after a loss of local state is not asked about |
@@ -95,6 +89,8 @@ original wording.
| Entry | Title | What is left | | 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 | | [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 |
| [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 | The first pass still waits for the watch; a failed watch is not shown in the app |
| [B259](#b259--the-sync-engine-can-die-or-hang-and-nothing-shows-it-until-a-restart) | The sync engine can die or hang, and nothing shows it until a restart | No pass deadline; an ended engine is reported, not restarted; the trigger in #53 is not known |
| [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 | | [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 | | [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 | | [B72](#b72--pdfs-trash-never-returns) | `pdfs trash` never returns | The slowness of the first refresh is unmeasured |
@@ -116,6 +112,10 @@ a live account since.
| Entry | Title | | 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 | | [B264](#b264--a-mount-that-fails-after-starting-its-workers-leaves-them-running) | A mount that fails after starting its workers leaves them running |
| [B261](#b261--a-folder-that-has-never-synced-reads-up-to-date) | A folder that has never synced reads "up to date" |
| [B272](#b272--after-a-folder-is-removed-and-added-again-its-file-events-go-to-the-old-id) | After a folder is removed and added again, its file events go to the old id |
| [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 |
| [B258](#b258--journalctl--p-warning-shows-nothing-whatever-the-daemon-logged) | `journalctl -p warning` shows nothing, whatever the daemon logged |
| [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version | | [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 | | [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 | | [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 |
@@ -395,7 +395,7 @@ written before it existed.
### B272 — After a folder is removed and added again, its file events go to the old id ### B272 — After a folder is removed and added again, its file events go to the old id
**Status:** Open **Status:** Fixed, not verified live
**Found:** 2026-10-31, code audit after issue #53. **Found:** 2026-10-31, code audit after issue #53.
**Where:** `rewatch` in `crates/pdfs-fuse/src/sync/engine.rs` **Where:** `rewatch` in `crates/pdfs-fuse/src/sync/engine.rs`
@@ -407,8 +407,10 @@ two-minute poll, and the same goes for every later edit until the daemon restart
path is still wanted, so the old entry stays with the removed folder's id. Its events become path is still wanted, so the old entry stays with the removed folder's id. Its events become
`Reconcile(old id)`, `sync_folder_get` finds no row, and the request is dropped. `Reconcile(old id)`, `sync_folder_get` finds no row, and the request is dropped.
**Fix.** Not done. Compare `(path, id)` pairs, and update the id of a path that is still **Fix.** `keep_wanted` keeps a watch whose path is still wanted and gives it the id the
watched. folder list has now.
**Test:** `a_re_added_folder_keeps_its_watch_under_the_new_id` in `pdfs-fuse`.
--- ---
@@ -633,7 +635,8 @@ and 15 s) and recorded `attempts: 3` with the lock error.
### B262 — Watching a large synced folder holds up the sync engine, and a failed watch is never retried ### B262 — Watching a large synced folder holds up the sync engine, and a failed watch is never retried
**Status:** Open **Status:** Partly fixed. A watch is still set up before the first pass, and a failed watch
is not shown in the folder's state.
**Found:** 2026-10-31, code audit after issue #53. **Found:** 2026-10-31, code audit after issue #53.
**Where:** `rewatch` and `engine_loop` in `crates/pdfs-fuse/src/sync/engine.rs` **Where:** `rewatch` and `engine_loop` in `crates/pdfs-fuse/src/sync/engine.rs`
@@ -651,14 +654,22 @@ line, the folder is never watched, and later changes are found only by the two-m
and they use up watches the next folder needs. and they use up watches the next folder needs.
- Errors the watcher reports later are dropped in its callback. - Errors the watcher reports later are dropped in its callback.
**Fix.** Not done. Reconcile first, unwatch after a partial failure and retry with a back-off, **Fix.**
turn off symlink following, and show a watch failure in the folder's state. - A failed watch is unwatched, which removes the watches it had added under the folder, and
is tried again every 10 minutes. The warning names `fs.inotify.max_user_watches`.
- The watcher no longer follows symlinks.
- Errors the watcher reports are logged.
- Not done: the watch still runs before the folder's first pass. Watching first is what keeps
a change made during the pass from being missed, so the order stays; the cost is one walk
of a new folder's tree. A failed watch is not shown in the folder's state yet.
**Test:** none for the watch failure itself; it needs the inotify limit reached.
--- ---
### B261 — A folder that has never synced reads "up to date" ### B261 — A folder that has never synced reads "up to date"
**Status:** Open **Status:** Fixed, not verified live
**Found:** 2026-10-31, issue #53: "In Computers I add the folder. It appears as synced." **Found:** 2026-10-31, issue #53: "In Computers I add the folder. It appears as synced."
**Where:** `sync_folder` in `crates/pdfs-core/src/db/migrations.rs`; `sync_state_label` in **Where:** `sync_folder` in `crates/pdfs-core/src/db/migrations.rs`; `sync_state_label` in
`crates/pdfs-gui/src/app/pages/devices.rs`; the location rows in `crates/pdfs-gui/src/app/pages/devices.rs`; the location rows in
@@ -673,14 +684,21 @@ every folder while sync is paused for the whole account.
it, and a test pins the label for that case. The rows only show a folder's own pause, not the it, and a test pins the label for that case. The rows only show a folder's own pause, not the
account-wide one. account-wide one.
**Fix.** Not done. Show "waiting for first sync" when `last_sync` is 0, and show the **Fix.** A mirror folder whose `last_sync` is 0 and whose state is `idle` reads "waiting for
account-wide pause on the folder rows. first sync" on its row. The This computer row on the Computers page counts such folders, as in
"2 folders backed up · 1 waiting for its first sync". An on-demand folder has no first sync,
so it is left out. The account-wide pause stays where it already is, the pause card at the top
of the page; repeating it on every row would only add noise.
**Test:** `a_folder_reads_up_to_date_only_after_its_first_sync` and
`a_folder_before_its_first_sync_is_not_counted_as_backed_up` in `pdfs-gui`; the pinned test now
expects the new label.
--- ---
### B260 — The poll pushes a new folder's first sync behind every other folder ### B260 — The poll pushes a new folder's first sync behind every other folder
**Status:** Open **Status:** Fixed, not verified live
**Found:** 2026-10-31, code audit after issue #53. **Found:** 2026-10-31, code audit after issue #53.
**Where:** `engine_loop` in `crates/pdfs-fuse/src/sync/engine.rs` **Where:** `engine_loop` in `crates/pdfs-fuse/src/sync/engine.rs`
@@ -693,14 +711,18 @@ running. When a burst holds both a `ReconcileAll` and a folder's `Reconcile(id)`
only `reconcile_all`, which goes in id order. A new folder has the highest id, so it always only `reconcile_all`, which goes in id order. A new folder has the highest id, so it always
goes last. goes last.
**Fix.** Not done. Run the folders asked for by id before the rest, and don't queue a poll **Fix.** `run_burst` runs the folders a burst names by id first, lowest id first, and then
while a pass runs. every other folder when the burst also holds a `ReconcileAll`. A named folder is read again
before its pass. A pause that lands between passes now stops the rest of the burst.
**Test:** `named_folders_run_before_the_rest_of_a_burst` in `pdfs-fuse`.
--- ---
### B259 — The sync engine can die or hang, and nothing shows it until a restart ### B259 — The sync engine can die or hang, and nothing shows it until a restart
**Status:** Open **Status:** Partly fixed. A hung pass is reported but not ended, and a panic outside a pass
still stops the engine; it is reported, not restarted.
**Found:** 2026-10-31, issue #53: a newly added folder did not sync until the reporter restarted **Found:** 2026-10-31, issue #53: a newly added folder did not sync until the reporter restarted
the app. All FUSE workers were idle, nothing was queued, and the warning-level journal was the app. All FUSE workers were idle, nothing was queued, and the warning-level journal was
empty (B258). empty (B258).
@@ -724,15 +746,30 @@ is why it helps.
nothing about sync. nothing about sync.
- A database error when the engine reads a folder drops that folder's request without a log. - A database error when the engine reads a folder drops that folder's request without a log.
**Fix.** Not done. Catch a panic per pass, end its progress and set the folder to `error`. Have **Fix.**
the supervisor restart a finished engine thread. Log passes at info, and report the folder, - Each pass runs under `catch_unwind` (`EngineHealth::contain` in
the pass age and the queue in `Diagnostics`. `crates/pdfs-fuse/src/sync/engine.rs`). A panic ends that pass only: its progress is cleared,
the folder is set to `error`, the activity feed says so, and the next poll tries again.
- `Diagnostics` carries the engine's state: running or not, the folder of the running pass, how
long it has run and how long since it last reported progress, and how many passes panicked.
`pdfs diagnostics` prints it as `sync engine: …`.
- The supervisor warns when the engine thread has ended, and when a pass has reported no
progress for 15 minutes.
- A first pass logs its start and end at info, as does any pass that changed something or
took 30 s or more. A request for a folder the database cannot read is logged.
- Not done: a deadline for a pass, and restarting an engine thread that has ended. The
channel's receiver ends with the thread, so a restart needs a new channel in every `Core`
clone.
**Test:** `a_panicking_pass_is_contained_and_counted`, `the_running_pass_is_reported` and
`the_engine_reads_as_stopped_once_its_thread_ends` in `pdfs-fuse`;
`a_stopped_sync_engine_is_a_stall` and `only_a_quiet_sync_pass_is_a_stall` in the supervisor.
--- ---
### B258 — `journalctl -p warning` shows nothing, whatever the daemon logged ### B258 — `journalctl -p warning` shows nothing, whatever the daemon logged
**Status:** Open **Status:** Fixed, not verified live
**Found:** 2026-10-31, issue #53: the reporter ran `journalctl --user -u proton-drive.service -b **Found:** 2026-10-31, issue #53: the reporter ran `journalctl --user -u proton-drive.service -b
-p warning`, as `docs/TROUBLESHOOTING.md` tells them to, and got `-- No entries --`. -p warning`, as `docs/TROUBLESHOOTING.md` tells them to, and got `-- No entries --`.
**Where:** `main` in `crates/pdfs-cli/src/main.rs`; `packaging/proton-drive.service` **Where:** `main` in `crates/pdfs-cli/src/main.rs`; `packaging/proton-drive.service`
@@ -745,8 +782,15 @@ stores every line of a service's output at the unit's default priority, info, un
starts with a `<N>` prefix. So every `WARN` and `ERROR` line is stored as info, and the starts with a `<N>` prefix. So every `WARN` and `ERROR` line is stored as info, and the
troubleshooting guide's filter hides all of them. troubleshooting guide's filter hides all of them.
**Fix.** Not done. When `JOURNAL_STREAM` says the output goes to journald, start each line with **Fix.** When standard output is the journal stream (`JOURNAL_STREAM` names the same
the `<N>` prefix for its level. device and inode as fd 1), each line starts with the `<N>` prefix for its level, and ANSI colours
are off. A terminal that merely inherited `JOURNAL_STREAM` keeps the plain format
(`crates/pdfs-cli/src/journal.rs`).
**Test:** `each_line_opens_with_the_priority_of_its_level` and
`journal_stream_must_name_the_same_file` in `pdfs-cli`. On 2026-10-31, `pdfs diagnose` run with
`RUST_LOG=debug` under `systemd-run --user -p StandardOutput=journal` stored its debug lines at
`PRIORITY=7` and its report at 6.
--- ---
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: German\n" "Language-Team: German\n"
@@ -249,13 +249,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -350,7 +350,7 @@ msgstr "Raster / Liste"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Umbenennen" msgstr "Umbenennen"
@@ -433,7 +433,9 @@ msgstr "Proton Drive kann nicht geöffnet werden"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "Der Proton-Drive-Dienst kann wiederholt nicht starten und versucht es selbstständig erneut. Letzter Fehler: {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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -693,7 +695,7 @@ msgid "Couldn't add a sync folder"
msgstr "Synchronisierungsordner konnte nicht hinzugefügt werden" msgstr "Synchronisierungsordner konnte nicht hinzugefügt werden"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Ordner konnten nicht wiederhergestellt werden" msgstr "Ordner konnten nicht wiederhergestellt werden"
@@ -1285,12 +1287,12 @@ msgstr "Alben konnten nicht geladen werden"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1940,7 +1942,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Neuer Name" msgstr "Neuer Name"
@@ -1965,7 +1967,7 @@ msgstr "Den Zielordner auswählen."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Hierher verschieben" msgstr "Hierher verschieben"
@@ -2290,76 +2292,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} Ordner gesichert" msgstr[0] "{n} Ordner gesichert"
msgstr[1] "{n} Ordner gesichert" msgstr[1] "{n} Ordner gesichert"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} wartet auf die erste Synchronisierung"
msgstr[1] "{folders} · {n} warten auf die erste Synchronisierung"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} erfordert Aufmerksamkeit" msgstr[0] "{folders} · {n} erfordert Aufmerksamkeit"
msgstr[1] "{folders} · {n} erfordern Aufmerksamkeit" msgstr[1] "{folders} · {n} erfordern Aufmerksamkeit"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "wird synchronisiert …" msgstr "wird synchronisiert …"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "Synchronisierungsfehler" msgstr "Synchronisierungsfehler"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "erfordert Aufmerksamkeit" msgstr "erfordert Aufmerksamkeit"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "wartet auf erste Synchronisierung"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "aktuell" msgstr "aktuell"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "wird auf Änderungen geprüft …" msgstr "wird auf Änderungen geprüft …"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "wird auf Änderungen geprüft – {n} Element geprüft" msgstr[0] "wird auf Änderungen geprüft – {n} Element geprüft"
msgstr[1] "wird auf Änderungen geprüft – {n} Elemente geprüft" msgstr[1] "wird auf Änderungen geprüft – {n} Elemente geprüft"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "wird auf Änderungen geprüft – {done} von {total}" msgstr "wird auf Änderungen geprüft – {done} von {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "{done} von {total} wird synchronisiert" msgstr "{done} von {total} wird synchronisiert"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "{file} wird synchronisiert – {done} von {total}" msgstr "{file} wird synchronisiert – {done} von {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Ordner zur Synchronisierung hinzufügen" msgstr "Ordner zur Synchronisierung hinzufügen"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Ordner wird synchronisiert …" msgstr "Ordner wird synchronisiert …"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Ordner konnte nicht hinzugefügt werden" msgstr "Ordner konnte nicht hinzugefügt werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Wiederherstellbare Ordner konnten nicht aufgelistet werden" msgstr "Wiederherstellbare Ordner konnten nicht aufgelistet werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2367,19 +2380,19 @@ msgstr ""
"Die Ordner ankreuzen, die mit diesem Rechner synchronisiert werden sollen, " "Die Ordner ankreuzen, die mit diesem Rechner synchronisiert werden sollen, "
"und für jeden den Speicherort anpassen." "und für jeden den Speicherort anpassen."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Ordner wiederherstellen" msgstr "Ordner wiederherstellen"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Wiederherstellen" msgstr "Wiederherstellen"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Ordner werden wiederhergestellt …" msgstr "Ordner werden wiederhergestellt …"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2388,37 +2401,37 @@ msgstr ""
"Diese Ordner werden von „{name}“ gesichert. Wiederhergestellte Ordner werden " "Diese Ordner werden von „{name}“ gesichert. Wiederhergestellte Ordner werden "
"weiterhin mit der Kopie dieses Computers synchronisiert." "weiterhin mit der Kopie dieses Computers synchronisiert."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "Diese Ordner werden in Proton Drive unter diesem Computer gesichert." msgstr "Diese Ordner werden in Proton Drive unter diesem Computer gesichert."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Nichts wiederherzustellen – alle Ordner von „{name}“ werden bereits hier " "Nichts wiederherzustellen – alle Ordner von „{name}“ werden bereits hier "
"synchronisiert." "synchronisiert."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Nichts wiederherzustellen – alle Ordner dieses Computers werden bereits hier " "Nichts wiederherzustellen – alle Ordner dieses Computers werden bereits hier "
"synchronisiert." "synchronisiert."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "Ordner wird auf „Nur online“ umgestellt" msgstr "Ordner wird auf „Nur online“ umgestellt"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "Ordner wird heruntergeladen und bleibt synchronisiert" msgstr "Ordner wird heruntergeladen und bleibt synchronisiert"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Modus konnte nicht geändert werden" msgstr "Modus konnte nicht geändert werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2436,7 +2449,7 @@ msgstr ""
"Ordner auf „Synchronisiert“ umstellen und vor dem Entfernen warten, bis der " "Ordner auf „Synchronisiert“ umstellen und vor dem Entfernen warten, bis der "
"Download abgeschlossen ist." "Download abgeschlossen ist."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2450,68 +2463,68 @@ msgstr ""
"mehr synchronisiert. Es kann zusätzlich ausgewählt werden, die Kopie in " "mehr synchronisiert. Es kann zusätzlich ausgewählt werden, die Kopie in "
"Proton Drive zu löschen." "Proton Drive zu löschen."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Synchronisierung des Ordners beenden?" msgstr "Synchronisierung des Ordners beenden?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Auch aus Proton Drive löschen" msgstr "Auch aus Proton Drive löschen"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Löscht die einzige Kopie dieser Dateien." msgstr "Löscht die einzige Kopie dieser Dateien."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "Die lokale Kopie bleibt unverändert." msgstr "Die lokale Kopie bleibt unverändert."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Synchronisierung beenden" msgstr "Synchronisierung beenden"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Synchronisierung des Ordners beendet" msgstr "Synchronisierung des Ordners beendet"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Synchronisierung des Ordners konnte nicht beendet werden" msgstr "Synchronisierung des Ordners konnte nicht beendet werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Computer umbenennen" msgstr "Computer umbenennen"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "„{name}“ umbenennen." msgstr "„{name}“ umbenennen."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Der Computer konnte nicht umbenannt werden" msgstr "Der Computer konnte nicht umbenannt werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "Ein Name ist erforderlich." msgstr "Ein Name ist erforderlich."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Computer umbenannt" msgstr "Computer umbenannt"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Zur Bestätigung „{name}“ eingeben" msgstr "Zur Bestätigung „{name}“ eingeben"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Computer entfernen?" msgstr "Computer entfernen?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2526,26 +2539,26 @@ msgstr ""
"gelöscht. Die Dateien auf dem Computer selbst bleiben unberührt – dies kann " "gelöscht. Die Dateien auf dem Computer selbst bleiben unberührt – dies kann "
"jedoch von hier aus nicht rückgängig gemacht werden." "jedoch von hier aus nicht rückgängig gemacht werden."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Entfernen" msgstr "Entfernen"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Computer entfernt" msgstr "Computer entfernt"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Der Computer konnte nicht entfernt werden" msgstr "Der Computer konnte nicht entfernt werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Diese Sicherung hier fortsetzen?" msgstr "Diese Sicherung hier fortsetzen?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2564,25 +2577,25 @@ msgstr ""
"werden nicht verschoben. Mit „Auf diesem Computer wiederherstellen“ lässt " "werden nicht verschoben. Mit „Auf diesem Computer wiederherstellen“ lässt "
"sich danach zurückholen, was „{name}“ synchronisiert hat." "sich danach zurückholen, was „{name}“ synchronisiert hat."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Hier fortsetzen" msgstr "Hier fortsetzen"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Sicherung jetzt als „{name}“" msgstr "Sicherung jetzt als „{name}“"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Diese Sicherung konnte hier nicht fortgesetzt werden" msgstr "Diese Sicherung konnte hier nicht fortgesetzt werden"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Mit diesem Computer synchronisieren?" msgstr "Mit diesem Computer synchronisieren?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2599,25 +2612,25 @@ msgstr ""
"„{name}“. Bereits hier synchronisierte Ordner bleiben, wo sie sind. Als " "„{name}“. Bereits hier synchronisierte Ordner bleiben, wo sie sind. Als "
"Nächstes wählen Sie, welche seiner Ordner hier synchronisiert werden." "Nächstes wählen Sie, welche seiner Ordner hier synchronisiert werden."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Hier synchronisieren" msgstr "Hier synchronisieren"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Jetzt synchron mit „{name}“" msgstr "Jetzt synchron mit „{name}“"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Synchronisierung mit diesem Computer nicht möglich" msgstr "Synchronisierung mit diesem Computer nicht möglich"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Sicherung auf diesen Computer verschieben?" msgstr "Sicherung auf diesen Computer verschieben?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2634,12 +2647,12 @@ msgstr ""
"verschwinden." "verschwinden."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Sicherung von „{name}“ verschoben" msgstr "Sicherung von „{name}“ verschoben"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Diese Sicherung konnte nicht verschoben werden" msgstr "Diese Sicherung konnte nicht verschoben werden"
@@ -3385,7 +3398,7 @@ msgid "paused"
msgstr "pausiert" msgstr "pausiert"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "nicht verfügbar" msgstr "nicht verfügbar"
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: English (United Kingdom)\n" "Language-Team: English (United Kingdom)\n"
@@ -245,13 +245,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -346,7 +346,7 @@ msgstr "Grid / list"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Rename" msgstr "Rename"
@@ -429,7 +429,9 @@ msgstr "Can't open your Drive"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "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}" 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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -685,7 +687,7 @@ msgid "Couldn't add a sync folder"
msgstr "Couldn't add a sync folder" msgstr "Couldn't add a sync folder"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Couldn't restore folders" msgstr "Couldn't restore folders"
@@ -1273,12 +1275,12 @@ msgstr "Couldn't load albums"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1921,7 +1923,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "New name" msgstr "New name"
@@ -1946,7 +1948,7 @@ msgstr "Choose the folder to move into."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Move Here" msgstr "Move Here"
@@ -2267,76 +2269,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} folder backed up" msgstr[0] "{n} folder backed up"
msgstr[1] "{n} folders backed up" msgstr[1] "{n} folders backed up"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} waiting for its first sync"
msgstr[1] "{folders} · {n} waiting for their first sync"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} needs attention" msgstr[0] "{folders} · {n} needs attention"
msgstr[1] "{folders} · {n} need attention" msgstr[1] "{folders} · {n} need attention"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "syncing…" msgstr "syncing…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "sync error" msgstr "sync error"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "needs attention" msgstr "needs attention"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "waiting for first sync"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "up to date" msgstr "up to date"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "checking for changes…" msgstr "checking for changes…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "checking for changes — {n} item checked" msgstr[0] "checking for changes — {n} item checked"
msgstr[1] "checking for changes — {n} items checked" msgstr[1] "checking for changes — {n} items checked"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "checking for changes — {done} of {total}" msgstr "checking for changes — {done} of {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "syncing {done} of {total}" msgstr "syncing {done} of {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "syncing {file} — {done} of {total}" msgstr "syncing {file} — {done} of {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Add Folder to Sync" msgstr "Add Folder to Sync"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Syncing folder…" msgstr "Syncing folder…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Couldn't add folder" msgstr "Couldn't add folder"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Couldn't list folders to restore" msgstr "Couldn't list folders to restore"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2344,19 +2357,19 @@ msgstr ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Restore Folders" msgstr "Restore Folders"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Restore" msgstr "Restore"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Restoring folders…" msgstr "Restoring folders…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2365,33 +2378,33 @@ msgstr ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
"with that computer's copy." "with that computer's copy."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "These folders are backed up under this computer in Proton Drive." msgstr "These folders are backed up under this computer in Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "Nothing to restore — “{name}”'s folders are all synced here." msgstr "Nothing to restore — “{name}”'s folders are all synced here."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "Nothing to restore — this computer's folders are all synced here." msgstr "Nothing to restore — this computer's folders are all synced here."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "Folder will switch to online only" msgstr "Folder will switch to online only"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "Folder will download and stay synced" msgstr "Folder will download and stay synced"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Couldn't change mode" msgstr "Couldn't change mode"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2408,7 +2421,7 @@ msgstr ""
"copy, cancel, switch the folder to Synced, and wait for the download to " "copy, cancel, switch the folder to Synced, and wait for the download to "
"finish before removing it." "finish before removing it."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2421,68 +2434,68 @@ msgstr ""
"The local files stay on this disk and simply stop being synced. Choose " "The local files stay on this disk and simply stop being synced. Choose "
"whether to also delete the copy in Proton Drive." "whether to also delete the copy in Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Stop Syncing Folder?" msgstr "Stop Syncing Folder?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Also delete from Proton Drive" msgstr "Also delete from Proton Drive"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Deletes the only copy of these files." msgstr "Deletes the only copy of these files."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "The local copy is unaffected." msgstr "The local copy is unaffected."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Stop Syncing" msgstr "Stop Syncing"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Stopped syncing folder" msgstr "Stopped syncing folder"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Couldn't stop syncing the folder" msgstr "Couldn't stop syncing the folder"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Rename Computer" msgstr "Rename Computer"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "Rename “{name}”." msgstr "Rename “{name}”."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Couldn't rename the computer" msgstr "Couldn't rename the computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "A name is required." msgstr "A name is required."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Computer renamed" msgstr "Computer renamed"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Type “{name}” to confirm" msgstr "Type “{name}” to confirm"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Remove Computer?" msgstr "Remove Computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2497,26 +2510,26 @@ msgstr ""
"on that computer itself are not touched — but this cannot be undone from " "on that computer itself are not touched — but this cannot be undone from "
"here." "here."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Remove" msgstr "Remove"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Computer removed" msgstr "Computer removed"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Couldn't remove the computer" msgstr "Couldn't remove the computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Continue This Backup Here?" msgstr "Continue This Backup Here?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2535,25 +2548,25 @@ msgstr ""
"“Restore to This Computer” afterwards to bring back what “{name}” was " "“Restore to This Computer” afterwards to bring back what “{name}” was "
"syncing." "syncing."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Continue Here" msgstr "Continue Here"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Now backing up as “{name}”" msgstr "Now backing up as “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Couldn't continue that backup here" msgstr "Couldn't continue that backup here"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Sync With This Computer?" msgstr "Sync With This Computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2570,25 +2583,25 @@ msgstr ""
"Folders already synced here stay where they are. Next you choose which of " "Folders already synced here stay where they are. Next you choose which of "
"its folders to sync here." "its folders to sync here."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Sync Here" msgstr "Sync Here"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Now syncing with “{name}”" msgstr "Now syncing with “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Couldn't sync with that computer" msgstr "Couldn't sync with that computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Move Backup to This Computer?" msgstr "Move Backup to This Computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2604,12 +2617,12 @@ msgstr ""
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear." "Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Moved the backup of “{name}”" msgstr "Moved the backup of “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Couldn't move that backup" msgstr "Couldn't move that backup"
@@ -3332,7 +3345,7 @@ msgid "paused"
msgstr "paused" msgstr "paused"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "not available" msgstr "not available"
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
@@ -247,13 +247,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -348,7 +348,7 @@ msgstr "Cuadrícula / lista"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Renombrar" msgstr "Renombrar"
@@ -431,7 +431,9 @@ msgstr "No se puede abrir Proton Drive"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "El servicio de Proton Drive no consigue iniciarse y vuelve a intentarlo por sí solo. Último error: {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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -690,7 +692,7 @@ msgid "Couldn't add a sync folder"
msgstr "No se pudo añadir una carpeta sincronizada" msgstr "No se pudo añadir una carpeta sincronizada"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "No se pudieron restaurar las carpetas" msgstr "No se pudieron restaurar las carpetas"
@@ -1279,12 +1281,12 @@ msgstr "No se pudieron cargar los álbumes"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1932,7 +1934,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Nombre nuevo" msgstr "Nombre nuevo"
@@ -1957,7 +1959,7 @@ msgstr "Elija la carpeta de destino."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Mover aquí" msgstr "Mover aquí"
@@ -2279,76 +2281,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} carpeta con copia de seguridad" msgstr[0] "{n} carpeta con copia de seguridad"
msgstr[1] "{n} carpetas con copia de seguridad" msgstr[1] "{n} carpetas con copia de seguridad"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} espera su primera sincronización"
msgstr[1] "{folders} · {n} esperan su primera sincronización"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} requiere atención" msgstr[0] "{folders} · {n} requiere atención"
msgstr[1] "{folders} · {n} requieren atención" msgstr[1] "{folders} · {n} requieren atención"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "sincronizando…" msgstr "sincronizando…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "error de sincronización" msgstr "error de sincronización"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "requiere atención" msgstr "requiere atención"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "esperando la primera sincronización"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "actualizado" msgstr "actualizado"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "buscando cambios…" msgstr "buscando cambios…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "buscando cambios: {n} elemento revisado" msgstr[0] "buscando cambios: {n} elemento revisado"
msgstr[1] "buscando cambios: {n} elementos revisados" msgstr[1] "buscando cambios: {n} elementos revisados"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "buscando cambios: {done} de {total}" msgstr "buscando cambios: {done} de {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "sincronizando {done} de {total}" msgstr "sincronizando {done} de {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "sincronizando {file}: {done} de {total}" msgstr "sincronizando {file}: {done} de {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Añadir carpeta para sincronizar" msgstr "Añadir carpeta para sincronizar"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Sincronizando la carpeta…" msgstr "Sincronizando la carpeta…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "No se pudo añadir la carpeta" msgstr "No se pudo añadir la carpeta"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "No se pudieron listar las carpetas para restaurar" msgstr "No se pudieron listar las carpetas para restaurar"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2356,19 +2369,19 @@ msgstr ""
"Marque las carpetas que sincronizar con esta máquina y ajuste dónde debe " "Marque las carpetas que sincronizar con esta máquina y ajuste dónde debe "
"estar cada una." "estar cada una."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Restaurar carpetas" msgstr "Restaurar carpetas"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Restaurar" msgstr "Restaurar"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Restaurando carpetas…" msgstr "Restaurando carpetas…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2377,36 +2390,36 @@ msgstr ""
"Estas carpetas tienen copia de seguridad desde “{name}”. Las carpetas " "Estas carpetas tienen copia de seguridad desde “{name}”. Las carpetas "
"restauradas siguen sincronizándose con la copia de ese equipo." "restauradas siguen sincronizándose con la copia de ese equipo."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "" msgstr ""
"Estas carpetas tienen copia de seguridad bajo este equipo en Proton Drive." "Estas carpetas tienen copia de seguridad bajo este equipo en Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Nada que restaurar: todas las carpetas de “{name}” ya se sincronizan aquí." "Nada que restaurar: todas las carpetas de “{name}” ya se sincronizan aquí."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Nada que restaurar: todas las carpetas de este equipo ya se sincronizan aquí." "Nada que restaurar: todas las carpetas de este equipo ya se sincronizan aquí."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "La carpeta pasará a solo en línea" msgstr "La carpeta pasará a solo en línea"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "La carpeta se descargará y permanecerá sincronizada" msgstr "La carpeta se descargará y permanecerá sincronizada"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "No se pudo cambiar el modo" msgstr "No se pudo cambiar el modo"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2423,7 +2436,7 @@ msgstr ""
"Para conservar una copia local, cancele, cambie la carpeta a Sincronizada y " "Para conservar una copia local, cancele, cambie la carpeta a Sincronizada y "
"espere a que termine la descarga antes de quitarla." "espere a que termine la descarga antes de quitarla."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2436,68 +2449,68 @@ msgstr ""
"Los archivos locales permanecen en este disco y simplemente dejan de " "Los archivos locales permanecen en este disco y simplemente dejan de "
"sincronizarse. Elija si quiere eliminar también la copia en Proton Drive." "sincronizarse. Elija si quiere eliminar también la copia en Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "¿Dejar de sincronizar la carpeta?" msgstr "¿Dejar de sincronizar la carpeta?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Eliminar también de Proton Drive" msgstr "Eliminar también de Proton Drive"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Elimina la única copia de estos archivos." msgstr "Elimina la única copia de estos archivos."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "La copia local no se ve afectada." msgstr "La copia local no se ve afectada."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Dejar de sincronizar" msgstr "Dejar de sincronizar"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Se dejó de sincronizar la carpeta" msgstr "Se dejó de sincronizar la carpeta"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "No se pudo dejar de sincronizar la carpeta" msgstr "No se pudo dejar de sincronizar la carpeta"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Renombrar equipo" msgstr "Renombrar equipo"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "Renombrar “{name}”." msgstr "Renombrar “{name}”."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "No se pudo renombrar el equipo" msgstr "No se pudo renombrar el equipo"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "Se necesita un nombre." msgstr "Se necesita un nombre."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Equipo renombrado" msgstr "Equipo renombrado"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Escriba “{name}” para confirmar" msgstr "Escriba “{name}” para confirmar"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "¿Quitar el equipo?" msgstr "¿Quitar el equipo?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2511,26 +2524,26 @@ msgstr ""
"Todo lo que respaldó en Proton Drive se eliminará con él. Los archivos de " "Todo lo que respaldó en Proton Drive se eliminará con él. Los archivos de "
"ese equipo no se tocan, pero esto no se puede deshacer desde aquí." "ese equipo no se tocan, pero esto no se puede deshacer desde aquí."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Quitar" msgstr "Quitar"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Equipo quitado" msgstr "Equipo quitado"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "No se pudo quitar el equipo" msgstr "No se pudo quitar el equipo"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "¿Continuar esta copia de seguridad aquí?" msgstr "¿Continuar esta copia de seguridad aquí?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2549,25 +2562,25 @@ msgstr ""
"no se mueven. Después, use “Restaurar en este equipo” para recuperar lo que " "no se mueven. Después, use “Restaurar en este equipo” para recuperar lo que "
"“{name}” sincronizaba." "“{name}” sincronizaba."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Continuar aquí" msgstr "Continuar aquí"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Ahora se hace copia de seguridad como “{name}”" msgstr "Ahora se hace copia de seguridad como “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "No se pudo continuar esa copia de seguridad aquí" msgstr "No se pudo continuar esa copia de seguridad aquí"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "¿Sincronizar con este equipo?" msgstr "¿Sincronizar con este equipo?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2584,25 +2597,25 @@ msgstr ""
"Proton Drive. Las carpetas ya sincronizadas aquí se quedan donde están. A " "Proton Drive. Las carpetas ya sincronizadas aquí se quedan donde están. A "
"continuación, elija qué carpetas suyas sincronizar aquí." "continuación, elija qué carpetas suyas sincronizar aquí."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Sincronizar aquí" msgstr "Sincronizar aquí"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Ahora se sincroniza con “{name}”" msgstr "Ahora se sincroniza con “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "No se pudo sincronizar con ese equipo" msgstr "No se pudo sincronizar con ese equipo"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "¿Mover la copia de seguridad a este equipo?" msgstr "¿Mover la copia de seguridad a este equipo?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2619,12 +2632,12 @@ msgstr ""
"carpetas." "carpetas."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Se movió la copia de seguridad de “{name}”" msgstr "Se movió la copia de seguridad de “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "No se pudo mover esa copia de seguridad" msgstr "No se pudo mover esa copia de seguridad"
@@ -3359,7 +3372,7 @@ msgid "paused"
msgstr "en pausa" msgstr "en pausa"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "no disponible" msgstr "no disponible"
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: French\n" "Language-Team: French\n"
@@ -249,13 +249,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -350,7 +350,7 @@ msgstr "Grille / liste"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Renommer" msgstr "Renommer"
@@ -433,7 +433,9 @@ msgstr "Impossible d’ouvrir Proton Drive"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "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}" 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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -693,7 +695,7 @@ msgid "Couldn't add a sync folder"
msgstr "Impossible d’ajouter un dossier synchronisé" msgstr "Impossible d’ajouter un dossier synchronisé"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Impossible de restaurer les dossiers" msgstr "Impossible de restaurer les dossiers"
@@ -1290,12 +1292,12 @@ msgstr "Impossible de charger les albums"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1944,7 +1946,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Nouveau nom" msgstr "Nouveau nom"
@@ -1969,7 +1971,7 @@ msgstr "Choisissez le dossier de destination."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Déplacer ici" msgstr "Déplacer ici"
@@ -2292,76 +2294,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} dossier sauvegardé" msgstr[0] "{n} dossier sauvegardé"
msgstr[1] "{n} dossiers sauvegardés" msgstr[1] "{n} dossiers sauvegardés"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} attend sa première synchronisation"
msgstr[1] "{folders} · {n} attendent leur première synchronisation"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} requiert votre attention" msgstr[0] "{folders} · {n} requiert votre attention"
msgstr[1] "{folders} · {n} requièrent votre attention" msgstr[1] "{folders} · {n} requièrent votre attention"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "synchronisation…" msgstr "synchronisation…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "erreur de synchronisation" msgstr "erreur de synchronisation"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "attention requise" msgstr "attention requise"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "en attente de la première synchronisation"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "à jour" msgstr "à jour"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "recherche de modifications…" msgstr "recherche de modifications…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "recherche de modifications — {n} élément vérifié" msgstr[0] "recherche de modifications — {n} élément vérifié"
msgstr[1] "recherche de modifications — {n} éléments vérifiés" msgstr[1] "recherche de modifications — {n} éléments vérifiés"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "recherche de modifications — {done} sur {total}" msgstr "recherche de modifications — {done} sur {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "synchronisation de {done} sur {total}" msgstr "synchronisation de {done} sur {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "synchronisation de {file} — {done} sur {total}" msgstr "synchronisation de {file} — {done} sur {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Ajouter un dossier à synchroniser" msgstr "Ajouter un dossier à synchroniser"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Synchronisation du dossier…" msgstr "Synchronisation du dossier…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Impossible d’ajouter le dossier" msgstr "Impossible d’ajouter le dossier"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Impossible de lister les dossiers à restaurer" msgstr "Impossible de lister les dossiers à restaurer"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2369,19 +2382,19 @@ msgstr ""
"Cochez les dossiers à synchroniser sur cette machine et ajustez " "Cochez les dossiers à synchroniser sur cette machine et ajustez "
"l’emplacement de chacun." "l’emplacement de chacun."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Restaurer les dossiers" msgstr "Restaurer les dossiers"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Restaurer" msgstr "Restaurer"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Restauration des dossiers…" msgstr "Restauration des dossiers…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2390,35 +2403,35 @@ msgstr ""
"Ces dossiers sont sauvegardés depuis « {name} ». Les dossiers restaurés " "Ces dossiers sont sauvegardés depuis « {name} ». Les dossiers restaurés "
"restent synchronisés avec la copie de cet ordinateur." "restent synchronisés avec la copie de cet ordinateur."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "Ces dossiers sont sauvegardés sous cet ordinateur dans Proton Drive." msgstr "Ces dossiers sont sauvegardés sous cet ordinateur dans Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Rien à restaurer — les dossiers de « {name} » sont tous synchronisés ici." "Rien à restaurer — les dossiers de « {name} » sont tous synchronisés ici."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Rien à restaurer — les dossiers de cet ordinateur sont tous synchronisés ici." "Rien à restaurer — les dossiers de cet ordinateur sont tous synchronisés ici."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "Le dossier passera en ligne uniquement" msgstr "Le dossier passera en ligne uniquement"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "Le dossier va être téléchargé et rester synchronisé" msgstr "Le dossier va être téléchargé et rester synchronisé"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Impossible de changer de mode" msgstr "Impossible de changer de mode"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2435,7 +2448,7 @@ msgstr ""
"arrêtée. Pour conserver une copie locale, annulez, passez le dossier en " "arrêtée. Pour conserver une copie locale, annulez, passez le dossier en "
"« Synchronisé » et attendez la fin du téléchargement avant de le retirer." "« Synchronisé » et attendez la fin du téléchargement avant de le retirer."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2449,68 +2462,68 @@ msgstr ""
"synchronisés. Choisissez s’il faut aussi supprimer la copie dans Proton " "synchronisés. Choisissez s’il faut aussi supprimer la copie dans Proton "
"Drive." "Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Arrêter la synchronisation du dossier ?" msgstr "Arrêter la synchronisation du dossier ?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Supprimer aussi de Proton Drive" msgstr "Supprimer aussi de Proton Drive"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Supprime l’unique copie de ces fichiers." msgstr "Supprime l’unique copie de ces fichiers."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "La copie locale n’est pas affectée." msgstr "La copie locale n’est pas affectée."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Arrêter la synchronisation" msgstr "Arrêter la synchronisation"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Synchronisation du dossier arrêtée" msgstr "Synchronisation du dossier arrêtée"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Impossible d’arrêter la synchronisation du dossier" msgstr "Impossible d’arrêter la synchronisation du dossier"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Renommer l’ordinateur" msgstr "Renommer l’ordinateur"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "Renommer « {name} »." msgstr "Renommer « {name} »."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Impossible de renommer l’ordinateur" msgstr "Impossible de renommer l’ordinateur"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "Un nom est requis." msgstr "Un nom est requis."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Ordinateur renommé" msgstr "Ordinateur renommé"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Saisissez « {name} » pour confirmer" msgstr "Saisissez « {name} » pour confirmer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Retirer l’ordinateur ?" msgstr "Retirer l’ordinateur ?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2525,26 +2538,26 @@ msgstr ""
"fichiers présents sur cet ordinateur ne sont pas touchés — mais cette action " "fichiers présents sur cet ordinateur ne sont pas touchés — mais cette action "
"ne peut pas être annulée d’ici." "ne peut pas être annulée d’ici."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Retirer" msgstr "Retirer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Ordinateur retiré" msgstr "Ordinateur retiré"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Impossible de retirer l’ordinateur" msgstr "Impossible de retirer l’ordinateur"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Continuer cette sauvegarde ici ?" msgstr "Continuer cette sauvegarde ici ?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2563,25 +2576,25 @@ msgstr ""
"ne sont pas déplacés. Utilisez ensuite « Restaurer sur cet ordinateur » pour " "ne sont pas déplacés. Utilisez ensuite « Restaurer sur cet ordinateur » pour "
"récupérer ce que « {name} » synchronisait." "récupérer ce que « {name} » synchronisait."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Continuer ici" msgstr "Continuer ici"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Sauvegarde désormais en tant que « {name} »" msgstr "Sauvegarde désormais en tant que « {name} »"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Impossible de continuer cette sauvegarde ici" msgstr "Impossible de continuer cette sauvegarde ici"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Synchroniser avec cet ordinateur ?" msgstr "Synchroniser avec cet ordinateur ?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2598,25 +2611,25 @@ msgstr ""
"dans Proton Drive. Les dossiers déjà synchronisés ici restent où ils sont. " "dans Proton Drive. Les dossiers déjà synchronisés ici restent où ils sont. "
"Vous choisissez ensuite lesquels de ses dossiers synchroniser ici." "Vous choisissez ensuite lesquels de ses dossiers synchroniser ici."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Synchroniser ici" msgstr "Synchroniser ici"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Synchronisé désormais avec « {name} »" msgstr "Synchronisé désormais avec « {name} »"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Impossible de synchroniser avec cet ordinateur" msgstr "Impossible de synchroniser avec cet ordinateur"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Déplacer la sauvegarde vers cet ordinateur ?" msgstr "Déplacer la sauvegarde vers cet ordinateur ?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2633,12 +2646,12 @@ msgstr ""
"disparaître." "disparaître."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Sauvegarde de « {name} » déplacée" msgstr "Sauvegarde de « {name} » déplacée"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Impossible de déplacer cette sauvegarde" msgstr "Impossible de déplacer cette sauvegarde"
@@ -3385,7 +3398,7 @@ msgid "paused"
msgstr "en pause" msgstr "en pause"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "non disponible" msgstr "non disponible"
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
@@ -245,13 +245,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -346,7 +346,7 @@ msgstr "Griglia / elenco"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Rinomina" msgstr "Rinomina"
@@ -429,7 +429,9 @@ msgstr "Impossibile aprire Proton Drive"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "Il servizio di Proton Drive non riesce ad avviarsi e riprova da solo. Ultimo errore: {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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -689,7 +691,7 @@ msgid "Couldn't add a sync folder"
msgstr "Impossibile aggiungere una cartella sincronizzata" msgstr "Impossibile aggiungere una cartella sincronizzata"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Impossibile ripristinare le cartelle" msgstr "Impossibile ripristinare le cartelle"
@@ -1284,12 +1286,12 @@ msgstr "Impossibile caricare gli album"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1938,7 +1940,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Nuovo nome" msgstr "Nuovo nome"
@@ -1963,7 +1965,7 @@ msgstr "Scegli la cartella di destinazione."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Sposta qui" msgstr "Sposta qui"
@@ -2286,76 +2288,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} cartella sottoposta a backup" msgstr[0] "{n} cartella sottoposta a backup"
msgstr[1] "{n} cartelle sottoposte a backup" msgstr[1] "{n} cartelle sottoposte a backup"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} attende la prima sincronizzazione"
msgstr[1] "{folders} · {n} attendono la prima sincronizzazione"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} richiede attenzione" msgstr[0] "{folders} · {n} richiede attenzione"
msgstr[1] "{folders} · {n} richiedono attenzione" msgstr[1] "{folders} · {n} richiedono attenzione"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "sincronizzazione…" msgstr "sincronizzazione…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "errore di sincronizzazione" msgstr "errore di sincronizzazione"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "richiede attenzione" msgstr "richiede attenzione"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "in attesa della prima sincronizzazione"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "aggiornato" msgstr "aggiornato"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "controllo delle modifiche…" msgstr "controllo delle modifiche…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "controllo delle modifiche: {n} elemento controllato" msgstr[0] "controllo delle modifiche: {n} elemento controllato"
msgstr[1] "controllo delle modifiche: {n} elementi controllati" msgstr[1] "controllo delle modifiche: {n} elementi controllati"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "controllo delle modifiche: {done} di {total}" msgstr "controllo delle modifiche: {done} di {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "sincronizzazione {done} di {total}" msgstr "sincronizzazione {done} di {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "sincronizzazione di {file}: {done} di {total}" msgstr "sincronizzazione di {file}: {done} di {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Aggiungi cartella da sincronizzare" msgstr "Aggiungi cartella da sincronizzare"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Sincronizzazione della cartella…" msgstr "Sincronizzazione della cartella…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Impossibile aggiungere la cartella" msgstr "Impossibile aggiungere la cartella"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Impossibile elencare le cartelle da ripristinare" msgstr "Impossibile elencare le cartelle da ripristinare"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2363,19 +2376,19 @@ msgstr ""
"Seleziona le cartelle da sincronizzare su questa macchina e regola dove deve " "Seleziona le cartelle da sincronizzare su questa macchina e regola dove deve "
"trovarsi ciascuna." "trovarsi ciascuna."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Ripristina cartelle" msgstr "Ripristina cartelle"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Ripristina" msgstr "Ripristina"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Ripristino delle cartelle…" msgstr "Ripristino delle cartelle…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2384,39 +2397,39 @@ msgstr ""
"Queste cartelle sono sottoposte a backup da “{name}”. Le cartelle " "Queste cartelle sono sottoposte a backup da “{name}”. Le cartelle "
"ripristinate continuano a sincronizzarsi con la copia di quel computer." "ripristinate continuano a sincronizzarsi con la copia di quel computer."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "" msgstr ""
"Queste cartelle sono sottoposte a backup sotto questo computer in Proton " "Queste cartelle sono sottoposte a backup sotto questo computer in Proton "
"Drive." "Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Niente da ripristinare: le cartelle di “{name}” sono già tutte sincronizzate " "Niente da ripristinare: le cartelle di “{name}” sono già tutte sincronizzate "
"qui." "qui."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Niente da ripristinare: le cartelle di questo computer sono già tutte " "Niente da ripristinare: le cartelle di questo computer sono già tutte "
"sincronizzate qui." "sincronizzate qui."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "La cartella passerà a solo online" msgstr "La cartella passerà a solo online"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "La cartella verrà scaricata e resterà sincronizzata" msgstr "La cartella verrà scaricata e resterà sincronizzata"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Impossibile cambiare modalità" msgstr "Impossibile cambiare modalità"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2434,7 +2447,7 @@ msgstr ""
"cartella a Sincronizzata e attendi il completamento del download prima di " "cartella a Sincronizzata e attendi il completamento del download prima di "
"rimuoverla." "rimuoverla."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2447,68 +2460,68 @@ msgstr ""
"I file locali restano su questo disco e semplicemente smettono di essere " "I file locali restano su questo disco e semplicemente smettono di essere "
"sincronizzati. Scegli se eliminare anche la copia in Proton Drive." "sincronizzati. Scegli se eliminare anche la copia in Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Interrompere la sincronizzazione della cartella?" msgstr "Interrompere la sincronizzazione della cartella?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Elimina anche da Proton Drive" msgstr "Elimina anche da Proton Drive"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Elimina l'unica copia di questi file." msgstr "Elimina l'unica copia di questi file."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "La copia locale non viene modificata." msgstr "La copia locale non viene modificata."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Interrompi sincronizzazione" msgstr "Interrompi sincronizzazione"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Sincronizzazione della cartella interrotta" msgstr "Sincronizzazione della cartella interrotta"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Impossibile interrompere la sincronizzazione della cartella" msgstr "Impossibile interrompere la sincronizzazione della cartella"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Rinomina computer" msgstr "Rinomina computer"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "Rinomina “{name}”." msgstr "Rinomina “{name}”."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Impossibile rinominare il computer" msgstr "Impossibile rinominare il computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "È richiesto un nome." msgstr "È richiesto un nome."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Computer rinominato" msgstr "Computer rinominato"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Digita “{name}” per confermare" msgstr "Digita “{name}” per confermare"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Rimuovere il computer?" msgstr "Rimuovere il computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2523,26 +2536,26 @@ msgstr ""
"insieme a esso. I file su quel computer non vengono toccati, ma questa " "insieme a esso. I file su quel computer non vengono toccati, ma questa "
"operazione non può essere annullata da qui." "operazione non può essere annullata da qui."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Rimuovi" msgstr "Rimuovi"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Computer rimosso" msgstr "Computer rimosso"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Impossibile rimuovere il computer" msgstr "Impossibile rimuovere il computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Continuare questo backup qui?" msgstr "Continuare questo backup qui?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2561,25 +2574,25 @@ msgstr ""
"qui non vengono spostate. Usa poi “Ripristina su questo computer” per " "qui non vengono spostate. Usa poi “Ripristina su questo computer” per "
"recuperare ciò che “{name}” sincronizzava." "recuperare ciò che “{name}” sincronizzava."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Continua qui" msgstr "Continua qui"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Ora il backup avviene come “{name}”" msgstr "Ora il backup avviene come “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Impossibile continuare quel backup qui" msgstr "Impossibile continuare quel backup qui"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Sincronizzare con questo computer?" msgstr "Sincronizzare con questo computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2596,25 +2609,25 @@ msgstr ""
"in Proton Drive. Le cartelle già sincronizzate qui restano dove sono. Poi " "in Proton Drive. Le cartelle già sincronizzate qui restano dove sono. Poi "
"scegli quali delle sue cartelle sincronizzare qui." "scegli quali delle sue cartelle sincronizzare qui."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Sincronizza qui" msgstr "Sincronizza qui"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Ora sincronizzato con “{name}”" msgstr "Ora sincronizzato con “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Impossibile sincronizzare con quel computer" msgstr "Impossibile sincronizzare con quel computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Spostare il backup su questo computer?" msgstr "Spostare il backup su questo computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2631,12 +2644,12 @@ msgstr ""
"cartelle." "cartelle."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Backup di “{name}” spostato" msgstr "Backup di “{name}” spostato"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Impossibile spostare quel backup" msgstr "Impossibile spostare quel backup"
@@ -3377,7 +3390,7 @@ msgid "paused"
msgstr "in pausa" msgstr "in pausa"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "non disponibile" msgstr "non disponibile"
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
@@ -246,13 +246,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -347,7 +347,7 @@ msgstr "Raster / lijst"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Hernoemen" msgstr "Hernoemen"
@@ -430,7 +430,9 @@ msgstr "Kan Proton Drive niet openen"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "De Proton Drive-service kan steeds niet starten en probeert het zelf opnieuw. Laatste fout: {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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -690,7 +692,7 @@ msgid "Couldn't add a sync folder"
msgstr "Kon geen synchronisatiemap toevoegen" msgstr "Kon geen synchronisatiemap toevoegen"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Kon mappen niet terugzetten" msgstr "Kon mappen niet terugzetten"
@@ -1280,12 +1282,12 @@ msgstr "Kon albums niet laden"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1932,7 +1934,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Nieuwe naam" msgstr "Nieuwe naam"
@@ -1957,7 +1959,7 @@ msgstr "Kies de map waarnaar je wilt verplaatsen."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Hierheen verplaatsen" msgstr "Hierheen verplaatsen"
@@ -2280,76 +2282,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} map in back-up" msgstr[0] "{n} map in back-up"
msgstr[1] "{n} mappen in back-up" msgstr[1] "{n} mappen in back-up"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} wacht op de eerste synchronisatie"
msgstr[1] "{folders} · {n} wachten op de eerste synchronisatie"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} vereist aandacht" msgstr[0] "{folders} · {n} vereist aandacht"
msgstr[1] "{folders} · {n} vereisen aandacht" msgstr[1] "{folders} · {n} vereisen aandacht"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "synchroniseren…" msgstr "synchroniseren…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "synchronisatiefout" msgstr "synchronisatiefout"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "vereist aandacht" msgstr "vereist aandacht"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "wacht op eerste synchronisatie"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "bijgewerkt" msgstr "bijgewerkt"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "controleren op wijzigingen…" msgstr "controleren op wijzigingen…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "controleren op wijzigingen — {n} item gecontroleerd" msgstr[0] "controleren op wijzigingen — {n} item gecontroleerd"
msgstr[1] "controleren op wijzigingen — {n} items gecontroleerd" msgstr[1] "controleren op wijzigingen — {n} items gecontroleerd"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "controleren op wijzigingen — {done} van {total}" msgstr "controleren op wijzigingen — {done} van {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "synchroniseren: {done} van {total}" msgstr "synchroniseren: {done} van {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "{file} synchroniseren — {done} van {total}" msgstr "{file} synchroniseren — {done} van {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Map toevoegen aan synchronisatie" msgstr "Map toevoegen aan synchronisatie"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Map synchroniseren…" msgstr "Map synchroniseren…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Kon map niet toevoegen" msgstr "Kon map niet toevoegen"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Kon mappen om terug te zetten niet weergeven" msgstr "Kon mappen om terug te zetten niet weergeven"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2357,19 +2370,19 @@ msgstr ""
"Vink de mappen aan die je met dit apparaat wilt synchroniseren en pas aan " "Vink de mappen aan die je met dit apparaat wilt synchroniseren en pas aan "
"waar elke map moet komen." "waar elke map moet komen."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Mappen herstellen" msgstr "Mappen herstellen"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Terugzetten" msgstr "Terugzetten"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Mappen terugzetten…" msgstr "Mappen terugzetten…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2378,38 +2391,38 @@ msgstr ""
"Van deze mappen is een back-up gemaakt vanaf “{name}”. Teruggezette mappen " "Van deze mappen is een back-up gemaakt vanaf “{name}”. Teruggezette mappen "
"blijven synchroniseren met de kopie van die computer." "blijven synchroniseren met de kopie van die computer."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "" msgstr ""
"Van deze mappen is een back-up gemaakt onder deze computer in Proton Drive." "Van deze mappen is een back-up gemaakt onder deze computer in Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Niets om terug te zetten — de mappen van “{name}” worden hier al allemaal " "Niets om terug te zetten — de mappen van “{name}” worden hier al allemaal "
"gesynchroniseerd." "gesynchroniseerd."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Niets om terug te zetten — de mappen van deze computer worden hier al " "Niets om terug te zetten — de mappen van deze computer worden hier al "
"allemaal gesynchroniseerd." "allemaal gesynchroniseerd."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "Map wordt alleen online" msgstr "Map wordt alleen online"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "Map wordt gedownload en blijft gesynchroniseerd" msgstr "Map wordt gedownload en blijft gesynchroniseerd"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Kon modus niet wijzigen" msgstr "Kon modus niet wijzigen"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2426,7 +2439,7 @@ msgstr ""
"kopie houden, annuleer dan, zet de map op Gesynchroniseerd en wacht tot de " "kopie houden, annuleer dan, zet de map op Gesynchroniseerd en wacht tot de "
"download klaar is voordat je hem verwijdert." "download klaar is voordat je hem verwijdert."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2439,68 +2452,68 @@ msgstr ""
"De lokale bestanden blijven op deze schijf en worden gewoon niet meer " "De lokale bestanden blijven op deze schijf en worden gewoon niet meer "
"gesynchroniseerd. Kies of je ook de kopie in Proton Drive wilt verwijderen." "gesynchroniseerd. Kies of je ook de kopie in Proton Drive wilt verwijderen."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Synchroniseren van map stoppen?" msgstr "Synchroniseren van map stoppen?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Ook uit Proton Drive verwijderen" msgstr "Ook uit Proton Drive verwijderen"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Verwijdert de enige kopie van deze bestanden." msgstr "Verwijdert de enige kopie van deze bestanden."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "De lokale kopie blijft ongewijzigd." msgstr "De lokale kopie blijft ongewijzigd."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Synchroniseren stoppen" msgstr "Synchroniseren stoppen"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Synchroniseren van map gestopt" msgstr "Synchroniseren van map gestopt"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Kon het synchroniseren van de map niet stoppen" msgstr "Kon het synchroniseren van de map niet stoppen"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Computer hernoemen" msgstr "Computer hernoemen"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "“{name}” hernoemen." msgstr "“{name}” hernoemen."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Kon de computer niet hernoemen" msgstr "Kon de computer niet hernoemen"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "Een naam is vereist." msgstr "Een naam is vereist."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Computer hernoemd" msgstr "Computer hernoemd"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Typ “{name}” om te bevestigen" msgstr "Typ “{name}” om te bevestigen"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Computer verwijderen?" msgstr "Computer verwijderen?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2515,26 +2528,26 @@ msgstr ""
"mee verwijderd. De bestanden op die computer zelf blijven onaangeroerd — " "mee verwijderd. De bestanden op die computer zelf blijven onaangeroerd — "
"maar dit kan hier niet ongedaan worden gemaakt." "maar dit kan hier niet ongedaan worden gemaakt."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Verwijderen" msgstr "Verwijderen"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Computer verwijderd" msgstr "Computer verwijderd"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Kon de computer niet verwijderen" msgstr "Kon de computer niet verwijderen"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Deze back-up hier voortzetten?" msgstr "Deze back-up hier voortzetten?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2553,25 +2566,25 @@ msgstr ""
"gesynchroniseerd, worden niet verplaatst. Gebruik daarna “Terugzetten op " "gesynchroniseerd, worden niet verplaatst. Gebruik daarna “Terugzetten op "
"deze computer” om terug te halen wat “{name}” synchroniseerde." "deze computer” om terug te halen wat “{name}” synchroniseerde."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Hier voortzetten" msgstr "Hier voortzetten"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Back-up nu als “{name}”" msgstr "Back-up nu als “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Kon die back-up hier niet voortzetten" msgstr "Kon die back-up hier niet voortzetten"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Synchroniseren met deze computer?" msgstr "Synchroniseren met deze computer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2588,25 +2601,25 @@ msgstr ""
"Proton Drive. Mappen die hier al worden gesynchroniseerd, blijven waar ze " "Proton Drive. Mappen die hier al worden gesynchroniseerd, blijven waar ze "
"zijn. Daarna kiest u welke van zijn mappen u hier synchroniseert." "zijn. Daarna kiest u welke van zijn mappen u hier synchroniseert."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Hier synchroniseren" msgstr "Hier synchroniseren"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Nu gesynchroniseerd met “{name}”" msgstr "Nu gesynchroniseerd met “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Kon niet synchroniseren met die computer" msgstr "Kon niet synchroniseren met die computer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Back-up naar deze computer verplaatsen?" msgstr "Back-up naar deze computer verplaatsen?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2622,12 +2635,12 @@ msgstr ""
"Stop Proton Drive eerst op “{name}”. Anders ziet het zijn mappen verdwijnen." "Stop Proton Drive eerst op “{name}”. Anders ziet het zijn mappen verdwijnen."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Back-up van “{name}” verplaatst" msgstr "Back-up van “{name}” verplaatst"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Kon die back-up niet verplaatsen" msgstr "Kon die back-up niet verplaatsen"
@@ -3369,7 +3382,7 @@ msgid "paused"
msgstr "gepauzeerd" msgstr "gepauzeerd"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "niet beschikbaar" msgstr "niet beschikbaar"
+93 -82
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 3.6.0\n" "Project-Id-Version: proton-drive-linux 3.6.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -222,13 +222,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -323,7 +323,7 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "" msgstr ""
@@ -660,7 +660,7 @@ msgid "Couldn't add a sync folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "" msgstr ""
@@ -1238,12 +1238,12 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1886,7 +1886,7 @@ msgid "{status}. {message}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "" msgstr ""
@@ -1911,7 +1911,7 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "" msgstr ""
@@ -2232,127 +2232,138 @@ msgid_plural "{n} folders backed up"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] ""
msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
"with that computer's copy." "with that computer's copy."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2363,7 +2374,7 @@ msgid ""
"finish before removing it." "finish before removing it."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2372,68 +2383,68 @@ msgid ""
"whether to also delete the copy in Proton Drive." "whether to also delete the copy in Proton Drive."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "" msgstr ""
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "" msgstr ""
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2443,26 +2454,26 @@ msgid ""
"here." "here."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2474,25 +2485,25 @@ msgid ""
"syncing." "syncing."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "" msgstr ""
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2503,25 +2514,25 @@ msgid ""
"its folders to sync here." "its folders to sync here."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "" msgstr ""
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2532,12 +2543,12 @@ msgid ""
msgstr "" msgstr ""
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "" msgstr ""
@@ -3221,7 +3232,7 @@ msgid "paused"
msgstr "" msgstr ""
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "" msgstr ""
+97 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
@@ -250,13 +250,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -351,7 +351,7 @@ msgstr "Siatka/lista"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Zmień nazwę" msgstr "Zmień nazwę"
@@ -434,7 +434,9 @@ msgstr "Nie można otworzyć Proton Drive"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "Usługa Proton Drive nie może się uruchomić i sama ponawia próby. Ostatni błąd: {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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -707,7 +709,7 @@ msgid "Couldn't add a sync folder"
msgstr "Nie można dodać katalogu synchronizacji" msgstr "Nie można dodać katalogu synchronizacji"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Nie można przywrócić katalogów" msgstr "Nie można przywrócić katalogów"
@@ -1311,12 +1313,12 @@ msgstr "Nie można wczytać albumów"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1980,7 +1982,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Nowa nazwa" msgstr "Nowa nazwa"
@@ -2005,7 +2007,7 @@ msgstr "Proszę wybrać katalog docelowy."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Przenieś tutaj" msgstr "Przenieś tutaj"
@@ -2338,7 +2340,15 @@ msgstr[0] "{n} katalog z kopią zapasową"
msgstr[1] "{n} katalogi z kopią zapasową" msgstr[1] "{n} katalogi z kopią zapasową"
msgstr[2] "{n} katalogów z kopią zapasową" msgstr[2] "{n} katalogów z kopią zapasową"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} czeka na pierwszą synchronizację"
msgstr[1] "{folders} · {n} czekają na pierwszą synchronizację"
msgstr[2] "{folders} · {n} czeka na pierwszą synchronizację"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
@@ -2346,27 +2356,31 @@ msgstr[0] "{folders} · {n} wymaga uwagi"
msgstr[1] "{folders} · {n} wymagają uwagi" msgstr[1] "{folders} · {n} wymagają uwagi"
msgstr[2] "{folders} · {n} wymaga uwagi" msgstr[2] "{folders} · {n} wymaga uwagi"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "synchronizowanie…" msgstr "synchronizowanie…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "błąd synchronizacji" msgstr "błąd synchronizacji"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "wymaga uwagi" msgstr "wymaga uwagi"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "oczekiwanie na pierwszą synchronizację"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "aktualne" msgstr "aktualne"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "sprawdzanie zmian…" msgstr "sprawdzanie zmian…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
@@ -2374,42 +2388,42 @@ msgstr[0] "sprawdzanie zmian — sprawdzono {n} element"
msgstr[1] "sprawdzanie zmian — sprawdzono {n} elementy" msgstr[1] "sprawdzanie zmian — sprawdzono {n} elementy"
msgstr[2] "sprawdzanie zmian — sprawdzono {n} elementów" msgstr[2] "sprawdzanie zmian — sprawdzono {n} elementów"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "sprawdzanie zmian — {done} z {total}" msgstr "sprawdzanie zmian — {done} z {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "synchronizowanie {done} z {total}" msgstr "synchronizowanie {done} z {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "synchronizowanie {file} — {done} z {total}" msgstr "synchronizowanie {file} — {done} z {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Dodaj katalog do synchronizacji" msgstr "Dodaj katalog do synchronizacji"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Synchronizowanie katalogu…" msgstr "Synchronizowanie katalogu…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Nie można dodać katalogu" msgstr "Nie można dodać katalogu"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Nie można wyświetlić listy katalogów do przywrócenia" msgstr "Nie można wyświetlić listy katalogów do przywrócenia"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2417,19 +2431,19 @@ msgstr ""
"Należy zaznaczyć katalogi do synchronizacji z tym komputerem i dostosować " "Należy zaznaczyć katalogi do synchronizacji z tym komputerem i dostosować "
"położenie każdego z nich." "położenie każdego z nich."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Przywróć katalogi" msgstr "Przywróć katalogi"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Przywróć" msgstr "Przywróć"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Przywracanie katalogów…" msgstr "Przywracanie katalogów…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2438,37 +2452,37 @@ msgstr ""
"Te katalogi mają kopię zapasową z komputera „{name}”. Przywrócone katalogi " "Te katalogi mają kopię zapasową z komputera „{name}”. Przywrócone katalogi "
"nadal będą synchronizowane z kopią tego komputera." "nadal będą synchronizowane z kopią tego komputera."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "Te katalogi mają kopię zapasową w Proton Drive pod tym komputerem." msgstr "Te katalogi mają kopię zapasową w Proton Drive pod tym komputerem."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Nie ma nic do przywrócenia — wszystkie katalogi komputera „{name}” są tutaj " "Nie ma nic do przywrócenia — wszystkie katalogi komputera „{name}” są tutaj "
"synchronizowane." "synchronizowane."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Nie ma nic do przywrócenia — wszystkie katalogi tego komputera są tutaj " "Nie ma nic do przywrócenia — wszystkie katalogi tego komputera są tutaj "
"synchronizowane." "synchronizowane."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "Katalog przejdzie w tryb tylko online" msgstr "Katalog przejdzie w tryb tylko online"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "Katalog zostanie pobrany i będzie synchronizowany" msgstr "Katalog zostanie pobrany i będzie synchronizowany"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Nie można zmienić trybu" msgstr "Nie można zmienić trybu"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2485,7 +2499,7 @@ msgstr ""
"pusty. Aby zachować lokalną kopię, należy anulować, przełączyć katalog na " "pusty. Aby zachować lokalną kopię, należy anulować, przełączyć katalog na "
"tryb Synchronizowany i poczekać na ukończenie pobierania przed usunięciem." "tryb Synchronizowany i poczekać na ukończenie pobierania przed usunięciem."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2498,68 +2512,68 @@ msgstr ""
"Lokalne pliki pozostaną na tym dysku i po prostu przestaną być " "Lokalne pliki pozostaną na tym dysku i po prostu przestaną być "
"synchronizowane. Można też usunąć kopię w Proton Drive." "synchronizowane. Można też usunąć kopię w Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Zatrzymać synchronizację katalogu?" msgstr "Zatrzymać synchronizację katalogu?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Usuń także z Proton Drive" msgstr "Usuń także z Proton Drive"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Usuwa jedyną kopię tych plików." msgstr "Usuwa jedyną kopię tych plików."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "Lokalna kopia pozostanie bez zmian." msgstr "Lokalna kopia pozostanie bez zmian."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Zatrzymaj synchronizację" msgstr "Zatrzymaj synchronizację"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "Zatrzymano synchronizację katalogu" msgstr "Zatrzymano synchronizację katalogu"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Nie można zatrzymać synchronizacji katalogu" msgstr "Nie można zatrzymać synchronizacji katalogu"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Zmiana nazwy komputera" msgstr "Zmiana nazwy komputera"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "Proszę podać nową nazwę komputera „{name}”." msgstr "Proszę podać nową nazwę komputera „{name}”."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Nie można zmienić nazwy komputera" msgstr "Nie można zmienić nazwy komputera"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "Nazwa jest wymagana." msgstr "Nazwa jest wymagana."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Zmieniono nazwę komputera" msgstr "Zmieniono nazwę komputera"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Proszę wpisać „{name}”, aby potwierdzić" msgstr "Proszę wpisać „{name}”, aby potwierdzić"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Usunąć komputer?" msgstr "Usunąć komputer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2574,26 +2588,26 @@ msgstr ""
"z nim. Pliki na samym komputerze pozostaną nietknięte — ale tej operacji nie " "z nim. Pliki na samym komputerze pozostaną nietknięte — ale tej operacji nie "
"można tutaj cofnąć." "można tutaj cofnąć."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Usuń" msgstr "Usuń"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Usunięto komputer" msgstr "Usunięto komputer"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Nie można usunąć komputera" msgstr "Nie można usunąć komputera"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Kontynuować tę kopię zapasową tutaj?" msgstr "Kontynuować tę kopię zapasową tutaj?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2612,25 +2626,25 @@ msgstr ""
"przeniesione. Aby odzyskać to, co synchronizował „{name}”, proszę potem użyć " "przeniesione. Aby odzyskać to, co synchronizował „{name}”, proszę potem użyć "
"opcji „Przywróć na tym komputerze”." "opcji „Przywróć na tym komputerze”."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Kontynuuj tutaj" msgstr "Kontynuuj tutaj"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Kopia zapasowa jest teraz tworzona jako „{name}”" msgstr "Kopia zapasowa jest teraz tworzona jako „{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Nie można kontynuować tej kopii zapasowej tutaj" msgstr "Nie można kontynuować tej kopii zapasowej tutaj"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Synchronizować z tym komputerem?" msgstr "Synchronizować z tym komputerem?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2647,25 +2661,25 @@ msgstr ""
"Drive. Katalogi już tu synchronizowane zostaną tam, gdzie są. Następnie " "Drive. Katalogi już tu synchronizowane zostaną tam, gdzie są. Następnie "
"proszę wybrać, które z jego katalogów synchronizować tutaj." "proszę wybrać, które z jego katalogów synchronizować tutaj."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Synchronizuj tutaj" msgstr "Synchronizuj tutaj"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Teraz synchronizowane z „{name}”" msgstr "Teraz synchronizowane z „{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Nie można synchronizować z tym komputerem" msgstr "Nie można synchronizować z tym komputerem"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Przenieść kopię zapasową na ten komputer?" msgstr "Przenieść kopię zapasową na ten komputer?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2683,12 +2697,12 @@ msgstr ""
"jego foldery znikają." "jego foldery znikają."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Przeniesiono kopię zapasową „{name}”" msgstr "Przeniesiono kopię zapasową „{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Nie można przenieść tej kopii zapasowej" msgstr "Nie można przenieść tej kopii zapasowej"
@@ -3434,7 +3448,7 @@ msgid "paused"
msgstr "wstrzymany" msgstr "wstrzymany"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "niedostępne" msgstr "niedostępne"
+96 -83
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 10:37+0100\n" "POT-Creation-Date: 2026-10-31 19:26+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Portuguese (Brazil)\n" "Language-Team: Portuguese (Brazil)\n"
@@ -245,13 +245,13 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:1917
#: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2039
#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/browser.rs:2540
#: crates/pdfs-gui/src/app/pages/devices.rs:804 #: crates/pdfs-gui/src/app/pages/devices.rs:826
#: crates/pdfs-gui/src/app/pages/devices.rs:957 #: crates/pdfs-gui/src/app/pages/devices.rs:979
#: crates/pdfs-gui/src/app/pages/devices.rs:995 #: crates/pdfs-gui/src/app/pages/devices.rs:1017
#: crates/pdfs-gui/src/app/pages/devices.rs:1047 #: crates/pdfs-gui/src/app/pages/devices.rs:1069
#: crates/pdfs-gui/src/app/pages/devices.rs:1091 #: crates/pdfs-gui/src/app/pages/devices.rs:1113
#: crates/pdfs-gui/src/app/pages/devices.rs:1131 #: crates/pdfs-gui/src/app/pages/devices.rs:1153
#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/devices.rs:1216
#: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:850
#: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1054
#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1537
@@ -346,7 +346,7 @@ msgstr "Grade / lista"
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/pages/devices.rs:1018
#: crates/pdfs-gui/src/app/widgets/details.rs:161 #: crates/pdfs-gui/src/app/widgets/details.rs:161
msgid "Rename" msgid "Rename"
msgstr "Renomear" msgstr "Renomear"
@@ -429,7 +429,9 @@ msgstr "Não foi possível abrir o Proton Drive"
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "O serviço do Proton Drive não consegue iniciar e tenta de novo sozinho. Último erro: {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/main.rs:1824
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
@@ -689,7 +691,7 @@ msgid "Couldn't add a sync folder"
msgstr "Não foi possível adicionar uma pasta sincronizada" msgstr "Não foi possível adicionar uma pasta sincronizada"
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58 #: crates/pdfs-gui/src/app/pages/activity_text.rs:58
#: crates/pdfs-gui/src/app/pages/devices.rs:839 #: crates/pdfs-gui/src/app/pages/devices.rs:861
msgid "Couldn't restore folders" msgid "Couldn't restore folders"
msgstr "Não foi possível restaurar as pastas" msgstr "Não foi possível restaurar as pastas"
@@ -1281,12 +1283,12 @@ msgstr "Não foi possível carregar os álbuns"
#: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:1873
#: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2500
#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/browser.rs:2650
#: crates/pdfs-gui/src/app/pages/devices.rs:707 #: crates/pdfs-gui/src/app/pages/devices.rs:729
#: crates/pdfs-gui/src/app/pages/devices.rs:747 #: crates/pdfs-gui/src/app/pages/devices.rs:769
#: crates/pdfs-gui/src/app/pages/devices.rs:900 #: crates/pdfs-gui/src/app/pages/devices.rs:922
#: crates/pdfs-gui/src/app/pages/devices.rs:1170 #: crates/pdfs-gui/src/app/pages/devices.rs:1192
#: crates/pdfs-gui/src/app/pages/devices.rs:1231 #: crates/pdfs-gui/src/app/pages/devices.rs:1253
#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/devices.rs:1282
#: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221
#: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:577
#: crates/pdfs-gui/src/app/pages/locations.rs:824 #: crates/pdfs-gui/src/app/pages/locations.rs:824
@@ -1932,7 +1934,7 @@ msgid "{status}. {message}"
msgstr "{status}. {message}" msgstr "{status}. {message}"
#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/browser.rs:1900
#: crates/pdfs-gui/src/app/pages/devices.rs:989 #: crates/pdfs-gui/src/app/pages/devices.rs:1011
msgid "New name" msgid "New name"
msgstr "Novo nome" msgstr "Novo nome"
@@ -1957,7 +1959,7 @@ msgstr "Escolha a pasta de destino."
#: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1989
#: crates/pdfs-gui/src/app/pages/browser.rs:1994 #: crates/pdfs-gui/src/app/pages/browser.rs:1994
#: crates/pdfs-gui/src/app/pages/devices.rs:1195 #: crates/pdfs-gui/src/app/pages/devices.rs:1217
msgid "Move Here" msgid "Move Here"
msgstr "Mover para cá" msgstr "Mover para cá"
@@ -2279,76 +2281,87 @@ msgid_plural "{n} folders backed up"
msgstr[0] "{n} pasta com backup" msgstr[0] "{n} pasta com backup"
msgstr[1] "{n} pastas com backup" msgstr[1] "{n} pastas com backup"
#: crates/pdfs-gui/src/app/pages/devices.rs:608 #: crates/pdfs-gui/src/app/pages/devices.rs:607
#, rust-format
msgid "{folders} · {n} waiting for its first sync"
msgid_plural "{folders} · {n} waiting for their first sync"
msgstr[0] "{folders} · {n} aguarda a primeira sincronização"
msgstr[1] "{folders} · {n} aguardam a primeira sincronização"
#: crates/pdfs-gui/src/app/pages/devices.rs:621
#, rust-format #, rust-format
msgid "{folders} · {n} needs attention" msgid "{folders} · {n} needs attention"
msgid_plural "{folders} · {n} need attention" msgid_plural "{folders} · {n} need attention"
msgstr[0] "{folders} · {n} requer atenção" msgstr[0] "{folders} · {n} requer atenção"
msgstr[1] "{folders} · {n} requerem atenção" msgstr[1] "{folders} · {n} requerem atenção"
#: crates/pdfs-gui/src/app/pages/devices.rs:619 #: crates/pdfs-gui/src/app/pages/devices.rs:640
msgid "syncing…" msgid "syncing…"
msgstr "sincronizando…" msgstr "sincronizando…"
#: crates/pdfs-gui/src/app/pages/devices.rs:620 #: crates/pdfs-gui/src/app/pages/devices.rs:641
msgid "sync error" msgid "sync error"
msgstr "erro de sincronização" msgstr "erro de sincronização"
#: crates/pdfs-gui/src/app/pages/devices.rs:621 #: crates/pdfs-gui/src/app/pages/devices.rs:642
msgid "needs attention" msgid "needs attention"
msgstr "requer atenção" msgstr "requer atenção"
#: crates/pdfs-gui/src/app/pages/devices.rs:622 #: crates/pdfs-gui/src/app/pages/devices.rs:643
msgid "waiting for first sync"
msgstr "aguardando a primeira sincronização"
#: crates/pdfs-gui/src/app/pages/devices.rs:644
msgid "up to date" msgid "up to date"
msgstr "atualizado" msgstr "atualizado"
#: crates/pdfs-gui/src/app/pages/devices.rs:632 #: crates/pdfs-gui/src/app/pages/devices.rs:654
msgid "checking for changes…" msgid "checking for changes…"
msgstr "verificando alterações…" msgstr "verificando alterações…"
#: crates/pdfs-gui/src/app/pages/devices.rs:638 #: crates/pdfs-gui/src/app/pages/devices.rs:660
#, rust-format #, rust-format
msgid "checking for changes — {n} item checked" msgid "checking for changes — {n} item checked"
msgid_plural "checking for changes — {n} items checked" msgid_plural "checking for changes — {n} items checked"
msgstr[0] "verificando alterações — {n} item verificado" msgstr[0] "verificando alterações — {n} item verificado"
msgstr[1] "verificando alterações — {n} itens verificados" msgstr[1] "verificando alterações — {n} itens verificados"
#: crates/pdfs-gui/src/app/pages/devices.rs:645 #: crates/pdfs-gui/src/app/pages/devices.rs:667
#, rust-format #, rust-format
msgid "checking for changes — {done} of {total}" msgid "checking for changes — {done} of {total}"
msgstr "verificando alterações — {done} de {total}" msgstr "verificando alterações — {done} de {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:657 #: crates/pdfs-gui/src/app/pages/devices.rs:679
#, rust-format #, rust-format
msgid "syncing {done} of {total}" msgid "syncing {done} of {total}"
msgstr "sincronizando {done} de {total}" msgstr "sincronizando {done} de {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:663 #: crates/pdfs-gui/src/app/pages/devices.rs:685
#, rust-format #, rust-format
msgid "syncing {file} — {done} of {total}" msgid "syncing {file} — {done} of {total}"
msgstr "sincronizando {file} — {done} de {total}" msgstr "sincronizando {file} — {done} de {total}"
#: crates/pdfs-gui/src/app/pages/devices.rs:675 #: crates/pdfs-gui/src/app/pages/devices.rs:697
msgid "Add Folder to Sync" msgid "Add Folder to Sync"
msgstr "Adicionar pasta à sincronização" msgstr "Adicionar pasta à sincronização"
#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:721
#: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1559
#: crates/pdfs-gui/src/app/pages/locations.rs:1686 #: crates/pdfs-gui/src/app/pages/locations.rs:1686
msgid "Syncing folder…" msgid "Syncing folder…"
msgstr "Sincronizando pasta…" msgstr "Sincronizando pasta…"
#: crates/pdfs-gui/src/app/pages/devices.rs:702 #: crates/pdfs-gui/src/app/pages/devices.rs:724
#: crates/pdfs-gui/src/app/pages/devices.rs:706 #: crates/pdfs-gui/src/app/pages/devices.rs:728
msgid "Couldn't add folder" msgid "Couldn't add folder"
msgstr "Não foi possível adicionar a pasta" msgstr "Não foi possível adicionar a pasta"
#: crates/pdfs-gui/src/app/pages/devices.rs:740 #: crates/pdfs-gui/src/app/pages/devices.rs:762
#: crates/pdfs-gui/src/app/pages/devices.rs:746 #: crates/pdfs-gui/src/app/pages/devices.rs:768
msgid "Couldn't list folders to restore" msgid "Couldn't list folders to restore"
msgstr "Não foi possível listar as pastas para restaurar" msgstr "Não foi possível listar as pastas para restaurar"
#: crates/pdfs-gui/src/app/pages/devices.rs:772 #: crates/pdfs-gui/src/app/pages/devices.rs:794
msgid "" msgid ""
"Tick the folders to sync to this machine, and adjust where each one should " "Tick the folders to sync to this machine, and adjust where each one should "
"live." "live."
@@ -2356,19 +2369,19 @@ msgstr ""
"Marque as pastas a sincronizar com esta máquina e ajuste onde cada uma deve " "Marque as pastas a sincronizar com esta máquina e ajuste onde cada uma deve "
"ficar." "ficar."
#: crates/pdfs-gui/src/app/pages/devices.rs:798 #: crates/pdfs-gui/src/app/pages/devices.rs:820
msgid "Restore Folders" msgid "Restore Folders"
msgstr "Restaurar pastas" msgstr "Restaurar pastas"
#: crates/pdfs-gui/src/app/pages/devices.rs:805 #: crates/pdfs-gui/src/app/pages/devices.rs:827
msgid "Restore" msgid "Restore"
msgstr "Restaurar" msgstr "Restaurar"
#: crates/pdfs-gui/src/app/pages/devices.rs:838 #: crates/pdfs-gui/src/app/pages/devices.rs:860
msgid "Restoring folders…" msgid "Restoring folders…"
msgstr "Restaurando pastas…" msgstr "Restaurando pastas…"
#: crates/pdfs-gui/src/app/pages/devices.rs:850 #: crates/pdfs-gui/src/app/pages/devices.rs:872
#, rust-format #, rust-format
msgid "" msgid ""
"These folders are backed up from “{name}”. Restored folders keep syncing " "These folders are backed up from “{name}”. Restored folders keep syncing "
@@ -2377,36 +2390,36 @@ msgstr ""
"Estas pastas têm backup a partir de “{name}”. As pastas restauradas " "Estas pastas têm backup a partir de “{name}”. As pastas restauradas "
"continuam sincronizando com a cópia daquele computador." "continuam sincronizando com a cópia daquele computador."
#: crates/pdfs-gui/src/app/pages/devices.rs:853 #: crates/pdfs-gui/src/app/pages/devices.rs:875
msgid "These folders are backed up under this computer in Proton Drive." msgid "These folders are backed up under this computer in Proton Drive."
msgstr "Estas pastas têm backup sob este computador no Proton Drive." msgstr "Estas pastas têm backup sob este computador no Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:862 #: crates/pdfs-gui/src/app/pages/devices.rs:884
#, rust-format #, rust-format
msgid "Nothing to restore — “{name}”'s folders are all synced here." msgid "Nothing to restore — “{name}”'s folders are all synced here."
msgstr "" msgstr ""
"Nada a restaurar — as pastas de “{name}” já estão todas sincronizadas aqui." "Nada a restaurar — as pastas de “{name}” já estão todas sincronizadas aqui."
#: crates/pdfs-gui/src/app/pages/devices.rs:865 #: crates/pdfs-gui/src/app/pages/devices.rs:887
msgid "Nothing to restore — this computer's folders are all synced here." msgid "Nothing to restore — this computer's folders are all synced here."
msgstr "" msgstr ""
"Nada a restaurar — as pastas deste computador já estão todas sincronizadas " "Nada a restaurar — as pastas deste computador já estão todas sincronizadas "
"aqui." "aqui."
#: crates/pdfs-gui/src/app/pages/devices.rs:889 #: crates/pdfs-gui/src/app/pages/devices.rs:911
msgid "Folder will switch to online only" msgid "Folder will switch to online only"
msgstr "A pasta passará a ser somente online" msgstr "A pasta passará a ser somente online"
#: crates/pdfs-gui/src/app/pages/devices.rs:891 #: crates/pdfs-gui/src/app/pages/devices.rs:913
msgid "Folder will download and stay synced" msgid "Folder will download and stay synced"
msgstr "A pasta será baixada e permanecerá sincronizada" msgstr "A pasta será baixada e permanecerá sincronizada"
#: crates/pdfs-gui/src/app/pages/devices.rs:895 #: crates/pdfs-gui/src/app/pages/devices.rs:917
#: crates/pdfs-gui/src/app/pages/devices.rs:899 #: crates/pdfs-gui/src/app/pages/devices.rs:921
msgid "Couldn't change mode" msgid "Couldn't change mode"
msgstr "Não foi possível alterar o modo" msgstr "Não foi possível alterar o modo"
#: crates/pdfs-gui/src/app/pages/devices.rs:931 #: crates/pdfs-gui/src/app/pages/devices.rs:953
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2423,7 +2436,7 @@ msgstr ""
"uma cópia local, cancele, mude a pasta para Sincronizada e aguarde o " "uma cópia local, cancele, mude a pasta para Sincronizada e aguarde o "
"download terminar antes de removê-la." "download terminar antes de removê-la."
#: crates/pdfs-gui/src/app/pages/devices.rs:937 #: crates/pdfs-gui/src/app/pages/devices.rs:959
#, rust-format #, rust-format
msgid "" msgid ""
"Stop syncing “{path}”?\n" "Stop syncing “{path}”?\n"
@@ -2436,68 +2449,68 @@ msgstr ""
"Os arquivos locais permanecem neste disco e simplesmente deixam de ser " "Os arquivos locais permanecem neste disco e simplesmente deixam de ser "
"sincronizados. Escolha se também deseja excluir a cópia no Proton Drive." "sincronizados. Escolha se também deseja excluir a cópia no Proton Drive."
#: crates/pdfs-gui/src/app/pages/devices.rs:942 #: crates/pdfs-gui/src/app/pages/devices.rs:964
msgid "Stop Syncing Folder?" msgid "Stop Syncing Folder?"
msgstr "Parar de sincronizar a pasta?" msgstr "Parar de sincronizar a pasta?"
#: crates/pdfs-gui/src/app/pages/devices.rs:947 #: crates/pdfs-gui/src/app/pages/devices.rs:969
msgid "Also delete from Proton Drive" msgid "Also delete from Proton Drive"
msgstr "Também excluir do Proton Drive" msgstr "Também excluir do Proton Drive"
#: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:971
msgid "Deletes the only copy of these files." msgid "Deletes the only copy of these files."
msgstr "Exclui a única cópia destes arquivos." msgstr "Exclui a única cópia destes arquivos."
#: crates/pdfs-gui/src/app/pages/devices.rs:951 #: crates/pdfs-gui/src/app/pages/devices.rs:973
msgid "The local copy is unaffected." msgid "The local copy is unaffected."
msgstr "A cópia local não é afetada." msgstr "A cópia local não é afetada."
#: crates/pdfs-gui/src/app/pages/devices.rs:958 #: crates/pdfs-gui/src/app/pages/devices.rs:980
msgid "Stop Syncing" msgid "Stop Syncing"
msgstr "Parar de sincronizar" msgstr "Parar de sincronizar"
#: crates/pdfs-gui/src/app/pages/devices.rs:971 #: crates/pdfs-gui/src/app/pages/devices.rs:993
msgid "Stopped syncing folder" msgid "Stopped syncing folder"
msgstr "A pasta deixou de ser sincronizada" msgstr "A pasta deixou de ser sincronizada"
#: crates/pdfs-gui/src/app/pages/devices.rs:972 #: crates/pdfs-gui/src/app/pages/devices.rs:994
msgid "Couldn't stop syncing the folder" msgid "Couldn't stop syncing the folder"
msgstr "Não foi possível parar de sincronizar a pasta" msgstr "Não foi possível parar de sincronizar a pasta"
#: crates/pdfs-gui/src/app/pages/devices.rs:983 #: crates/pdfs-gui/src/app/pages/devices.rs:1005
msgid "Rename Computer" msgid "Rename Computer"
msgstr "Renomear computador" msgstr "Renomear computador"
#. Translators: {name} is the computer's current name. #. Translators: {name} is the computer's current name.
#: crates/pdfs-gui/src/app/pages/devices.rs:985 #: crates/pdfs-gui/src/app/pages/devices.rs:1007
#, rust-format #, rust-format
msgid "Rename “{name}”." msgid "Rename “{name}”."
msgstr "Renomear “{name}”." msgstr "Renomear “{name}”."
#: crates/pdfs-gui/src/app/pages/devices.rs:1010 #: crates/pdfs-gui/src/app/pages/devices.rs:1032
#: crates/pdfs-gui/src/app/pages/devices.rs:1022 #: crates/pdfs-gui/src/app/pages/devices.rs:1044
msgid "Couldn't rename the computer" msgid "Couldn't rename the computer"
msgstr "Não foi possível renomear o computador" msgstr "Não foi possível renomear o computador"
#: crates/pdfs-gui/src/app/pages/devices.rs:1011 #: crates/pdfs-gui/src/app/pages/devices.rs:1033
msgid "A name is required." msgid "A name is required."
msgstr "Um nome é obrigatório." msgstr "Um nome é obrigatório."
#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #: crates/pdfs-gui/src/app/pages/devices.rs:1043
msgid "Computer renamed" msgid "Computer renamed"
msgstr "Computador renomeado" msgstr "Computador renomeado"
#. Translators: {name} is the computer's name, which the user must type. #. Translators: {name} is the computer's name, which the user must type.
#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #: crates/pdfs-gui/src/app/pages/devices.rs:1056
#, rust-format #, rust-format
msgid "Type “{name}” to confirm" msgid "Type “{name}” to confirm"
msgstr "Digite “{name}” para confirmar" msgstr "Digite “{name}” para confirmar"
#: crates/pdfs-gui/src/app/pages/devices.rs:1039 #: crates/pdfs-gui/src/app/pages/devices.rs:1061
msgid "Remove Computer?" msgid "Remove Computer?"
msgstr "Remover computador?" msgstr "Remover computador?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #: crates/pdfs-gui/src/app/pages/devices.rs:1064
#, rust-format #, rust-format
msgid "" msgid ""
"Remove “{name}” from this account?\n" "Remove “{name}” from this account?\n"
@@ -2512,26 +2525,26 @@ msgstr ""
"naquele próprio computador não são tocados — mas isso não pode ser desfeito " "naquele próprio computador não são tocados — mas isso não pode ser desfeito "
"daqui." "daqui."
#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/devices.rs:1070
#: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/pages/shared.rs:1025
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876
msgid "Remove" msgid "Remove"
msgstr "Remover" msgstr "Remover"
#: crates/pdfs-gui/src/app/pages/devices.rs:1065 #: crates/pdfs-gui/src/app/pages/devices.rs:1087
msgid "Computer removed" msgid "Computer removed"
msgstr "Computador removido" msgstr "Computador removido"
#: crates/pdfs-gui/src/app/pages/devices.rs:1066 #: crates/pdfs-gui/src/app/pages/devices.rs:1088
msgid "Couldn't remove the computer" msgid "Couldn't remove the computer"
msgstr "Não foi possível remover o computador" msgstr "Não foi possível remover o computador"
#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: crates/pdfs-gui/src/app/pages/devices.rs:1106
msgid "Continue This Backup Here?" msgid "Continue This Backup Here?"
msgstr "Continuar este backup aqui?" msgstr "Continuar este backup aqui?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #: crates/pdfs-gui/src/app/pages/devices.rs:1109
#, rust-format #, rust-format
msgid "" msgid ""
"This computer takes over the backup of “{name}”, for example after a " "This computer takes over the backup of “{name}”, for example after a "
@@ -2550,25 +2563,25 @@ msgstr ""
"movidas. Depois, use “Restaurar neste computador” para recuperar o que " "movidas. Depois, use “Restaurar neste computador” para recuperar o que "
"“{name}” sincronizava." "“{name}” sincronizava."
#: crates/pdfs-gui/src/app/pages/devices.rs:1092 #: crates/pdfs-gui/src/app/pages/devices.rs:1114
msgid "Continue Here" msgid "Continue Here"
msgstr "Continuar aqui" msgstr "Continuar aqui"
#. Translators: {name} is the name of the computer whose backup this one took over. #. Translators: {name} is the name of the computer whose backup this one took over.
#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #: crates/pdfs-gui/src/app/pages/devices.rs:1121
#, rust-format #, rust-format
msgid "Now backing up as “{name}”" msgid "Now backing up as “{name}”"
msgstr "Agora fazendo backup como “{name}”" msgstr "Agora fazendo backup como “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1108 #: crates/pdfs-gui/src/app/pages/devices.rs:1130
msgid "Couldn't continue that backup here" msgid "Couldn't continue that backup here"
msgstr "Não foi possível continuar esse backup aqui" msgstr "Não foi possível continuar esse backup aqui"
#: crates/pdfs-gui/src/app/pages/devices.rs:1124 #: crates/pdfs-gui/src/app/pages/devices.rs:1146
msgid "Sync With This Computer?" msgid "Sync With This Computer?"
msgstr "Sincronizar com este computador?" msgstr "Sincronizar com este computador?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #: crates/pdfs-gui/src/app/pages/devices.rs:1149
#, rust-format #, rust-format
msgid "" msgid ""
"This computer and “{name}” keep the same folders in step. A change or a " "This computer and “{name}” keep the same folders in step. A change or a "
@@ -2585,25 +2598,25 @@ msgstr ""
"Drive. As pastas já sincronizadas aqui ficam onde estão. Em seguida, você " "Drive. As pastas já sincronizadas aqui ficam onde estão. Em seguida, você "
"escolhe quais pastas dele sincronizar aqui." "escolhe quais pastas dele sincronizar aqui."
#: crates/pdfs-gui/src/app/pages/devices.rs:1132 #: crates/pdfs-gui/src/app/pages/devices.rs:1154
msgid "Sync Here" msgid "Sync Here"
msgstr "Sincronizar aqui" msgstr "Sincronizar aqui"
#. Translators: {name} is the name of the other computer this one now syncs with. #. Translators: {name} is the name of the other computer this one now syncs with.
#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #: crates/pdfs-gui/src/app/pages/devices.rs:1161
#, rust-format #, rust-format
msgid "Now syncing with “{name}”" msgid "Now syncing with “{name}”"
msgstr "Agora sincronizando com “{name}”" msgstr "Agora sincronizando com “{name}”"
#: crates/pdfs-gui/src/app/pages/devices.rs:1155 #: crates/pdfs-gui/src/app/pages/devices.rs:1177
msgid "Couldn't sync with that computer" msgid "Couldn't sync with that computer"
msgstr "Não foi possível sincronizar com esse computador" msgstr "Não foi possível sincronizar com esse computador"
#: crates/pdfs-gui/src/app/pages/devices.rs:1187 #: crates/pdfs-gui/src/app/pages/devices.rs:1209
msgid "Move Backup to This Computer?" msgid "Move Backup to This Computer?"
msgstr "Mover o backup para este computador?" msgstr "Mover o backup para este computador?"
#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #: crates/pdfs-gui/src/app/pages/devices.rs:1212
#, rust-format #, rust-format
msgid "" msgid ""
"The folders backed up by “{name}” move into this computer's backup in Proton " "The folders backed up by “{name}” move into this computer's backup in Proton "
@@ -2620,12 +2633,12 @@ msgstr ""
"pastas sumirem." "pastas sumirem."
#. Translators: {name} is the name of the computer whose folders moved to this one. #. Translators: {name} is the name of the computer whose folders moved to this one.
#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #: crates/pdfs-gui/src/app/pages/devices.rs:1224
#, rust-format #, rust-format
msgid "Moved the backup of “{name}”" msgid "Moved the backup of “{name}”"
msgstr "Backup de “{name}” movido" msgstr "Backup de “{name}” movido"
#: crates/pdfs-gui/src/app/pages/devices.rs:1216 #: crates/pdfs-gui/src/app/pages/devices.rs:1238
msgid "Couldn't move that backup" msgid "Couldn't move that backup"
msgstr "Não foi possível mover esse backup" msgstr "Não foi possível mover esse backup"
@@ -3362,7 +3375,7 @@ msgid "paused"
msgstr "pausada" msgstr "pausada"
#. Translators: a folder's files can't be opened right now. #. Translators: a folder's files can't be opened right now.
#: crates/pdfs-gui/src/app/pages/locations.rs:1742 #: crates/pdfs-gui/src/app/pages/locations.rs:1745
msgid "not available" msgid "not available"
msgstr "indisponível" msgstr "indisponível"