diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index fcd73f5..f10c554 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -14,7 +14,7 @@ use pdfs_core::cache::ContentCache; use pdfs_core::config::AppDirs; use pdfs_core::control::{ ConflictKeep, ErrorKind, MountKind, RefreshScope, Request as CtlRequest, - Response as CtlResponse, RestoreItem as CtlRestoreItem, ShareEntryKind, SyncPhase, + Response as CtlResponse, RestoreItem as CtlRestoreItem, ShareEntryKind, SyncIssue, SyncPhase, pending_summary, }; use pdfs_core::db::Db; @@ -677,6 +677,15 @@ enum SyncCmd { }, /// List uploads and changes not yet on Proton Drive. Queue, + /// List queued changes Proton Drive refused or that keep failing, and what to do. + Issues, + /// Save the content of a queued upload (by id from `sync queue`) to a file. + Export { + /// Queue id. + id: i64, + /// Where to save it: a new file, or an existing folder to save it in. + dest: PathBuf, + }, /// Retry a queued operation now (by id from `sync queue`), or every failed one. Retry { /// Queue id; omit to retry every failed operation. @@ -1028,6 +1037,8 @@ fn cmd_sync(action: SyncCmd) -> Result<()> { })?)? } SyncCmd::Queue => return cmd_sync_queue(), + SyncCmd::Issues => return cmd_sync_issues(), + SyncCmd::Export { id, dest } => return cmd_sync_export(id, &dest), SyncCmd::Limit { up, down } => return cmd_sync_limit(up, down), SyncCmd::Retry { id } => ok_or_bail(control_request(CtlRequest::RetryPendingOp { id })?)?, SyncCmd::Resume { folder: None } => { @@ -1106,6 +1117,9 @@ fn cmd_sync_queue() -> Result<()> { (false, _) => "due now".to_string(), }; println!("[{}] {} {} ({state})", op.id, op.kind, op.path); + if let Some(issue) = op.issue { + println!(" needs attention: {}", issue_text(issue)); + } if let Some(error) = &op.last_error { println!(" failed {} time(s): {error}", op.attempts); } @@ -1117,6 +1131,91 @@ fn cmd_sync_queue() -> Result<()> { Ok(()) } +/// `pdfs sync issues`: the queued changes that need the user, and what to do. +fn cmd_sync_issues() -> Result<()> { + let response = control_request(CtlRequest::ListPendingOps)?; + let items = match response { + CtlResponse::PendingOps { items } => items, + CtlResponse::Error { message, kind } => bail!("{}", cli_error(kind, &message)), + other => bail!("unexpected response: {other:?}"), + }; + let issues: Vec<_> = items.into_iter().filter(|op| op.failing).collect(); + if json_enabled() { + println!("{}", serde_json::to_string_pretty(&issues)?); + return Ok(()); + } + if issues.is_empty() { + println!("No sync issues."); + return Ok(()); + } + for op in issues { + println!("[{}] {} {}", op.id, op.kind, op.path); + match op.issue { + Some(issue) => println!(" {}", issue_text(issue)), + None => println!(" keeps failing; it is retried."), + } + if let Some(error) = &op.last_error { + println!(" last error: {error}"); + } + if op.exportable { + println!( + " save a copy: pdfs sync export {} ", + op.id + ); + } + } + Ok(()) +} + +/// What a sync issue means, and what the user can do about it. +fn issue_text(issue: SyncIssue) -> &'static str { + match issue { + SyncIssue::Quota => { + "Proton Drive storage is full. Free up space or upgrade; the change is retried." + } + SyncIssue::Access => { + "you can no longer change this on Proton Drive, for example because a share was \ + revoked. Save a copy to keep the content." + } + SyncIssue::Missing => { + "the file or its folder is gone from Proton Drive. Save a copy to keep the content." + } + SyncIssue::Limit => { + "the folder holds too many items or is nested too deep. Move the file to another \ + folder." + } + SyncIssue::Rejected => { + "Proton Drive rejected the change, for example the name. Rename the file." + } + SyncIssue::Unknown => "Proton Drive refused the change.", + } +} + +/// `pdfs sync export`: save a queued upload's content. A folder as `dest` +/// gets the file under its own name. +fn cmd_sync_export(id: i64, dest: &Path) -> Result<()> { + let mut dest = + std::path::absolute(dest).with_context(|| format!("resolving {}", dest.display()))?; + if dest.is_dir() { + let items = match control_request(CtlRequest::ListPendingOps)? { + CtlResponse::PendingOps { items } => items, + CtlResponse::Error { message, kind } => bail!("{}", cli_error(kind, &message)), + other => bail!("unexpected response: {other:?}"), + }; + let Some(op) = items.iter().find(|op| op.id == id) else { + bail!("no queued change {id}; see `pdfs sync queue`"); + }; + let name = Path::new(&op.path) + .file_name() + .with_context(|| format!("{} has no file name", op.path))?; + dest.push(name); + } + ok_or_bail(control_request(CtlRequest::ExportPendingOp { + id, + dest: dest.display().to_string(), + })?) +} + /// `pdfs sync restore`: list what this machine's device holds, confirm where /// each folder should land, then hand the mapping to the daemon. /// diff --git a/crates/pdfs-core/src/control.rs b/crates/pdfs-core/src/control.rs index b3f453e..3f2ec50 100644 --- a/crates/pdfs-core/src/control.rs +++ b/crates/pdfs-core/src/control.rs @@ -477,6 +477,10 @@ pub enum Request { /// Retry a backed-off queued op now instead of waiting out its backoff; /// every failed op when `id` is `None`. Replies with [`Response::Ok`]. RetryPendingOp { id: Option }, + /// Copy the content of a queued upload (`id` from + /// [`Request::ListPendingOps`]) to `dest`, an absolute path that must not + /// exist yet. The op stays queued. Replies with [`Response::Ok`]. + ExportPendingOp { id: i64, dest: String }, /// List the `(sync-conflict …)` copies under My Files and in synced /// folders. Replies with /// [`Response::Conflicts`]. @@ -880,6 +884,59 @@ pub struct PendingOpInfo { pub parked: bool, /// Failed often enough to count as stuck. pub failing: bool, + /// Why Drive refused it, when it did; such an op needs attention at once. + #[serde(default)] + pub issue: Option, + /// Carries file content that [`Request::ExportPendingOp`] can save. + #[serde(default)] + pub exportable: bool, +} + +/// Why Drive refused a queued change (in [`PendingOpInfo`]). The change stays +/// queued and keeps being retried; nothing is deleted. +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum SyncIssue { + /// The account's storage is full. + Quota, + /// The account may no longer change the file or its folder, for example + /// because a share was revoked. + Access, + /// The file or the folder it goes into is gone from Drive. + Missing, + /// The folder holds too many items, or is nested too deep. + Limit, + /// Drive rejected the change, for example a name it does not accept. + Rejected, + /// An issue from a newer daemon. + #[serde(other)] + Unknown, +} + +impl SyncIssue { + /// The name stored in the database and sent on the wire. + pub fn as_str(self) -> &'static str { + match self { + SyncIssue::Quota => "quota", + SyncIssue::Access => "access", + SyncIssue::Missing => "missing", + SyncIssue::Limit => "limit", + SyncIssue::Rejected => "rejected", + SyncIssue::Unknown => "unknown", + } + } + + /// The issue stored as `name`. + pub fn parse(name: &str) -> Self { + match name { + "quota" => SyncIssue::Quota, + "access" => SyncIssue::Access, + "missing" => SyncIssue::Missing, + "limit" => SyncIssue::Limit, + "rejected" => SyncIssue::Rejected, + _ => SyncIssue::Unknown, + } + } } /// One synced local folder on this machine's device (in [`Response::SyncFolders`]). @@ -3290,6 +3347,13 @@ mod tests { }, r#"{"SaveRevisionAsByUid":{"uid":"vol~link","revision_id":"rev-3","dest":"/tmp/out.bin"}}"#, ), + ( + Request::ExportPendingOp { + id: 7, + dest: "/tmp/out.bin".into(), + }, + r#"{"ExportPendingOp":{"id":7,"dest":"/tmp/out.bin"}}"#, + ), ]; for (request, wire) in cases { assert_eq!(serde_json::to_string(&request).unwrap(), wire); @@ -3298,6 +3362,25 @@ mod tests { } } + /// A daemon that predates sync issues sends neither field, and a newer one + /// may send an issue this build does not know. + #[test] + fn a_queued_op_from_another_daemon_version_still_decodes() { + let old = r#"{"id":1,"kind":"create","path":"a.txt","attempts":0,"last_error":null, + "queued_at":5,"next_attempt_at":5,"parked":false,"failing":false}"#; + let op: PendingOpInfo = serde_json::from_str(old).unwrap(); + assert_eq!(op.issue, None); + assert!(!op.exportable); + + let newer = old.replace(r#""failing":false"#, r#""failing":true,"issue":"embargo""#); + let op: PendingOpInfo = serde_json::from_str(&newer).unwrap(); + assert_eq!(op.issue, Some(SyncIssue::Unknown)); + assert_eq!( + SyncIssue::parse(SyncIssue::Quota.as_str()), + SyncIssue::Quota + ); + } + /// A front-end that predates the favorites filter sends no `favorites` /// field, and must keep getting the whole timeline rather than an empty page. #[test] diff --git a/crates/pdfs-core/src/db/migrations.rs b/crates/pdfs-core/src/db/migrations.rs index 44a5ca3..f0e5c0a 100644 --- a/crates/pdfs-core/src/db/migrations.rs +++ b/crates/pdfs-core/src/db/migrations.rs @@ -11,7 +11,7 @@ use super::Db; use crate::Result; /// Current schema version. Bump on every forward migration added below. -pub(super) const SCHEMA_VERSION: i64 = 37; +pub(super) const SCHEMA_VERSION: i64 = 38; impl Db { pub(super) fn migrate(&self) -> Result<()> { @@ -363,6 +363,22 @@ impl Db { tx.execute_batch(MIGRATION_V37)?; } } + if current < 38 { + // Same guards as V26-V37. + let has_column: bool = tx.query_row( + "SELECT COUNT(*) FROM pragma_table_info('pending_op') WHERE name = 'issue'", + [], + |row| row.get::<_, i64>(0), + )? > 0; + let has_ops: bool = tx.query_row( + "SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'pending_op'", + [], + |row| row.get::<_, i64>(0), + )? > 0; + if has_ops && !has_column { + tx.execute_batch(MIGRATION_V38)?; + } + } tx.execute( "INSERT INTO sync_state (key, value) VALUES ('schema_version', ?1) ON CONFLICT(key) DO UPDATE SET value = excluded.value", @@ -1164,3 +1180,9 @@ CREATE INDEX pending_op_parent ON pending_op(parent_uid); CREATE INDEX idx_pending_op_claimed ON pending_op(uid) WHERE claimed_at <> 0; "; + +/// Schema v38: why Drive refused a queued op, when it did (a sync issue). +/// `NULL` for an op that has not been refused, which is every op migrated. +const MIGRATION_V38: &str = " +ALTER TABLE pending_op ADD COLUMN issue TEXT; +"; diff --git a/crates/pdfs-core/src/db/ops.rs b/crates/pdfs-core/src/db/ops.rs index 0681ddd..5b8ab3a 100644 --- a/crates/pdfs-core/src/db/ops.rs +++ b/crates/pdfs-core/src/db/ops.rs @@ -2,6 +2,8 @@ //! the remote has not yet seen. Rebuilt into memory on mount and drained in row //! order, so a child never drains before the parent that gives it a real uid. +use std::collections::HashMap; + use rusqlite::{OptionalExtension, params}; use serde::{Deserialize, Serialize}; @@ -257,7 +259,8 @@ pub struct PendingCounts { /// never drain on their own, so counting them as "waiting to upload" would /// have the front-end promise progress that is not coming. pub parked: i64, - /// Ops that have failed at least [`FAILING_ATTEMPTS`] times. A permanently + /// Ops that have failed at least [`FAILING_ATTEMPTS`] times, or that Drive + /// refused ([`Db::set_op_issue`]). A permanently /// failing op never wedges the queue — the backoff sees to that — which is /// exactly why it needs surfacing: it retries forever, invisibly. pub failing: i64, @@ -1028,15 +1031,15 @@ impl Db { |r| r.get(0), )?; let failing = conn.query_row( - "SELECT COUNT(*) FROM pending_op WHERE attempts >= ?1", + "SELECT COUNT(*) FROM pending_op WHERE attempts >= ?1 OR issue IS NOT NULL", params![FAILING_ATTEMPTS], |r| r.get(0), )?; let last_error = conn .query_row( "SELECT last_error FROM pending_op - WHERE attempts >= ?1 AND last_error IS NOT NULL - ORDER BY attempts DESC LIMIT 1", + WHERE (attempts >= ?1 OR issue IS NOT NULL) AND last_error IS NOT NULL + ORDER BY issue IS NULL, attempts DESC LIMIT 1", params![FAILING_ATTEMPTS], |r| r.get::<_, Option>(0), ) @@ -1132,6 +1135,26 @@ impl Db { Ok(()) } + /// Record why Drive refused op `id`, or that the latest failure was not a + /// refusal (`None`). An op with an issue counts as failing at once. + pub fn set_op_issue(&self, id: i64, issue: Option<&str>) -> Result<()> { + self.conn.lock().execute( + "UPDATE pending_op SET issue = ?2 WHERE id = ?1", + params![id, issue], + )?; + Ok(()) + } + + /// The issue of every op Drive refused, by op id. + pub fn op_issues(&self) -> Result> { + let conn = self.read(); + let mut stmt = conn.prepare("SELECT id, issue FROM pending_op WHERE issue IS NOT NULL")?; + let rows = stmt + .query_map([], |r| Ok((r.get(0)?, r.get(1)?)))? + .collect::>()?; + Ok(rows) + } + /// Make a create due again if it was renamed or moved /// ([`Db::rewrite_op_target`]) while the attempt that just failed was on /// the wire, `parent_uid` and `name` being what that attempt sent. What it diff --git a/crates/pdfs-core/src/db/tests.rs b/crates/pdfs-core/src/db/tests.rs index 12e432f..ae4bd6d 100644 --- a/crates/pdfs-core/src/db/tests.rs +++ b/crates/pdfs-core/src/db/tests.rs @@ -6138,6 +6138,33 @@ fn retry_now_makes_a_backed_off_op_due_but_leaves_parked_ops_parked() { assert_eq!(due(parked), ops::PARK_UNTIL); } +/// A change Drive refused needs the user now, not after six more failures, and +/// its refusal is the error the status leads with. +#[test] +fn an_op_with_an_issue_counts_as_failing_at_once() { + let db = Db::open_in_memory().unwrap(); + queued_op(&db, "vol~a", 1, 90_000); + let refused = queued_op(&db, "vol~b", 1, 90_000); + assert_eq!(db.pending_op_counts().unwrap().failing, 0); + + db.record_op_failure(refused, "storage quota exceeded", 90_000) + .unwrap(); + db.set_op_issue(refused, Some("quota")).unwrap(); + let counts = db.pending_op_counts().unwrap(); + assert_eq!(counts.failing, 1); + assert_eq!(counts.last_error.as_deref(), Some("storage quota exceeded")); + assert_eq!( + db.op_issues().unwrap(), + std::collections::HashMap::from([(refused, "quota".to_string())]) + ); + + // The op stays queued with its bytes; clearing the issue is all it takes. + db.set_op_issue(refused, None).unwrap(); + assert_eq!(db.pending_op_counts().unwrap().failing, 0); + assert!(db.op_issues().unwrap().is_empty()); + assert_eq!(db.pending_ops().unwrap().len(), 2); +} + #[test] fn retry_all_touches_only_ops_that_have_failed() { let db = Db::open_in_memory().unwrap(); diff --git a/crates/pdfs-fuse/src/control.rs b/crates/pdfs-fuse/src/control.rs index f3a4918..446a173 100644 --- a/crates/pdfs-fuse/src/control.rs +++ b/crates/pdfs-fuse/src/control.rs @@ -1404,6 +1404,14 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U Ok(items) => CtlResponse::PendingOps { items }, Err(e) => CtlResponse::error(e), }, + Ok(CtlRequest::ExportPendingOp { id, dest }) => { + match core.export_pending_op(id, Path::new(&dest)) { + Ok(written) => CtlResponse::Ok { + message: format!("wrote {} to {dest}", human_bytes(written)), + }, + Err(e) => CtlResponse::error(e), + } + } Ok(CtlRequest::RetryPendingOp { id }) => match core.retry_pending_ops(id) { Ok(0) if id.is_some() => CtlResponse::Ok { message: "nothing to retry: the operation is already due or waiting for a rename" diff --git a/crates/pdfs-fuse/src/drain.rs b/crates/pdfs-fuse/src/drain.rs index d6369ba..03db5ed 100644 --- a/crates/pdfs-fuse/src/drain.rs +++ b/crates/pdfs-fuse/src/drain.rs @@ -31,7 +31,7 @@ use parking_lot::Mutex; use pdfs_core::batch; use pdfs_core::cache::{Baseline, StagedWrite}; -use pdfs_core::control::{ActivityKind, TransferDirection}; +use pdfs_core::control::{ActivityKind, SyncIssue, TransferDirection}; use pdfs_core::db::{ CreateLanding, CreateRetired, OP_CREATE, OP_MKDIR, OP_RENAME, OP_REVISION, OP_TRASH, PARK_EXPIRY_MS, PendingOp, RenameMeta, @@ -40,6 +40,7 @@ use proton_drive_rs::proton_sdk::ids::NodeUid; use proton_drive_rs::{Node, NodeKind}; use tracing::{debug, error, info, warn}; +use super::link::is_network_error; use super::state::{Intervals, PendingRevision}; use super::transfers::CountingReader; use super::{ @@ -48,6 +49,8 @@ use super::{ is_already_exists, is_gone, is_local_uid_str, media_type_for, node_revision_id, node_size, now_millis, now_secs, parse_node_uid, }; +use proton_drive_rs::proton_sdk::api::ResponseCode; +use proton_drive_rs::proton_sdk::error::ProtonError; const DRAIN_ACCESS_RECHECK: Duration = Duration::from_secs(5); @@ -383,6 +386,11 @@ impl Core { self.wait_for_drain_work(); continue; } + // A failure to reach Drive says nothing about an earlier refusal, + // so it keeps the issue that refusal recorded. + if let Some(issue) = refusal(e.as_ref()) { + self.record_issue(&op, issue); + } match self.db.retry_if_retargeted( op.id, op.parent_uid.as_deref(), @@ -464,6 +472,9 @@ impl Core { { error!(uid = %op.uid, %error, "recording an access-deferral failure failed"); } + if reason != AccessDeferral::RemoteUnreachable { + self.record_issue(op, Some(SyncIssue::Access)); + } } else { debug!( uid = %op.uid, @@ -525,6 +536,7 @@ impl Core { ) { error!(uid = %op.uid, %error, "recording a missing-authority failure failed"); } + self.record_issue(op, Some(SyncIssue::Missing)); self.release_claim(op); } Err(error) => { @@ -535,6 +547,13 @@ impl Core { } } + /// Store why Drive refused `op`, or that its latest failure was no refusal. + fn record_issue(&self, op: &PendingOp, issue: Option) { + if let Err(error) = self.db.set_op_issue(op.id, issue.map(SyncIssue::as_str)) { + error!(uid = %op.uid, %error, "recording a sync issue failed"); + } + } + /// Hand a claimed op back to the queue, logging rather than propagating — /// there is no caller left to propagate to, and the drain must not stop. fn release_claim(&self, op: &PendingOp) { @@ -2217,6 +2236,30 @@ fn moved_elsewhere(meta: &RenameMeta, node: &Node, parent: &NodeUid, name: &str) !at(&meta.original_parent_uid, original_name) && !at(&parent.to_string(), name) } +/// What a failed attempt says about its op's sync issue: `None` when Drive +/// could not be reached, which says nothing; otherwise the issue Drive's answer +/// is, or `Some(None)` for a failure that is not a refusal. +fn refusal(e: &(dyn std::error::Error + 'static)) -> Option> { + let proton = std::iter::successors(Some(e), |e| e.source()) + .find_map(|e| e.downcast_ref::())?; + if is_network_error(proton) { + return None; + } + let ProtonError::Api(api) = proton else { + return Some(None); + }; + Some(match api.code { + ResponseCode::InsufficientQuota + | ResponseCode::InsufficientSpace + | ResponseCode::InsufficientVolumeQuota => Some(SyncIssue::Quota), + ResponseCode::Forbidden | ResponseCode::NotEnoughPermissions => Some(SyncIssue::Access), + ResponseCode::DoesNotExist => Some(SyncIssue::Missing), + ResponseCode::TooManyChildren | ResponseCode::NestingTooDeep => Some(SyncIssue::Limit), + ResponseCode::InvalidValue | ResponseCode::IncompatibleState => Some(SyncIssue::Rejected), + _ => None, + }) +} + /// What the park sweep does with one parked create. #[derive(Debug, PartialEq, Eq)] enum ParkVerdict { @@ -2348,6 +2391,57 @@ mod tests { /// A transient create is queued a moment before its node is written. A /// sweep in between dropped it, and the rename to the finished name then /// failed with `EBUSY` (B145). + #[test] + fn a_refusal_from_drive_is_sorted_into_an_issue_and_the_network_is_not() { + use proton_drive_rs::proton_sdk::error::ProtonApiError; + let api = |code, http_status| { + ProtonError::Api(ProtonApiError { + code, + http_status, + message: String::new(), + details: None, + }) + }; + let issue = |e: ProtonError| refusal(&e); + assert_eq!( + issue(api(ResponseCode::InsufficientQuota, 422)), + Some(Some(SyncIssue::Quota)) + ); + assert_eq!( + issue(api(ResponseCode::NotEnoughPermissions, 403)), + Some(Some(SyncIssue::Access)) + ); + assert_eq!( + issue(api(ResponseCode::DoesNotExist, 404)), + Some(Some(SyncIssue::Missing)) + ); + assert_eq!( + issue(api(ResponseCode::TooManyChildren, 422)), + Some(Some(SyncIssue::Limit)) + ); + // A refusal nobody sorted clears an earlier issue; the network keeps it. + assert_eq!(issue(api(ResponseCode::AlreadyExists, 422)), Some(None)); + assert_eq!(issue(api(ResponseCode::RequestTimeout, 408)), None); + // An error that is no refusal from Drive at all is no issue either. + assert_eq!(refusal(&std::io::Error::other("disk")), None); + + // The drain sees Drive's error wrapped by whatever called it. + #[derive(Debug)] + struct Wrapped(ProtonError); + impl std::fmt::Display for Wrapped { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str("uploading") + } + } + impl std::error::Error for Wrapped { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + Some(&self.0) + } + } + let wrapped = Wrapped(api(ResponseCode::InsufficientSpace, 422)); + assert_eq!(refusal(&wrapped), Some(Some(SyncIssue::Quota))); + } + #[test] fn a_parked_create_is_dropped_only_once_its_file_is_gone_and_closed() { let now = PARK_EXPIRY_MS * 10; diff --git a/crates/pdfs-fuse/src/queue.rs b/crates/pdfs-fuse/src/queue.rs index 6c6a12d..bbaca30 100644 --- a/crates/pdfs-fuse/src/queue.rs +++ b/crates/pdfs-fuse/src/queue.rs @@ -1,12 +1,14 @@ //! The user's view of the pending-op queue: what has not reached the remote //! yet, why, and a way to stop waiting out a backoff. //! -//! Read-only apart from "retry now", which only moves a row's next-attempt time. -//! Nothing here drops a queued op: its staged blob is the only copy of the -//! user's write (see `docs/RECOVERY.md`). +//! Read-only apart from "retry now", which only moves a row's next-attempt time, +//! and "export", which copies a staged blob out. Nothing here drops a queued op: +//! its staged blob is the only copy of the user's write (see `docs/RECOVERY.md`). use super::*; -use pdfs_core::control::PendingOpInfo; +use std::io::Write; + +use pdfs_core::control::{PendingOpInfo, SyncIssue}; use pdfs_core::db::{FAILING_ATTEMPTS, PARK_UNTIL}; impl Core { @@ -16,10 +18,15 @@ impl Core { .db .pending_ops() .map_err(|e| CoreError::internal(format!("listing the queue: {e}")))?; + let issues = self + .db + .op_issues() + .map_err(|e| CoreError::internal(format!("listing sync issues: {e}")))?; Ok(ops .into_iter() .map(|op| { let parked = op.next_attempt_at >= PARK_UNTIL; + let exportable = exportable(&op).is_some(); let path = self .db .node_path(&op.uid) @@ -37,7 +44,9 @@ impl Core { queued_at: op.created_at / 1000, next_attempt_at: (!parked).then_some(op.next_attempt_at / 1000), parked, - failing: op.attempts >= FAILING_ATTEMPTS, + failing: op.attempts >= FAILING_ATTEMPTS || issues.contains_key(&op.id), + issue: issues.get(&op.id).map(|issue| SyncIssue::parse(issue)), + exportable, } }) .collect()) @@ -57,4 +66,107 @@ impl Core { } Ok(moved) } + + /// Copy the content of queued op `id` to `dest`, which must not exist yet. + /// The op stays queued. Returns the bytes written. + pub(crate) fn export_pending_op(&self, id: i64, dest: &Path) -> CoreResult { + if !dest.is_absolute() { + return Err(CoreError::invalid(format!( + "destination must be an absolute path: {}", + dest.display() + ))); + } + let ops = self + .db + .pending_ops() + .map_err(|e| CoreError::internal(format!("listing the queue: {e}")))?; + let op = ops + .iter() + .find(|op| op.id == id) + .ok_or_else(|| CoreError::not_found(format!("no queued change {id}")))?; + let blob = exportable(op).ok_or_else(|| { + CoreError::invalid(format!("queued change {id} carries no file content")) + })?; + let written = copy_to_new_file(blob, dest)?; + info!(id, dest = %dest.display(), written, "exported a queued change's content"); + Ok(written) + } +} + +/// Copy `blob` to `dest`, which must not exist: never replace something the +/// user already has. +fn copy_to_new_file(blob: &Path, dest: &Path) -> CoreResult { + let mut source = File::open(blob) + .map_err(|e| CoreError::internal(format!("open {}: {e}", blob.display())))?; + let mut out = std::fs::OpenOptions::new() + .write(true) + .create_new(true) + .open(dest) + .map_err(|e| match e.kind() { + std::io::ErrorKind::AlreadyExists => { + CoreError::invalid(format!("{} already exists", dest.display())) + } + _ => CoreError::internal(format!("create {}: {e}", dest.display())), + })?; + std::io::copy(&mut source, &mut out) + .and_then(|written| out.flush().and(out.sync_all()).map(|()| written)) + .map_err(|e| CoreError::internal(format!("write {}: {e}", dest.display()))) +} + +/// The staged blob of an op that carries file content. +fn exportable(op: &PendingOp) -> Option<&Path> { + matches!(op.kind.as_str(), OP_CREATE | OP_REVISION) + .then_some(op.blob_path.as_deref()) + .flatten() + .map(Path::new) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn op(kind: &str, blob: Option<&str>) -> PendingOp { + PendingOp { + id: 1, + kind: kind.to_string(), + uid: "vol~a".to_string(), + parent_uid: None, + name: None, + blob_path: blob.map(str::to_string), + meta_json: None, + created_at: 0, + attempts: 0, + last_error: None, + next_attempt_at: 0, + } + } + + #[test] + fn only_a_change_that_carries_file_content_can_be_exported() { + assert!(exportable(&op(OP_CREATE, Some("/staging/a"))).is_some()); + assert!(exportable(&op(OP_REVISION, Some("/staging/a"))).is_some()); + assert!(exportable(&op(OP_CREATE, None)).is_none()); + assert!(exportable(&op(OP_RENAME, None)).is_none()); + assert!(exportable(&op(OP_TRASH, None)).is_none()); + } + + #[test] + fn an_export_copies_the_bytes_and_never_replaces_a_file() { + let dir = std::env::temp_dir().join(format!("pdfs-export-{}", std::process::id())); + std::fs::create_dir_all(&dir).unwrap(); + let blob = dir.join("blob"); + std::fs::write(&blob, b"queued bytes").unwrap(); + + let dest = dir.join("copy.txt"); + assert_eq!(copy_to_new_file(&blob, &dest).unwrap(), 12); + assert_eq!(std::fs::read(&dest).unwrap(), b"queued bytes"); + + std::fs::write(&dest, b"the user's own").unwrap(); + assert!(copy_to_new_file(&blob, &dest).is_err()); + assert_eq!(std::fs::read(&dest).unwrap(), b"the user's own"); + // The staged blob is the only copy of the change: an export leaves it. + assert_eq!(std::fs::read(&blob).unwrap(), b"queued bytes"); + + let _ = std::fs::remove_dir_all(&dir); + } } diff --git a/crates/pdfs-gui/src/app/main.rs b/crates/pdfs-gui/src/app/main.rs index 183132b..7db02be 100644 --- a/crates/pdfs-gui/src/app/main.rs +++ b/crates/pdfs-gui/src/app/main.rs @@ -75,8 +75,8 @@ use pdfs_core::control::{ DirEntry, ErrorKind, ImportSummary, InvitationInfo, JobItem, MappingProgress, PendingOpInfo, PhotoItem, PhotoKind, PhotoMonth, PlaceInfo, PublicLinkInfo, RefreshScope, Request, Response, RestorableFolder, RestoreItem, RevisionInfo, SearchHit, ShareEntry, ShareEntryKind, SharedItem, - SyncFolderInfo, SyncPhase, SyncProgress, ThumbnailBuildStatus, Topic, TransferDirection, - TransferItem, send, + SyncFolderInfo, SyncIssue, SyncPhase, SyncProgress, ThumbnailBuildStatus, Topic, + TransferDirection, TransferItem, send, }; use pdfs_core::mounts::{MountAccess, MountKind, MountMode, MountSpec}; diff --git a/crates/pdfs-gui/src/app/pages/locations.rs b/crates/pdfs-gui/src/app/pages/locations.rs index 77524b0..f573e92 100644 --- a/crates/pdfs-gui/src/app/pages/locations.rs +++ b/crates/pdfs-gui/src/app/pages/locations.rs @@ -70,8 +70,9 @@ pub(crate) struct LocationRow { progress: gtk4::ProgressBar, } -/// What a queue row shows that can change: id, attempts, next attempt, parked. -pub(crate) type QueueKey = (i64, i64, Option, bool); +/// What a queue row shows that can change: id, attempts, next attempt, parked, +/// issue. +pub(crate) type QueueKey = (i64, i64, Option, bool, Option); /// The "Waiting to Upload" list: the daemon's pending-op queue. pub(crate) struct QueueState { @@ -591,7 +592,7 @@ fn repaint_queue(ui: &Rc, items: &[PendingOpInfo]) { items.sort_by_key(|op| (!op.failing, op.attempts == 0, op.id)); let key: Vec = items .iter() - .map(|op| (op.id, op.attempts, op.next_attempt_at, op.parked)) + .map(|op| (op.id, op.attempts, op.next_attempt_at, op.parked, op.issue)) .collect(); if *queue.painted.borrow() == key { return; @@ -648,6 +649,10 @@ fn queue_row(ui: &Rc, op: &PendingOpInfo, now: i64) -> adw::ActionRow { "{action} · {state}", &[("action", &action), ("state", &state)], ); + if let Some(issue) = op.issue { + subtitle.push('\n'); + subtitle.push_str(&issue_text(issue)); + } if let Some(error) = &op.last_error { subtitle.push('\n'); // Translators: {n} is how many attempts failed, {error} the last error message. @@ -662,7 +667,7 @@ fn queue_row(ui: &Rc, op: &PendingOpInfo, now: i64) -> adw::ActionRow { .title(glib::markup_escape_text(&op.path).as_str()) .subtitle(glib::markup_escape_text(&subtitle).as_str()) .title_lines(1) - .subtitle_lines(3) + .subtitle_lines(if op.issue.is_some() { 5 } else { 3 }) .tooltip_text(&op.path) .build(); let image = gtk4::Image::from_icon_name(if op.failing { @@ -687,9 +692,87 @@ fn queue_row(ui: &Rc, op: &PendingOpInfo, now: i64) -> adw::ActionRow { retry.connect_clicked(move |_| retry_queued(&ui, Some(id))); row.add_suffix(&retry); } + if op.failing && op.exportable { + let export = gtk4::Button::builder() + .label(gettext("Export")) + .tooltip_text(gettext("Save a copy of this file's content elsewhere")) + .valign(gtk4::Align::Center) + .build(); + export.add_css_class("flat"); + let ui = ui.clone(); + let id = op.id; + let name = Path::new(&op.path) + .file_name() + .map(|name| name.to_string_lossy().into_owned()) + .unwrap_or_default(); + export.connect_clicked(move |_| prompt_export_queued(&ui, id, &name)); + row.add_suffix(&export); + } row } +/// What a sync issue means and what the user can do about it. The change stays +/// queued either way. +fn issue_text(issue: SyncIssue) -> String { + match issue { + SyncIssue::Quota => gettext( + "Your Proton Drive storage is full. Free up space or upgrade your plan, and this change uploads on its own.", + ), + SyncIssue::Access => gettext( + "You can no longer change this on Proton Drive. Ask the owner for edit access, or export the file to keep your version.", + ), + SyncIssue::Missing => gettext( + "The folder this change belongs in is gone from Proton Drive. Export the file to keep your version.", + ), + SyncIssue::Limit => gettext( + "Proton Drive's limit on items in a folder or on folder depth is reached. Make room in the folder, then retry.", + ), + SyncIssue::Rejected | SyncIssue::Unknown => { + gettext("Proton Drive refused this change. It stays queued and is tried again.") + } + } +} + +/// Ask where to save a copy of a queued file's content, then have the daemon +/// write it there. The change itself stays queued. +fn prompt_export_queued(ui: &Rc, id: i64, name: &str) { + let window = ui_window(ui); + let dialog = gtk4::FileDialog::builder() + .title(gettext("Export File")) + .initial_name(name) + .build(); + let ui = ui.clone(); + dialog.save(window.as_ref(), gio::Cancellable::NONE, move |res| { + let Ok(file) = res else { return }; + let Some(dest) = file.path().and_then(|p| p.to_str().map(str::to_string)) else { + toast_error( + &ui, + &gettext("Couldn't export the file"), + &gettext("That location isn't a local file."), + ); + return; + }; + let rx = spawn_request( + ui.dirs.control_socket(), + Request::ExportPendingOp { id, dest }, + ); + let ui = ui.clone(); + glib::spawn_future_local(async move { + match rx.recv().await { + Ok(Ok(Response::Ok { .. })) => toast(&ui, &gettext("File exported")), + Ok(Ok(Response::Error { message, kind })) => { + toast_failure(&ui, &gettext("Couldn't export the file"), &message, kind) + } + _ => toast_error( + &ui, + &gettext("Couldn't export the file"), + &gettext("The Proton Drive service didn't respond."), + ), + } + }); + }); +} + /// Ask the daemon to stop waiting out one op's backoff, or every failed op's. fn retry_queued(ui: &Rc, id: Option) { let rx = spawn_request(ui.dirs.control_socket(), Request::RetryPendingOp { id }); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 3c6aa97..8a0989d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -11,8 +11,18 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). ## [Unreleased] -Schema: **37**. The queue table is rebuilt so an id is never given out twice; queued changes -are kept. +Schema: **38**. The queue table is rebuilt so an id is never given out twice; queued changes +are kept. Queued changes get a column for the reason Drive refused them. + +### Added +- **Sync issues.** A change Drive refuses because the storage is full, access was taken away, + its folder is gone, a folder limit is reached or Drive rejected it shows up at once as needing + attention, with what it means and what to do, instead of after six failed attempts. The + change stays queued and is still retried. +- **Export a queued file.** The Sync page's Export button and `pdfs sync export ` + save a copy of a queued upload's content. The upload stays queued. +- **`pdfs sync issues`** lists the changes that need attention; `pdfs sync queue` shows the + issue next to each change. ### Changed - **Making, renaming and deleting through the mount no longer waits for Drive.** A new folder, diff --git a/docs/MILESTONE-3.0.0-STATUS.md b/docs/MILESTONE-3.0.0-STATUS.md new file mode 100644 index 0000000..26a3b45 --- /dev/null +++ b/docs/MILESTONE-3.0.0-STATUS.md @@ -0,0 +1,52 @@ +# 3.0.0: what is done and what is left + +Tracks `docs/MILESTONE-3.0.0.md`. Update it with every commit that moves a phase. + +## Done + +- **Phase 0**: fake Drive, simulation runs, CI job (2.9.0). +- **Phase 1**: queued-op preconditions and own sealed revisions in the database (2.9.0). +- **Phase 2**: local ids, inode = local id, one tree for every mount (2.10.0). +- **Phase 3, first part**: mkdir, create, rename, unlink and rmdir on the mount are recorded + locally and sent from the queue; `"local_first": false` brings back the old path (5e0f30c). +- Fixes from the simulation and account runs since then: B141 to B147. +- **Sync issues, first cut** (§6.2): refusals sorted into issues, shown at once in the app, + tray and CLI; Export button and `pdfs sync export`; `pdfs sync issues`. + +## Phase 3: left for 3.0.0 + +1. **Sync issues (§6.2)**: first cut done. + - [x] The drain sorts a refusal from Drive into an issue kind (quota, access, missing, + limit, rejected) and stores it on the queued op (schema 38). + - [x] An op with an issue counts as "needs attention" at once, not after six failures. + - [x] The queue listing carries the issue kind and whether its content can be exported. + - [x] Export a queued file's content (control request, `pdfs sync export`). + - [x] `pdfs sync issues`, and the issue shown in `pdfs sync queue`. + - [x] The app's Sync page shows each issue with what the user can do; Export and Retry + buttons; translated in every catalog. + - [ ] Discard an issue on purpose (after export, or for a change with no content), and + undo the local change it stood for. Not in the first cut. + - [ ] Show the issue on the node itself (file browser emblem or status). Not in the first + cut. +2. **Planner and executor (§5.4, §5.5)**: ops keyed by local id; remove `mint_local_uid`, + `finish_create` and `adopt_real_uid`; a landing create sets `remote_uid` on its row. +3. **Speed (§7)**: run independent ops in parallel, batch trashes and moves; measure 1,000 files + and 100 folders on Wi-Fi against LAN (target: within 10 %). +4. **Done-when checks**: + - [ ] Simulation passes on the Wi-Fi profile. + - [ ] Known-bug list in `sim/run.rs` is empty: B125 and B130 open; B129 and B132 fixed but + unconfirmed. + - [ ] A clean account run. The last one (2026-10-04) failed on B70 (fixed as B145) and + mirror/mirror "busy syncing" (the script now retries); not confirmed yet. +5. **Release**: the 2.9.0 and 2.10.0 tags still wait for the user's go-ahead. + +## After 3.0.0 + +- Remove the old online path in `filesystem.rs` and the `local_first` switch (the release after + 3.0.0). +- **Phase 4**: one applier for remote changes. +- **Phase 5**: mirror folders on the same planner and executor. +- **Any time**: `Size` and block geometry as types; a `Deadline` on every remote call. +- Open questions in §12 of the milestone. +- `PLAN.md`: the acceptance script notices network drops and reports `interrupted` instead of + TIMEOUT. diff --git a/po/de.po b/po/de.po index 10a2a66..b162a59 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d. %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -271,9 +271,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -477,8 +477,8 @@ msgstr "Nichts im aktuellen Protokoll entspricht diesem Filter." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -516,8 +516,8 @@ msgstr "Ansichtsoptionen" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1020,7 +1020,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Unterscheidet sich von {name}" @@ -1207,11 +1207,12 @@ msgstr "Alben konnten nicht geladen werden" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2159,7 +2160,7 @@ msgid "Add Folder to Sync" msgstr "Ordner zur Synchronisierung hinzufügen" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Ordner wird synchronisiert …" @@ -2524,19 +2525,19 @@ msgstr[1] "{n} Fotos in den Papierkorb verschieben" msgid "Keep" msgstr "Behalten" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Ordner hinzufügen" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "Einen lokalen Ordner im Proton-Drive-Gerät dieses Computers sichern" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Konflikte" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2544,7 +2545,7 @@ msgstr "" "Dateien wurden gleichzeitig an zwei Stellen geändert. Beide Versionen wurden " "behalten; bitte auswählen, welche bleiben soll." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2552,138 +2553,138 @@ msgstr "" "Synchronisierte Ordner behalten eine vollständige Kopie auf diesem Computer. " "Ordner mit „Nur online“ laden jede Datei erst beim Öffnen." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "Über Synchronisierungsarten" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Übersicht" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Verlauf" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Ansehen" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "{n} Änderung konnte nicht hochgeladen werden" msgstr[1] "{n} Änderungen konnten nicht hochgeladen werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} Datei wurde an zwei Stellen gleichzeitig geändert" msgstr[1] "{n} Dateien wurden an zwei Stellen gleichzeitig geändert" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Einige Dateien erfordern Aufmerksamkeit" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Wird geprüft …" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Für 1 Stunde pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Für 8 Stunden pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Für 24 Stunden pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Hochladen bis zur Fortsetzung anhalten. Dateien lassen sich weiterhin wie " "gewohnt öffnen." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Eine Weile pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Fortsetzen" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "" "Alles hochladen, was während der pausierten Synchronisierung gewartet hat" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Synchronisierung konnte nicht pausiert werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Synchronisierung konnte nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Synchronisierung fortgesetzt" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Synchronisierung bis zur Fortsetzung pausiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Synchronisierung pausiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Alle erneut versuchen" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Alle fehlgeschlagenen Änderungen jetzt erneut versuchen" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "Warten auf Hochladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "" "Auf diesem Computer vorgenommene Änderungen, die noch nicht in Proton Drive " "sind." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2698,89 +2699,154 @@ msgstr[1] "" "Auf diesem Computer vorgenommene Änderungen, die noch nicht in Proton Drive " "sind. Die ersten {shown} von {n} werden angezeigt." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Änderungen hochladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Neue Datei hochladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Ordner erstellen" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Umbenennen oder verschieben" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "In den Papierkorb verschieben" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Änderung" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "wartet, bis die schreibende Anwendung fertig ist" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "erneuter Versuch {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "wartet auf Fortsetzung der Synchronisierung" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "als Nächstes" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "{n}-mal fehlgeschlagen: {error}" msgstr[1] "{n}-mal fehlgeschlagen: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Jetzt erneut versuchen" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Exportieren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Eine Kopie des Dateiinhalts an einem anderen Ort speichern" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Dein Proton-Drive-Speicher ist voll. Gib Speicherplatz frei oder wechsle zu " +"einem größeren Tarif, dann wird diese Änderung von selbst hochgeladen." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Du kannst das auf Proton Drive nicht mehr ändern. Bitte den Eigentümer um " +"Bearbeitungsrechte oder exportiere die Datei, um deine Version zu behalten." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"Der Ordner, zu dem diese Änderung gehört, ist nicht mehr auf Proton Drive. " +"Exportiere die Datei, um deine Version zu behalten." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"Proton Drive erlaubt nicht mehr Elemente in einem Ordner oder keine tiefere " +"Verschachtelung. Schaffe Platz im Ordner und versuche es dann erneut." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"Proton Drive hat diese Änderung abgelehnt. Sie bleibt in der Warteschlange " +"und wird erneut versucht." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Datei exportieren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Die Datei konnte nicht exportiert werden" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "Dieser Ort ist keine lokale Datei." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "Datei exportiert" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Wird erneut versucht …" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Erneuter Versuch fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, geändert {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "Das Original ist weg; nur diese Kopie ist übrig" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Gleicher Inhalt wie das Original" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2798,7 +2864,7 @@ msgstr "" "Was nicht behalten wird, kommt in den Papierkorb und kann dort " "wiederhergestellt werden." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2810,113 +2876,113 @@ msgstr "" "\n" "Die Kopie behalten, um ihr den ursprünglichen Namen zurückzugeben." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Konflikt lösen" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Name für die Kopie, falls beide behalten werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Original behalten" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Beide behalten" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Kopie behalten" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Der Konflikt konnte nicht gelöst werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Proton-Drive-Orte dieses Computers werden gelesen." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Nicht verfügbar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Noch keine Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "Der Proton-Drive-Dienst hat seinen Ordner noch nicht gemeldet." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Schreibgeschützt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "In Dateien öffnen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Ort ändern …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "" "Auswählen, ob dieser Ordner eine vollständige Kopie auf diesem Computer " "behält" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Jede Datei auf diesem Computer und in Proton Drive behalten." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Dateien in Proton Drive behalten und jede erst beim Öffnen herunterladen." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Nur online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Synchronisiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Jetzt synchronisieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Synchronisierung fortsetzen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Synchronisierung pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Synchronisierung beenden …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Ordner auf „Nur online“ umstellen?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2925,11 +2991,11 @@ msgstr "" "Dateien in {path} werden von diesem Computer entfernt und nur in Proton " "Drive behalten. Jede Datei wird beim Öffnen erneut heruntergeladen." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Nur online verfügbar machen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2938,61 +3004,61 @@ msgstr "" "Jede Datei in {path} wird auf diesen Computer heruntergeladen und bleibt " "synchronisiert. Auf diesem Datenträger sind {free} frei." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Jede Datei in {path} wird auf diesen Computer heruntergeladen und bleibt " "synchronisiert." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Ordner herunterladen?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Herunterladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Der Ordner konnte nicht pausiert werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Der Ordner konnte nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Ordner pausiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Ordner fortgesetzt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Synchronisieren fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Geteilter Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Wird auf „Nur online“ umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Wird auf synchronisiert umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "pausiert" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "nicht verfügbar" @@ -5506,10 +5572,6 @@ msgstr "Version speichern" msgid "Couldn't save that version" msgstr "Diese Version konnte nicht gespeichert werden" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "Dieser Ort ist keine lokale Datei." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Version gespeichert" diff --git a/po/en_GB.po b/po/en_GB.po index 6940d11..1096de6 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -267,9 +267,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -473,8 +473,8 @@ msgstr "Nothing in the recent log fits this filter." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -510,8 +510,8 @@ msgstr "View Options" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1013,7 +1013,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Differs from {name}" @@ -1200,11 +1200,12 @@ msgstr "Couldn't load albums" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2141,7 +2142,7 @@ msgid "Add Folder to Sync" msgstr "Add Folder to Sync" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Syncing folder…" @@ -2494,19 +2495,19 @@ msgstr[1] "Move {n} photos to Trash" msgid "Keep" msgstr "Keep" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Add Folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "Back a local folder up to this computer's Proton Drive device" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Conflicts" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2514,7 +2515,7 @@ msgstr "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2522,133 +2523,133 @@ msgstr "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "About Sync Modes" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Folders" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Overview" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Folders" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "History" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Review" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "{n} change couldn't be uploaded" msgstr[1] "{n} changes couldn't be uploaded" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} file was changed in two places at once" msgstr[1] "{n} files were changed in two places at once" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Some files need your attention" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Checking…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Pause for 1 Hour" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Pause for 8 Hours" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Pause for 24 Hours" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "Stop uploading until you resume. Files still open as usual." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Pause for a while" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Resume" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "Upload everything that waited while sync was paused" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Couldn't pause sync" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Couldn't resume sync" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Sync resumed" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Sync paused until you resume" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Sync paused" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Retry All" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Try every failed change again now" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "Waiting to Upload" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "Changes made on this computer that are not on Proton Drive yet." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2663,89 +2664,152 @@ msgstr[1] "" "Changes made on this computer that are not on Proton Drive yet. Showing the " "first {shown} of {n}." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Upload changes" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Upload new file" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Create folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Rename or move" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Move to trash" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Change" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "waiting for the app writing it to finish" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "retrying {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "waiting for sync to resume" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "up next" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "Failed {n} time: {error}" msgstr[1] "Failed {n} times: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Retry now" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Export" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Save a copy of this file's content elsewhere" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "Proton Drive refused this change. It stays queued and is tried again." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Export File" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Couldn't export the file" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "That location isn't a local file." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "File exported" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Retrying now…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Couldn't retry" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, changed {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "The original is gone; only this copy is left" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Same content as the original" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2762,7 +2826,7 @@ msgstr "" "\n" "Whatever is not kept goes to Trash, where it can be restored." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2773,110 +2837,110 @@ msgstr "" "\n" "Keep the copy to give it the original name back." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Resolve Conflict" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Name for the copy, if keeping both" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Keep Original" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Keep Both" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Keep Copy" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Couldn't resolve the conflict" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Reading this computer's Proton Drive locations." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Unavailable" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "No folders yet" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "The Proton Drive service hasn't reported its folder yet." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Read-only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Open in Files" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Change Location…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Choose whether this folder keeps a full copy on this computer" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Keep every file on this computer and in Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "Keep the files in Proton Drive and download each one when you open it." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Online only" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Synced" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Sync Now" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Resume Syncing" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Pause Syncing" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Stop Syncing…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Make Folder Online Only?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2885,11 +2949,11 @@ msgstr "" "Files in {path} will be removed from this computer and kept in Proton Drive " "only. Each file downloads again when you open it." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Make Online Only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2898,59 +2962,59 @@ msgstr "" "Every file in {path} will download to this computer and stay synced. {free} " "is free on this disk." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "Every file in {path} will download to this computer and stay synced." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Download Folder?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Download" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Couldn't pause the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Couldn't resume the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Folder paused" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Folder resumed" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Couldn't sync" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Shared folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Going online only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Switching to synced" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "paused" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "not available" @@ -5408,10 +5472,6 @@ msgstr "Save version" msgid "Couldn't save that version" msgstr "Couldn't save that version" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "That location isn't a local file." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Version saved" diff --git a/po/es.po b/po/es.po index 71ac3e5..f8b179e 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -269,9 +269,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -475,8 +475,8 @@ msgstr "Nada del registro reciente coincide con este filtro." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -513,8 +513,8 @@ msgstr "Opciones de vista" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1018,7 +1018,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Difiere de {name}" @@ -1205,11 +1205,12 @@ msgstr "No se pudieron cargar los álbumes" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2152,7 +2153,7 @@ msgid "Add Folder to Sync" msgstr "Añadir carpeta para sincronizar" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Sincronizando la carpeta…" @@ -2509,21 +2510,21 @@ msgstr[1] "Mover {n} fotos a la papelera" msgid "Keep" msgstr "Conservar" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Añadir carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" "Hacer copia de seguridad de una carpeta local en el dispositivo de Proton " "Drive de este equipo" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Conflictos" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2531,7 +2532,7 @@ msgstr "" "Archivos modificados en dos lugares a la vez. Se conservaron ambas " "versiones; elija cuál se queda." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2539,136 +2540,136 @@ msgstr "" "Las carpetas sincronizadas guardan una copia completa en este equipo. Las " "carpetas solo en línea descargan cada archivo al abrirlo." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "Acerca de los modos de sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Carpetas" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Resumen" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Carpetas" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Historial" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Revisar" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "No se pudo subir {n} cambio" msgstr[1] "No se pudieron subir {n} cambios" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} archivo se modificó en dos lugares a la vez" msgstr[1] "{n} archivos se modificaron en dos lugares a la vez" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Algunos archivos requieren su atención" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Comprobando…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Pausar durante 1 hora" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Pausar durante 8 horas" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Pausar durante 24 horas" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Pausar" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Dejar de subir hasta que reanude. Los archivos se siguen abriendo como " "siempre." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Pausar durante un tiempo" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Reanudar" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "" "Subir todo lo que quedó en espera mientras la sincronización estaba en pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "No se pudo pausar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "No se pudo reanudar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Sincronización reanudada" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Sincronización en pausa hasta que la reanude" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Sincronización en pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Reintentar todo" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Volver a intentar ahora todos los cambios fallidos" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "En espera de subida" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "Cambios hechos en este equipo que todavía no están en Proton Drive." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2683,89 +2684,153 @@ msgstr[1] "" "Cambios hechos en este equipo que todavía no están en Proton Drive. Se " "muestran los primeros {shown} de {n}." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Subir cambios" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Subir archivo nuevo" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Crear carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Renombrar o mover" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Mover a la papelera" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Cambio" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "esperando a que termine la aplicación que lo escribe" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "reintento a las {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "esperando a que se reanude la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "el siguiente" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "Falló {n} vez: {error}" msgstr[1] "Falló {n} veces: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Reintentar ahora" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Exportar" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Guardar una copia del contenido de este archivo en otro lugar" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Su almacenamiento de Proton Drive está lleno. Libere espacio o mejore su " +"plan, y este cambio se subirá por sí solo." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Ya no puede modificar esto en Proton Drive. Pida al propietario permiso de " +"edición o exporte el archivo para conservar su versión." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"La carpeta a la que pertenece este cambio ya no está en Proton Drive. " +"Exporte el archivo para conservar su versión." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"Se alcanzó el límite de Proton Drive de elementos por carpeta o de " +"profundidad de carpetas. Haga espacio en la carpeta y vuelva a intentarlo." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"Proton Drive rechazó este cambio. Sigue en la cola y se volverá a intentar." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Exportar archivo" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "No se pudo exportar el archivo" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "Esa ubicación no es un archivo local." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "Archivo exportado" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Reintentando ahora…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "No se pudo reintentar" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, modificado {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "El original ya no existe; solo queda esta copia" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Mismo contenido que el original" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2782,7 +2847,7 @@ msgstr "" "\n" "Lo que no se conserve va a la papelera, desde donde se puede restaurar." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2793,111 +2858,111 @@ msgstr "" "\n" "Conserve la copia para devolverle el nombre original." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Resolver conflicto" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Nombre de la copia, si se conservan ambos" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Conservar original" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Conservar ambos" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Conservar copia" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "No se pudo resolver el conflicto" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Leyendo las ubicaciones de Proton Drive de este equipo." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "No disponible" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Todavía no hay carpetas" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "El servicio de Proton Drive todavía no ha informado de su carpeta." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Solo lectura" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Abrir en Archivos" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Cambiar ubicación…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Elegir si esta carpeta guarda una copia completa en este equipo" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Conservar todos los archivos en este equipo y en Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Conservar los archivos en Proton Drive y descargar cada uno al abrirlo." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Solo en línea" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Sincronizar ahora" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Reanudar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Pausar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Dejar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "¿Hacer la carpeta solo en línea?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2906,11 +2971,11 @@ msgstr "" "Los archivos de {path} se quitarán de este equipo y se conservarán solo en " "Proton Drive. Cada archivo se vuelve a descargar al abrirlo." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Hacer solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2919,61 +2984,61 @@ msgstr "" "Todos los archivos de {path} se descargarán en este equipo y se mantendrán " "sincronizados. Hay {free} libres en este disco." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Todos los archivos de {path} se descargarán en este equipo y se mantendrán " "sincronizados." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "¿Descargar la carpeta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Descargar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "No se pudo pausar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "No se pudo reanudar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Carpeta en pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Carpeta reanudada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "No se pudo sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Carpeta compartida" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Pasando a solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Pasando a sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "en pausa" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "no disponible" @@ -5472,10 +5537,6 @@ msgstr "Guardar versión" msgid "Couldn't save that version" msgstr "No se pudo guardar esa versión" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "Esa ubicación no es un archivo local." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Versión guardada" diff --git a/po/fr.po b/po/fr.po index 3473048..4219a5e 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y à %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -271,9 +271,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -477,8 +477,8 @@ msgstr "Rien dans le journal récent ne correspond à ce filtre." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -516,8 +516,8 @@ msgstr "Options d’affichage" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1025,7 +1025,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Diffère de {name}" @@ -1212,11 +1212,12 @@ msgstr "Impossible de charger les albums" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2161,7 +2162,7 @@ msgid "Add Folder to Sync" msgstr "Ajouter un dossier à synchroniser" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Synchronisation du dossier…" @@ -2523,20 +2524,20 @@ msgstr[1] "Mettre {n} photos à la corbeille" msgid "Keep" msgstr "Garder" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Ajouter un dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" "Sauvegarder un dossier local sur l’appareil Proton Drive de cet ordinateur" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Conflits" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2544,7 +2545,7 @@ msgstr "" "Fichiers modifiés à deux endroits en même temps. Les deux versions ont été " "conservées ; choisissez celle qui reste." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2552,138 +2553,138 @@ msgstr "" "Les dossiers synchronisés gardent une copie complète sur cet ordinateur. Les " "dossiers en ligne uniquement récupèrent chaque fichier à son ouverture." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "À propos des modes de synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Dossiers" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Aperçu" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Dossiers" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Historique" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Examiner" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "{n} modification n’a pas pu être téléversée" msgstr[1] "{n} modifications n’ont pas pu être téléversées" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} fichier a été modifié à deux endroits à la fois" msgstr[1] "{n} fichiers ont été modifiés à deux endroits à la fois" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Certains fichiers nécessitent votre attention" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Vérification…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Mettre en pause pendant 1 heure" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Mettre en pause pendant 8 heures" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Mettre en pause pendant 24 heures" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Mettre en pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Arrêter les téléversements jusqu’à la reprise. Les fichiers s’ouvrent " "toujours normalement." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Mettre en pause un moment" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Reprendre" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "" "Téléverser tout ce qui attendait pendant la pause de la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Impossible de mettre en pause la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Impossible de reprendre la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Synchronisation reprise" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Synchronisation en pause jusqu’à la reprise" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Synchronisation en pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Tout réessayer" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Réessayer maintenant toutes les modifications ayant échoué" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "En attente de téléversement" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "" "Modifications effectuées sur cet ordinateur qui ne sont pas encore sur " "Proton Drive." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2698,89 +2699,156 @@ msgstr[1] "" "Modifications effectuées sur cet ordinateur qui ne sont pas encore sur " "Proton Drive. Affichage des {shown} premières sur {n}." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Téléverser les modifications" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Téléverser le nouveau fichier" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Créer le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Renommer ou déplacer" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Mettre à la corbeille" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Modification" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "en attente de la fin de l’écriture par l’application" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "nouvelle tentative à {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "en attente de la reprise de la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "prochain dans la file" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "{n} échec : {error}" msgstr[1] "{n} échecs : {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Réessayer maintenant" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Exporter" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Enregistrer ailleurs une copie du contenu de ce fichier" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Votre stockage Proton Drive est plein. Libérez de l’espace ou passez à une " +"offre supérieure, et cette modification sera téléversée d’elle-même." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Vous ne pouvez plus modifier cet élément sur Proton Drive. Demandez au " +"propriétaire l’accès en écriture, ou exportez le fichier pour garder votre " +"version." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"Le dossier auquel appartient cette modification n’existe plus sur Proton " +"Drive. Exportez le fichier pour garder votre version." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"La limite de Proton Drive sur le nombre d’éléments d’un dossier ou sur la " +"profondeur des dossiers est atteinte. Faites de la place dans le dossier, " +"puis réessayez." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"Proton Drive a refusé cette modification. Elle reste en file d’attente et " +"sera retentée." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Exporter le fichier" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Impossible d’exporter le fichier" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "Cet emplacement n’est pas un fichier local." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "Fichier exporté" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Nouvelle tentative…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Impossible de réessayer" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, modification : {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "L’original a disparu ; seule cette copie subsiste" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Même contenu que l’original" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2798,7 +2866,7 @@ msgstr "" "Ce qui n’est pas conservé est placé dans la corbeille, d’où il peut être " "restauré." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2809,111 +2877,111 @@ msgstr "" "\n" "Conservez la copie pour lui redonner le nom d’origine." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Résoudre le conflit" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Nom de la copie, si les deux sont conservés" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Conserver l’original" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Conserver les deux" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Conserver la copie" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Impossible de résoudre le conflit" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Lecture des emplacements Proton Drive de cet ordinateur." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Indisponible" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Aucun dossier pour l’instant" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "Le service Proton Drive n’a pas encore signalé son dossier." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Lecture seule" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Ouvrir dans Fichiers" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Changer l’emplacement…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Choisir si ce dossier garde une copie complète sur cet ordinateur" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Conserver chaque fichier sur cet ordinateur et dans Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Garder les fichiers dans Proton Drive et télécharger chacun à son ouverture." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "En ligne uniquement" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Synchronisé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Synchroniser maintenant" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Reprendre la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Mettre en pause la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Arrêter la synchronisation…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Garder le dossier en ligne uniquement ?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2923,11 +2991,11 @@ msgstr "" "uniquement dans Proton Drive. Chaque fichier sera à nouveau téléchargé à son " "ouverture." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Garder en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2936,61 +3004,61 @@ msgstr "" "Chaque fichier de {path} sera téléchargé sur cet ordinateur et restera " "synchronisé. {free} sont libres sur ce disque." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Chaque fichier de {path} sera téléchargé sur cet ordinateur et restera " "synchronisé." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Télécharger le dossier ?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Télécharger" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Impossible de mettre en pause le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Impossible de reprendre le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Dossier en pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Dossier repris" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Impossible de synchroniser" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Dossier partagé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Passage en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Passage en mode synchronisé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "en pause" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "non disponible" @@ -5504,10 +5572,6 @@ msgstr "Enregistrer la version" msgid "Couldn't save that version" msgstr "Impossible d’enregistrer cette version" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "Cet emplacement n’est pas un fichier local." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Version enregistrée" diff --git a/po/it.po b/po/it.po index eb0d6c5..7ee1b56 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -267,9 +267,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -473,8 +473,8 @@ msgstr "Nessuna voce del registro recente corrisponde a questo filtro." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -512,8 +512,8 @@ msgstr "Opzioni di visualizzazione" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1019,7 +1019,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Diverso da {name}" @@ -1206,11 +1206,12 @@ msgstr "Impossibile caricare gli album" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2155,7 +2156,7 @@ msgid "Add Folder to Sync" msgstr "Aggiungi cartella da sincronizzare" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Sincronizzazione della cartella…" @@ -2520,21 +2521,21 @@ msgstr[1] "Sposta {n} foto nel cestino" msgid "Keep" msgstr "Tieni" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Aggiungi cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" "Esegui il backup di una cartella locale sul dispositivo Proton Drive di " "questo computer" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Conflitti" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2542,7 +2543,7 @@ msgstr "" "File modificati in due posti contemporaneamente. Entrambe le versioni sono " "state conservate: scegli quale mantenere." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2550,137 +2551,137 @@ msgstr "" "Le cartelle sincronizzate conservano una copia completa su questo computer. " "Le cartelle solo online scaricano ogni file quando lo apri." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "Informazioni sulle modalità di sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Cartelle" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Panoramica" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Cartelle" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Cronologia" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Esamina" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "Impossibile caricare {n} modifica" msgstr[1] "Impossibile caricare {n} modifiche" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} file è stato modificato in due posti contemporaneamente" msgstr[1] "{n} file sono stati modificati in due posti contemporaneamente" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Alcuni file richiedono la tua attenzione" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Controllo…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Pausa per 1 ora" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Pausa per 8 ore" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Pausa per 24 ore" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Metti in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Interrompe i caricamenti finché non riprendi. I file si aprono comunque come " "di consueto." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Metti in pausa per un po'" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Riprendi" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "" "Carica tutto ciò che era in attesa mentre la sincronizzazione era in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Impossibile mettere in pausa la sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Impossibile riprendere la sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Sincronizzazione ripresa" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Sincronizzazione in pausa finché non riprendi" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Sincronizzazione in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Riprova tutto" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Riprova ora tutte le modifiche non riuscite" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "In attesa di caricamento" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "" "Modifiche fatte su questo computer che non sono ancora su Proton Drive." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2695,89 +2696,154 @@ msgstr[1] "" "Modifiche fatte su questo computer che non sono ancora su Proton Drive. " "Visualizzate le prime {shown} di {n}." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Carica modifiche" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Carica nuovo file" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Crea cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Rinomina o sposta" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Sposta nel cestino" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Modifica" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "in attesa che l'app che lo scrive finisca" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "nuovo tentativo alle {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "in attesa della ripresa della sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "il prossimo" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "Non riuscito {n} volta: {error}" msgstr[1] "Non riuscito {n} volte: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Riprova ora" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Esporta" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Salva altrove una copia del contenuto di questo file" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Lo spazio di Proton Drive è pieno. Libera spazio o passa a un piano " +"superiore, e questa modifica verrà caricata da sola." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Non puoi più modificare questo elemento su Proton Drive. Chiedi al " +"proprietario l'accesso in modifica, o esporta il file per tenere la tua " +"versione." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"La cartella a cui appartiene questa modifica non è più su Proton Drive. " +"Esporta il file per tenere la tua versione." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"È stato raggiunto il limite di Proton Drive sugli elementi in una cartella o " +"sulla profondità delle cartelle. Fai spazio nella cartella, poi riprova." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"Proton Drive ha rifiutato questa modifica. Resta in coda e verrà ritentata." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Esporta file" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Impossibile esportare il file" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "Quella posizione non è un file locale." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "File esportato" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Nuovo tentativo in corso…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Impossibile riprovare" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, modificato {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "L'originale non esiste più; rimane solo questa copia" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Stesso contenuto dell'originale" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2794,7 +2860,7 @@ msgstr "" "\n" "Ciò che non viene mantenuto va nel cestino, da cui può essere ripristinato." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2805,111 +2871,111 @@ msgstr "" "\n" "Mantieni la copia per restituirle il nome originale." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Risolvi conflitto" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Nome per la copia, se si mantengono entrambi" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Mantieni originale" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Mantieni entrambi" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Mantieni copia" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Impossibile risolvere il conflitto" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Lettura delle posizioni di Proton Drive di questo computer." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Non disponibile" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Ancora nessuna cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "Il servizio di Proton Drive non ha ancora comunicato la sua cartella." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Sola lettura" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Apri in File" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Cambia posizione…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "" "Scegli se questa cartella conserva una copia completa su questo computer" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Conserva ogni file su questo computer e in Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "Conserva i file in Proton Drive e scarica ciascuno quando lo apri." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Solo online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Sincronizzata" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Sincronizza ora" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Riprendi sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Metti in pausa sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Interrompi sincronizzazione…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Rendere la cartella solo online?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2918,11 +2984,11 @@ msgstr "" "I file in {path} verranno rimossi da questo computer e mantenuti solo in " "Proton Drive. Ogni file viene scaricato di nuovo quando lo apri." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Rendi solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2931,61 +2997,61 @@ msgstr "" "Ogni file in {path} verrà scaricato su questo computer e resterà " "sincronizzato. Su questo disco sono liberi {free}." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Ogni file in {path} verrà scaricato su questo computer e resterà " "sincronizzato." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Scaricare la cartella?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Scarica" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Impossibile mettere in pausa la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Impossibile riprendere la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Cartella in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Cartella ripresa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Impossibile sincronizzare" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Cartella condivisa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Passaggio a solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Passaggio a sincronizzata" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "in pausa" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "non disponibile" @@ -5485,10 +5551,6 @@ msgstr "Salva versione" msgid "Couldn't save that version" msgstr "Impossibile salvare la versione" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "Quella posizione non è un file locale." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Versione salvata" diff --git a/po/nl.po b/po/nl.po index 9cbadff..a8e94de 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -268,9 +268,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -474,8 +474,8 @@ msgstr "Niets in het recente logboek past bij dit filter." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -513,8 +513,8 @@ msgstr "Weergaveopties" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1017,7 +1017,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Verschilt van {name}" @@ -1204,11 +1204,12 @@ msgstr "Kon albums niet laden" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2151,7 +2152,7 @@ msgid "Add Folder to Sync" msgstr "Map toevoegen aan synchronisatie" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Map synchroniseren…" @@ -2514,21 +2515,21 @@ msgstr[1] "{n} foto's naar prullenbak verplaatsen" msgid "Keep" msgstr "Houden" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Map toevoegen" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" "Een back-up van een lokale map maken naar het Proton Drive-apparaat van deze " "computer" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Conflicten" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2536,7 +2537,7 @@ msgstr "" "Bestanden zijn op twee plaatsen tegelijk gewijzigd. Beide versies zijn " "bewaard; kies welke blijft." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2544,135 +2545,135 @@ msgstr "" "Gesynchroniseerde mappen houden een volledige kopie op deze computer. Mappen " "die alleen online zijn, halen elk bestand op zodra je het opent." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "Over synchronisatiemodi" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Mappen" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Overzicht" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Mappen" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Geschiedenis" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Bekijken" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "{n} wijziging kon niet worden geüpload" msgstr[1] "{n} wijzigingen konden niet worden geüpload" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} bestand is op twee plaatsen tegelijk gewijzigd" msgstr[1] "{n} bestanden zijn op twee plaatsen tegelijk gewijzigd" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Sommige bestanden hebben je aandacht nodig" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Controleren…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "1 uur pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "8 uur pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "24 uur pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Stop met uploaden totdat je hervat. Bestanden openen gewoon zoals altijd." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Een tijdje pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "" "Alles uploaden wat heeft gewacht terwijl de synchronisatie gepauzeerd was" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Kon synchronisatie niet pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Kon synchronisatie niet hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Synchronisatie hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Synchronisatie gepauzeerd totdat je hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Synchronisatie gepauzeerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Alles opnieuw proberen" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Alle mislukte wijzigingen nu opnieuw proberen" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "Wacht op upload" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "Wijzigingen op deze computer die nog niet in Proton Drive staan." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2687,89 +2688,154 @@ msgstr[1] "" "Wijzigingen op deze computer die nog niet in Proton Drive staan. De eerste " "{shown} van {n} worden getoond." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Wijzigingen uploaden" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Nieuw bestand uploaden" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Map aanmaken" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Hernoemen of verplaatsen" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Naar prullenbak verplaatsen" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Wijziging" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "wacht tot de app die het schrijft klaar is" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "nieuwe poging om {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "wacht tot de synchronisatie wordt hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "volgende" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "{n} keer mislukt: {error}" msgstr[1] "{n} keer mislukt: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Nu opnieuw proberen" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Exporteren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Een kopie van de inhoud van dit bestand ergens anders opslaan" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Je Proton Drive-opslag is vol. Maak ruimte vrij of stap over op een groter " +"abonnement, dan wordt deze wijziging vanzelf geüpload." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Je kunt dit op Proton Drive niet meer wijzigen. Vraag de eigenaar om " +"bewerkrechten, of exporteer het bestand om je versie te bewaren." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"De map waar deze wijziging bij hoort, staat niet meer op Proton Drive. " +"Exporteer het bestand om je versie te bewaren." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"De limiet van Proton Drive voor items in een map of voor de diepte van " +"mappen is bereikt. Maak ruimte in de map en probeer het dan opnieuw." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"Proton Drive heeft deze wijziging geweigerd. Ze blijft in de wachtrij en " +"wordt opnieuw geprobeerd." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Bestand exporteren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Kon het bestand niet exporteren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "Die locatie is geen lokaal bestand." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "Bestand geëxporteerd" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Nu opnieuw proberen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Kon niet opnieuw proberen" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, gewijzigd {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "Het origineel is weg; alleen deze kopie is over" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Zelfde inhoud als het origineel" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2787,7 +2853,7 @@ msgstr "" "Wat niet wordt behouden, gaat naar de prullenbak, waar het kan worden " "teruggezet." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2798,112 +2864,112 @@ msgstr "" "\n" "Behoud de kopie om haar de oorspronkelijke naam terug te geven." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Conflict oplossen" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Naam voor de kopie, als je beide behoudt" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Origineel behouden" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Beide behouden" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Kopie behouden" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Kon het conflict niet oplossen" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "De Proton Drive-locaties van deze computer worden gelezen." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Niet beschikbaar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Nog geen mappen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "De Proton Drive-service heeft zijn map nog niet gemeld." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Alleen-lezen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Openen in Bestanden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Locatie wijzigen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Kiezen of deze map een volledige kopie op deze computer houdt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Elk bestand op deze computer en in Proton Drive bewaren." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "De bestanden in Proton Drive bewaren en elk bestand downloaden zodra je het " "opent." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Alleen online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Nu synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Synchronisatie hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Synchronisatie pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Synchroniseren stoppen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Map alleen online maken?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2912,11 +2978,11 @@ msgstr "" "Bestanden in {path} worden van deze computer verwijderd en alleen in Proton " "Drive bewaard. Elk bestand wordt opnieuw gedownload wanneer je het opent." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Alleen online maken" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2925,61 +2991,61 @@ msgstr "" "Elk bestand in {path} wordt naar deze computer gedownload en blijft " "gesynchroniseerd. Er is {free} vrij op deze schijf." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Elk bestand in {path} wordt naar deze computer gedownload en blijft " "gesynchroniseerd." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Map downloaden?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Downloaden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Kon de map niet pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Kon de map niet hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Map gepauzeerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Map hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Kon niet synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Gedeelde map" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Wordt alleen online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Overschakelen naar gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "gepauzeerd" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "niet beschikbaar" @@ -5478,10 +5544,6 @@ msgstr "Versie opslaan" msgid "Couldn't save that version" msgstr "Kon die versie niet opslaan" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "Die locatie is geen lokaal bestand." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Versie opgeslagen" diff --git a/po/pdfs.pot b/po/pdfs.pot index 1303644..903d63e 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: proton-drive-linux 2.6.2\n" +"Project-Id-Version: proton-drive-linux 2.10.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -67,7 +67,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -244,9 +244,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -450,8 +450,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -485,8 +485,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -985,7 +985,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "" @@ -1172,11 +1172,12 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2113,7 +2114,7 @@ msgid "Add Folder to Sync" msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "" @@ -2435,157 +2436,157 @@ msgstr[1] "" msgid "Keep" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "" #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2596,89 +2597,144 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2689,7 +2745,7 @@ msgid "" "Whatever is not kept goes to Trash, where it can be restored." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2697,180 +2753,180 @@ msgid "" "Keep the copy to give it the original name back." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " "only. Each file downloads again when you open it." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " "is free on this disk." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "" @@ -5281,10 +5337,6 @@ msgstr "" msgid "Couldn't save that version" msgstr "" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "" - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "" diff --git a/po/pl.po b/po/pl.po index bfcac47..46a6dc7 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -66,7 +66,7 @@ msgstr "%A, %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -272,9 +272,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -478,8 +478,8 @@ msgstr "Nic w ostatnim dzienniku nie pasuje do tego filtru." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -520,8 +520,8 @@ msgstr "Opcje widoku" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1036,7 +1036,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Różni się od {name}" @@ -1237,11 +1237,12 @@ msgstr "Nie można wczytać albumów" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2207,7 +2208,7 @@ msgid "Add Folder to Sync" msgstr "Dodaj katalog do synchronizacji" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Synchronizowanie katalogu…" @@ -2572,20 +2573,20 @@ msgstr[2] "Przenieś {n} zdjęć do kosza" msgid "Keep" msgstr "Zachowaj" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Dodaj katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" "Kopia zapasowa lokalnego katalogu w urządzeniu tego komputera w Proton Drive" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Konflikty" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2593,7 +2594,7 @@ msgstr "" "Pliki zmienione w dwóch miejscach jednocześnie. Zachowano obie wersje; " "należy wybrać, która pozostanie." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2601,36 +2602,36 @@ msgstr "" "Katalogi synchronizowane przechowują pełną kopię na tym komputerze. Katalogi " "tylko online pobierają każdy plik przy jego otwarciu." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "Informacje o trybach synchronizacji" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Katalogi" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Przegląd" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Katalogi" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Historia" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Przejrzyj" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" @@ -2638,7 +2639,7 @@ msgstr[0] "Nie można wysłać zmian: {n}" msgstr[1] "Nie można wysłać zmian: {n}" msgstr[2] "Nie można wysłać zmian: {n}" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" @@ -2646,93 +2647,93 @@ msgstr[0] "Pliki zmienione w dwóch miejscach jednocześnie: {n}" msgstr[1] "Pliki zmienione w dwóch miejscach jednocześnie: {n}" msgstr[2] "Pliki zmienione w dwóch miejscach jednocześnie: {n}" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Niektóre pliki wymagają uwagi" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Sprawdzanie…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Wstrzymaj na 1 godzinę" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Wstrzymaj na 8 godzin" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Wstrzymaj na 24 godziny" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Wstrzymaj" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Wstrzymuje wysyłanie do czasu wznowienia. Pliki nadal otwierają się " "normalnie." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Wstrzymaj na jakiś czas" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Wznów" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "Wysyła wszystko, co czekało podczas wstrzymania synchronizacji" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Nie można wstrzymać synchronizacji" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Nie można wznowić synchronizacji" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Wznowiono synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Wstrzymano synchronizację do czasu wznowienia" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Wstrzymano synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Ponów wszystko" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Ponawia teraz wszystkie nieudane zmiany" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "Oczekujące na wysłanie" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "" "Zmiany wprowadzone na tym komputerze, których jeszcze nie ma w Proton Drive." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2750,56 +2751,56 @@ msgstr[2] "" "Zmiany wprowadzone na tym komputerze, których jeszcze nie ma w Proton Drive. " "Wyświetlanie pierwszych {shown} z {n}." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Wysłanie zmian" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Wysłanie nowego pliku" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Utworzenie katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Zmiana nazwy lub przeniesienie" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Przeniesienie do kosza" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Zmiana" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "oczekiwanie, aż zapisujący program skończy" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "ponowienie {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "oczekiwanie na wznowienie synchronizacji" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "następne w kolejce" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" @@ -2807,33 +2808,97 @@ msgstr[0] "Niepowodzenie {n} raz: {error}" msgstr[1] "Niepowodzenie {n} razy: {error}" msgstr[2] "Niepowodzenie {n} razy: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Ponów teraz" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Eksportuj" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Zapisz kopię zawartości tego pliku w innym miejscu" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Miejsce w Proton Drive jest pełne. Zwolnij miejsce lub wybierz większy plan, " +"a ta zmiana zostanie wysłana sama." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Nie możesz już zmieniać tego w Proton Drive. Poproś właściciela o prawo do " +"edycji lub wyeksportuj plik, aby zachować swoją wersję." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"Katalogu, do którego należy ta zmiana, nie ma już w Proton Drive. " +"Wyeksportuj plik, aby zachować swoją wersję." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"Osiągnięto limit Proton Drive dotyczący liczby elementów w katalogu lub " +"głębokości katalogów. Zrób miejsce w katalogu, a potem ponów." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"Proton Drive odrzucił tę zmianę. Pozostaje w kolejce i zostanie ponowiona." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Eksport pliku" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Nie można wyeksportować pliku" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "To położenie nie jest lokalnym plikiem." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "Wyeksportowano plik" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Ponawianie…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Nie można ponowić" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, zmieniono {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "Oryginał już nie istnieje; pozostała tylko ta kopia" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Ta sama zawartość co oryginał" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2850,7 +2915,7 @@ msgstr "" "\n" "To, co nie zostanie zachowane, trafi do kosza, skąd można to przywrócić." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2861,110 +2926,110 @@ msgstr "" "\n" "Zachowanie kopii przywróci jej oryginalną nazwę." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Rozwiąż konflikt" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Nazwa kopii, jeśli zachowane zostaną obie" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Zachowaj oryginał" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Zachowaj oba" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Zachowaj kopię" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Nie można rozwiązać konfliktu" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Odczytywanie położeń Proton Drive tego komputera." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Niedostępne" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Brak katalogów" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "Usługa Proton Drive nie zgłosiła jeszcze swojego katalogu." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Tylko do odczytu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Otwórz w Plikach" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Zmień położenie…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Wybierz, czy ten katalog przechowuje pełną kopię na tym komputerze" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Przechowuj każdy plik na tym komputerze i w Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "Przechowuj pliki w Proton Drive i pobieraj każdy przy jego otwarciu." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Tylko online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Synchronizowany" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Synchronizuj teraz" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Wznów synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Wstrzymaj synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Zatrzymaj synchronizację…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Oznaczyć katalog jako tylko online?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2973,11 +3038,11 @@ msgstr "" "Pliki w {path} zostaną usunięte z tego komputera i będą przechowywane tylko " "w Proton Drive. Każdy plik zostanie ponownie pobrany przy otwarciu." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Oznacz jako tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2986,61 +3051,61 @@ msgstr "" "Każdy plik w {path} zostanie pobrany na ten komputer i pozostanie " "synchronizowany. Wolne miejsce na tym dysku: {free}." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Każdy plik w {path} zostanie pobrany na ten komputer i pozostanie " "synchronizowany." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Pobrać katalog?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Pobierz" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Nie można wstrzymać katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Nie można wznowić katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Wstrzymano katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Wznowiono katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Nie można zsynchronizować" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Udostępniony katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Przechodzenie w tryb tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Przełączanie na synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "wstrzymany" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "niedostępne" @@ -5568,10 +5633,6 @@ msgstr "Zapisanie wersji" msgid "Couldn't save that version" msgstr "Nie można zapisać tej wersji" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "To położenie nie jest lokalnym plikiem." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Zapisano wersję" diff --git a/po/pt_BR.po b/po/pt_BR.po index dc3ae8e..66c4163 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-09-29 00:18+0200\n" +"POT-Creation-Date: 2026-10-04 03:16+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1217 #: crates/pdfs-gui/src/app/pages/browser.rs:2090 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 -#: crates/pdfs-gui/src/app/pages/locations.rs:1471 +#: crates/pdfs-gui/src/app/pages/locations.rs:1554 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -267,9 +267,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:979 #: crates/pdfs-gui/src/app/pages/devices.rs:1031 #: crates/pdfs-gui/src/app/pages/devices.rs:1075 -#: crates/pdfs-gui/src/app/pages/locations.rs:860 -#: crates/pdfs-gui/src/app/pages/locations.rs:1335 -#: crates/pdfs-gui/src/app/pages/locations.rs:1385 +#: crates/pdfs-gui/src/app/pages/locations.rs:943 +#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1468 #: crates/pdfs-gui/src/app/pages/login.rs:312 #: crates/pdfs-gui/src/app/pages/photos.rs:2055 #: crates/pdfs-gui/src/app/pages/shared.rs:946 @@ -473,8 +473,8 @@ msgstr "Nada no registro recente corresponde a este filtro." #: crates/pdfs-gui/src/app/pages/activity.rs:186 #: crates/pdfs-gui/src/app/pages/browser.rs:281 #: crates/pdfs-gui/src/app/pages/devices.rs:114 -#: crates/pdfs-gui/src/app/pages/locations.rs:183 -#: crates/pdfs-gui/src/app/pages/locations.rs:680 +#: crates/pdfs-gui/src/app/pages/locations.rs:184 +#: crates/pdfs-gui/src/app/pages/locations.rs:685 #: crates/pdfs-gui/src/app/pages/photos.rs:465 #: crates/pdfs-gui/src/app/pages/shared.rs:183 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94 @@ -512,8 +512,8 @@ msgstr "Opções de exibição" #: crates/pdfs-gui/src/app/pages/browser.rs:2635 #: crates/pdfs-gui/src/app/pages/browser.rs:2639 #: crates/pdfs-gui/src/app/pages/devices.rs:325 -#: crates/pdfs-gui/src/app/pages/locations.rs:191 -#: crates/pdfs-gui/src/app/pages/locations.rs:970 +#: crates/pdfs-gui/src/app/pages/locations.rs:192 +#: crates/pdfs-gui/src/app/pages/locations.rs:1053 #: crates/pdfs-gui/src/app/pages/shared.rs:422 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:347 #: crates/pdfs-gui/src/app/pages/trash.rs:284 @@ -1016,7 +1016,7 @@ msgstr "" #. Translators: {name} is the file the conflicting copy was made from. #: crates/pdfs-gui/src/app/pages/activity_text.rs:346 -#: crates/pdfs-gui/src/app/pages/locations.rs:795 +#: crates/pdfs-gui/src/app/pages/locations.rs:878 #, rust-format msgid "Differs from {name}" msgstr "Difere de {name}" @@ -1203,11 +1203,12 @@ msgstr "Não foi possível carregar os álbuns" #: crates/pdfs-gui/src/app/pages/devices.rs:884 #: crates/pdfs-gui/src/app/pages/devices.rs:1120 #: crates/pdfs-gui/src/app/pages/duplicates.rs:220 -#: crates/pdfs-gui/src/app/pages/locations.rs:535 -#: crates/pdfs-gui/src/app/pages/locations.rs:710 -#: crates/pdfs-gui/src/app/pages/locations.rs:929 -#: crates/pdfs-gui/src/app/pages/locations.rs:1427 -#: crates/pdfs-gui/src/app/pages/locations.rs:1447 +#: crates/pdfs-gui/src/app/pages/locations.rs:536 +#: crates/pdfs-gui/src/app/pages/locations.rs:769 +#: crates/pdfs-gui/src/app/pages/locations.rs:793 +#: crates/pdfs-gui/src/app/pages/locations.rs:1012 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 +#: crates/pdfs-gui/src/app/pages/locations.rs:1530 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1425 #: crates/pdfs-gui/src/app/pages/photos.rs:1420 #: crates/pdfs-gui/src/app/pages/photos.rs:2140 @@ -2148,7 +2149,7 @@ msgid "Add Folder to Sync" msgstr "Adicionar pasta à sincronização" #: crates/pdfs-gui/src/app/pages/devices.rs:686 -#: crates/pdfs-gui/src/app/pages/locations.rs:1440 +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Syncing folder…" msgstr "Sincronizando pasta…" @@ -2508,20 +2509,20 @@ msgstr[1] "Mover {n} fotos para a lixeira" msgid "Keep" msgstr "Manter" -#: crates/pdfs-gui/src/app/pages/locations.rs:125 +#: crates/pdfs-gui/src/app/pages/locations.rs:126 msgid "Add Folder" msgstr "Adicionar pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:130 +#: crates/pdfs-gui/src/app/pages/locations.rs:131 msgid "Back a local folder up to this computer's Proton Drive device" msgstr "" "Fazer backup de uma pasta local no dispositivo Proton Drive deste computador" -#: crates/pdfs-gui/src/app/pages/locations.rs:140 +#: crates/pdfs-gui/src/app/pages/locations.rs:141 msgid "Conflicts" msgstr "Conflitos" -#: crates/pdfs-gui/src/app/pages/locations.rs:142 +#: crates/pdfs-gui/src/app/pages/locations.rs:143 msgid "" "Files changed in two places at once. Both versions were kept; choose which " "one stays." @@ -2529,7 +2530,7 @@ msgstr "" "Arquivos alterados em dois lugares ao mesmo tempo. Ambas as versões foram " "mantidas; escolha qual permanece." -#: crates/pdfs-gui/src/app/pages/locations.rs:158 +#: crates/pdfs-gui/src/app/pages/locations.rs:159 msgid "" "Synced folders keep a full copy on this computer. Online-only folders fetch " "each file when you open it." @@ -2537,136 +2538,136 @@ msgstr "" "Pastas sincronizadas mantêm uma cópia completa neste computador. Pastas " "somente online baixam cada arquivo quando você o abre." -#: crates/pdfs-gui/src/app/pages/locations.rs:169 +#: crates/pdfs-gui/src/app/pages/locations.rs:170 msgid "About Sync Modes" msgstr "Sobre os modos de sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:178 +#: crates/pdfs-gui/src/app/pages/locations.rs:179 #: crates/pdfs-gui/src/prompt.rs:65 msgid "Folders" msgstr "Pastas" -#: crates/pdfs-gui/src/app/pages/locations.rs:213 +#: crates/pdfs-gui/src/app/pages/locations.rs:214 msgctxt "sync view" msgid "Overview" msgstr "Visão geral" -#: crates/pdfs-gui/src/app/pages/locations.rs:219 +#: crates/pdfs-gui/src/app/pages/locations.rs:220 msgctxt "sync view" msgid "Folders" msgstr "Pastas" -#: crates/pdfs-gui/src/app/pages/locations.rs:225 +#: crates/pdfs-gui/src/app/pages/locations.rs:226 msgctxt "sync view" msgid "History" msgstr "Histórico" -#: crates/pdfs-gui/src/app/pages/locations.rs:232 +#: crates/pdfs-gui/src/app/pages/locations.rs:233 #: crates/pdfs-gui/src/app/pages/shared.rs:210 msgid "Review" msgstr "Revisar" -#: crates/pdfs-gui/src/app/pages/locations.rs:363 +#: crates/pdfs-gui/src/app/pages/locations.rs:364 #, rust-format msgid "{n} change couldn't be uploaded" msgid_plural "{n} changes couldn't be uploaded" msgstr[0] "Não foi possível enviar {n} alteração" msgstr[1] "Não foi possível enviar {n} alterações" -#: crates/pdfs-gui/src/app/pages/locations.rs:369 +#: crates/pdfs-gui/src/app/pages/locations.rs:370 #, rust-format msgid "{n} file was changed in two places at once" msgid_plural "{n} files were changed in two places at once" msgstr[0] "{n} arquivo foi alterado em dois lugares ao mesmo tempo" msgstr[1] "{n} arquivos foram alterados em dois lugares ao mesmo tempo" -#: crates/pdfs-gui/src/app/pages/locations.rs:374 +#: crates/pdfs-gui/src/app/pages/locations.rs:375 msgid "Some files need your attention" msgstr "Alguns arquivos precisam da sua atenção" -#: crates/pdfs-gui/src/app/pages/locations.rs:391 +#: crates/pdfs-gui/src/app/pages/locations.rs:392 msgid "Checking…" msgstr "Verificando…" -#: crates/pdfs-gui/src/app/pages/locations.rs:419 +#: crates/pdfs-gui/src/app/pages/locations.rs:420 msgid "Pause for 1 Hour" msgstr "Pausar por 1 hora" -#: crates/pdfs-gui/src/app/pages/locations.rs:423 +#: crates/pdfs-gui/src/app/pages/locations.rs:424 msgid "Pause for 8 Hours" msgstr "Pausar por 8 horas" -#: crates/pdfs-gui/src/app/pages/locations.rs:427 +#: crates/pdfs-gui/src/app/pages/locations.rs:428 msgid "Pause for 24 Hours" msgstr "Pausar por 24 horas" -#: crates/pdfs-gui/src/app/pages/locations.rs:431 -#: crates/pdfs-gui/src/app/pages/locations.rs:467 +#: crates/pdfs-gui/src/app/pages/locations.rs:432 +#: crates/pdfs-gui/src/app/pages/locations.rs:468 msgctxt "verb" msgid "Pause" msgstr "Pausar" -#: crates/pdfs-gui/src/app/pages/locations.rs:435 -#: crates/pdfs-gui/src/app/pages/locations.rs:472 +#: crates/pdfs-gui/src/app/pages/locations.rs:436 +#: crates/pdfs-gui/src/app/pages/locations.rs:473 msgid "Stop uploading until you resume. Files still open as usual." msgstr "" "Interrompe os envios até você retomar. Os arquivos continuam abrindo " "normalmente." -#: crates/pdfs-gui/src/app/pages/locations.rs:437 +#: crates/pdfs-gui/src/app/pages/locations.rs:438 msgid "Pause for a while" msgstr "Pausar por um tempo" -#: crates/pdfs-gui/src/app/pages/locations.rs:465 +#: crates/pdfs-gui/src/app/pages/locations.rs:466 msgctxt "verb" msgid "Resume" msgstr "Retomar" -#: crates/pdfs-gui/src/app/pages/locations.rs:470 +#: crates/pdfs-gui/src/app/pages/locations.rs:471 msgid "Upload everything that waited while sync was paused" msgstr "Enviar tudo o que aguardou enquanto a sincronização estava pausada" -#: crates/pdfs-gui/src/app/pages/locations.rs:518 +#: crates/pdfs-gui/src/app/pages/locations.rs:519 msgid "Couldn't pause sync" msgstr "Não foi possível pausar a sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:520 +#: crates/pdfs-gui/src/app/pages/locations.rs:521 msgid "Couldn't resume sync" msgstr "Não foi possível retomar a sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:526 +#: crates/pdfs-gui/src/app/pages/locations.rs:527 msgid "Sync resumed" msgstr "Sincronização retomada" -#: crates/pdfs-gui/src/app/pages/locations.rs:527 +#: crates/pdfs-gui/src/app/pages/locations.rs:528 msgid "Sync paused until you resume" msgstr "Sincronização pausada até você retomar" -#: crates/pdfs-gui/src/app/pages/locations.rs:528 +#: crates/pdfs-gui/src/app/pages/locations.rs:529 #: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237 msgid "Sync paused" msgstr "Sincronização pausada" -#: crates/pdfs-gui/src/app/pages/locations.rs:546 +#: crates/pdfs-gui/src/app/pages/locations.rs:547 msgid "Retry All" msgstr "Tentar todos novamente" -#: crates/pdfs-gui/src/app/pages/locations.rs:548 +#: crates/pdfs-gui/src/app/pages/locations.rs:549 msgid "Try every failed change again now" msgstr "Tentar novamente agora todas as alterações que falharam" -#: crates/pdfs-gui/src/app/pages/locations.rs:553 +#: crates/pdfs-gui/src/app/pages/locations.rs:554 msgid "Waiting to Upload" msgstr "Aguardando envio" -#: crates/pdfs-gui/src/app/pages/locations.rs:555 -#: crates/pdfs-gui/src/app/pages/locations.rs:614 +#: crates/pdfs-gui/src/app/pages/locations.rs:556 +#: crates/pdfs-gui/src/app/pages/locations.rs:615 msgid "Changes made on this computer that are not on Proton Drive yet." msgstr "" "Alterações feitas neste computador que ainda não estão no Proton Drive." #. Translators: {shown} is how many rows are listed (50), {n} the total number of queued changes. -#: crates/pdfs-gui/src/app/pages/locations.rs:612 +#: crates/pdfs-gui/src/app/pages/locations.rs:613 #, rust-format msgid "" "Changes made on this computer that are not on Proton Drive yet. Showing the " @@ -2681,89 +2682,154 @@ msgstr[1] "" "Alterações feitas neste computador que ainda não estão no Proton Drive. " "Mostrando as primeiras {shown} de {n}." -#: crates/pdfs-gui/src/app/pages/locations.rs:629 +#: crates/pdfs-gui/src/app/pages/locations.rs:630 msgid "Upload changes" msgstr "Enviar alterações" -#: crates/pdfs-gui/src/app/pages/locations.rs:630 +#: crates/pdfs-gui/src/app/pages/locations.rs:631 msgid "Upload new file" msgstr "Enviar novo arquivo" -#: crates/pdfs-gui/src/app/pages/locations.rs:631 +#: crates/pdfs-gui/src/app/pages/locations.rs:632 msgid "Create folder" msgstr "Criar pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:632 +#: crates/pdfs-gui/src/app/pages/locations.rs:633 msgid "Rename or move" msgstr "Renomear ou mover" -#: crates/pdfs-gui/src/app/pages/locations.rs:633 +#: crates/pdfs-gui/src/app/pages/locations.rs:634 msgid "Move to trash" msgstr "Mover para a lixeira" #. Translators: a queued change of an unknown kind. -#: crates/pdfs-gui/src/app/pages/locations.rs:635 +#: crates/pdfs-gui/src/app/pages/locations.rs:636 msgctxt "noun" msgid "Change" msgstr "Alteração" -#: crates/pdfs-gui/src/app/pages/locations.rs:638 +#: crates/pdfs-gui/src/app/pages/locations.rs:639 msgid "waiting for the app writing it to finish" msgstr "aguardando o aplicativo que o está gravando terminar" #. Translators: {time} is when the next attempt happens, such as "14:30". -#: crates/pdfs-gui/src/app/pages/locations.rs:641 +#: crates/pdfs-gui/src/app/pages/locations.rs:642 #, rust-format msgid "retrying {time}" msgstr "nova tentativa {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:643 +#: crates/pdfs-gui/src/app/pages/locations.rs:644 msgid "waiting for sync to resume" msgstr "aguardando a sincronização ser retomada" -#: crates/pdfs-gui/src/app/pages/locations.rs:644 +#: crates/pdfs-gui/src/app/pages/locations.rs:645 msgid "up next" msgstr "a seguir" -#: crates/pdfs-gui/src/app/pages/locations.rs:648 +#: crates/pdfs-gui/src/app/pages/locations.rs:649 #, rust-format msgid "{action} · {state}" msgstr "{action} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:655 +#: crates/pdfs-gui/src/app/pages/locations.rs:660 #, rust-format msgid "Failed {n} time: {error}" msgid_plural "Failed {n} times: {error}" msgstr[0] "Falhou {n} vez: {error}" msgstr[1] "Falhou {n} vezes: {error}" -#: crates/pdfs-gui/src/app/pages/locations.rs:681 +#: crates/pdfs-gui/src/app/pages/locations.rs:686 msgid "Retry now" msgstr "Tentar novamente agora" -#: crates/pdfs-gui/src/app/pages/locations.rs:700 +#: crates/pdfs-gui/src/app/pages/locations.rs:697 +msgid "Export" +msgstr "Exportar" + +#: crates/pdfs-gui/src/app/pages/locations.rs:698 +msgid "Save a copy of this file's content elsewhere" +msgstr "Salvar uma cópia do conteúdo deste arquivo em outro lugar" + +#: crates/pdfs-gui/src/app/pages/locations.rs:719 +msgid "" +"Your Proton Drive storage is full. Free up space or upgrade your plan, and " +"this change uploads on its own." +msgstr "" +"Seu armazenamento do Proton Drive está cheio. Libere espaço ou mude para um " +"plano maior, e esta alteração será enviada sozinha." + +#: crates/pdfs-gui/src/app/pages/locations.rs:722 +msgid "" +"You can no longer change this on Proton Drive. Ask the owner for edit " +"access, or export the file to keep your version." +msgstr "" +"Você não pode mais alterar isto no Proton Drive. Peça ao proprietário " +"permissão de edição ou exporte o arquivo para manter a sua versão." + +#: crates/pdfs-gui/src/app/pages/locations.rs:725 +msgid "" +"The folder this change belongs in is gone from Proton Drive. Export the file " +"to keep your version." +msgstr "" +"A pasta à qual esta alteração pertence não está mais no Proton Drive. " +"Exporte o arquivo para manter a sua versão." + +#: crates/pdfs-gui/src/app/pages/locations.rs:728 +msgid "" +"Proton Drive's limit on items in a folder or on folder depth is reached. " +"Make room in the folder, then retry." +msgstr "" +"O limite do Proton Drive de itens em uma pasta ou de profundidade de pastas " +"foi atingido. Libere espaço na pasta e tente novamente." + +#: crates/pdfs-gui/src/app/pages/locations.rs:731 +msgid "Proton Drive refused this change. It stays queued and is tried again." +msgstr "" +"O Proton Drive recusou esta alteração. Ela continua na fila e será tentada " +"novamente." + +#: crates/pdfs-gui/src/app/pages/locations.rs:741 +msgid "Export File" +msgstr "Exportar arquivo" + +#: crates/pdfs-gui/src/app/pages/locations.rs:750 +#: crates/pdfs-gui/src/app/pages/locations.rs:764 +#: crates/pdfs-gui/src/app/pages/locations.rs:768 +msgid "Couldn't export the file" +msgstr "Não foi possível exportar o arquivo" + +#: crates/pdfs-gui/src/app/pages/locations.rs:751 +#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 +msgid "That location isn't a local file." +msgstr "Esse local não é um arquivo local." + +#: crates/pdfs-gui/src/app/pages/locations.rs:762 +msgid "File exported" +msgstr "Arquivo exportado" + +#: crates/pdfs-gui/src/app/pages/locations.rs:783 msgid "Retrying now…" msgstr "Tentando novamente…" -#: crates/pdfs-gui/src/app/pages/locations.rs:705 -#: crates/pdfs-gui/src/app/pages/locations.rs:709 +#: crates/pdfs-gui/src/app/pages/locations.rs:788 +#: crates/pdfs-gui/src/app/pages/locations.rs:792 msgid "Couldn't retry" msgstr "Não foi possível tentar novamente" -#: crates/pdfs-gui/src/app/pages/locations.rs:779 +#: crates/pdfs-gui/src/app/pages/locations.rs:862 #, rust-format msgid "{size}, changed {time}" msgstr "{size}, alterado em {time}" -#: crates/pdfs-gui/src/app/pages/locations.rs:789 +#: crates/pdfs-gui/src/app/pages/locations.rs:872 msgid "The original is gone; only this copy is left" msgstr "O original não existe mais; só resta esta cópia" -#: crates/pdfs-gui/src/app/pages/locations.rs:791 +#: crates/pdfs-gui/src/app/pages/locations.rs:874 msgid "Same content as the original" msgstr "Mesmo conteúdo que o original" -#: crates/pdfs-gui/src/app/pages/locations.rs:832 +#: crates/pdfs-gui/src/app/pages/locations.rs:915 #, rust-format msgid "" "“{name}” was changed here and elsewhere at the same time.\n" @@ -2780,7 +2846,7 @@ msgstr "" "\n" "O que não for mantido vai para a lixeira, de onde pode ser restaurado." -#: crates/pdfs-gui/src/app/pages/locations.rs:844 +#: crates/pdfs-gui/src/app/pages/locations.rs:927 #, rust-format msgid "" "The original “{name}” no longer exists; only the copy is left ({copy}).\n" @@ -2791,111 +2857,111 @@ msgstr "" "\n" "Mantenha a cópia para devolver a ela o nome original." -#: crates/pdfs-gui/src/app/pages/locations.rs:850 +#: crates/pdfs-gui/src/app/pages/locations.rs:933 msgid "Resolve Conflict" msgstr "Resolver conflito" -#: crates/pdfs-gui/src/app/pages/locations.rs:855 +#: crates/pdfs-gui/src/app/pages/locations.rs:938 msgid "Name for the copy, if keeping both" msgstr "Nome da cópia, se mantiver ambos" -#: crates/pdfs-gui/src/app/pages/locations.rs:862 +#: crates/pdfs-gui/src/app/pages/locations.rs:945 msgid "Keep Original" msgstr "Manter original" -#: crates/pdfs-gui/src/app/pages/locations.rs:863 +#: crates/pdfs-gui/src/app/pages/locations.rs:946 msgid "Keep Both" msgstr "Manter ambos" -#: crates/pdfs-gui/src/app/pages/locations.rs:865 +#: crates/pdfs-gui/src/app/pages/locations.rs:948 msgid "Keep Copy" msgstr "Manter cópia" -#: crates/pdfs-gui/src/app/pages/locations.rs:922 -#: crates/pdfs-gui/src/app/pages/locations.rs:928 +#: crates/pdfs-gui/src/app/pages/locations.rs:1005 +#: crates/pdfs-gui/src/app/pages/locations.rs:1011 msgid "Couldn't resolve the conflict" msgstr "Não foi possível resolver o conflito" -#: crates/pdfs-gui/src/app/pages/locations.rs:971 +#: crates/pdfs-gui/src/app/pages/locations.rs:1054 msgid "Reading this computer's Proton Drive locations." msgstr "Lendo os locais do Proton Drive deste computador." -#: crates/pdfs-gui/src/app/pages/locations.rs:992 +#: crates/pdfs-gui/src/app/pages/locations.rs:1075 msgid "Unavailable" msgstr "Indisponível" -#: crates/pdfs-gui/src/app/pages/locations.rs:1075 +#: crates/pdfs-gui/src/app/pages/locations.rs:1158 msgid "No folders yet" msgstr "Nenhuma pasta ainda" -#: crates/pdfs-gui/src/app/pages/locations.rs:1077 +#: crates/pdfs-gui/src/app/pages/locations.rs:1160 msgid "The Proton Drive service hasn't reported its folder yet." msgstr "O serviço do Proton Drive ainda não informou sua pasta." -#: crates/pdfs-gui/src/app/pages/locations.rs:1100 +#: crates/pdfs-gui/src/app/pages/locations.rs:1183 #, rust-format msgid "{path} · {state}" msgstr "{path} · {state}" -#: crates/pdfs-gui/src/app/pages/locations.rs:1143 +#: crates/pdfs-gui/src/app/pages/locations.rs:1226 msgid "Read-only" msgstr "Somente leitura" -#: crates/pdfs-gui/src/app/pages/locations.rs:1159 +#: crates/pdfs-gui/src/app/pages/locations.rs:1242 msgid "Open in Files" msgstr "Abrir em Arquivos" -#: crates/pdfs-gui/src/app/pages/locations.rs:1164 +#: crates/pdfs-gui/src/app/pages/locations.rs:1247 msgid "Change Location…" msgstr "Alterar local…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1216 +#: crates/pdfs-gui/src/app/pages/locations.rs:1299 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Escolher se esta pasta mantém uma cópia completa neste computador" -#: crates/pdfs-gui/src/app/pages/locations.rs:1232 +#: crates/pdfs-gui/src/app/pages/locations.rs:1315 msgid "Keep every file on this computer and in Proton Drive." msgstr "Manter todos os arquivos neste computador e no Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1237 +#: crates/pdfs-gui/src/app/pages/locations.rs:1320 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Manter os arquivos no Proton Drive e baixar cada um quando você o abrir." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1291 +#: crates/pdfs-gui/src/app/pages/locations.rs:1374 msgctxt "folder mode" msgid "Online only" msgstr "Somente online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1294 +#: crates/pdfs-gui/src/app/pages/locations.rs:1377 msgctxt "folder mode" msgid "Synced" msgstr "Sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1305 +#: crates/pdfs-gui/src/app/pages/locations.rs:1388 msgid "Sync Now" msgstr "Sincronizar agora" -#: crates/pdfs-gui/src/app/pages/locations.rs:1309 +#: crates/pdfs-gui/src/app/pages/locations.rs:1392 msgid "Resume Syncing" msgstr "Retomar sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:1311 +#: crates/pdfs-gui/src/app/pages/locations.rs:1394 msgid "Pause Syncing" msgstr "Pausar sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:1322 +#: crates/pdfs-gui/src/app/pages/locations.rs:1405 msgid "Stop Syncing…" msgstr "Parar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1331 +#: crates/pdfs-gui/src/app/pages/locations.rs:1414 msgid "Make Folder Online Only?" msgstr "Tornar a pasta somente online?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1333 +#: crates/pdfs-gui/src/app/pages/locations.rs:1416 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -2904,11 +2970,11 @@ msgstr "" "Os arquivos em {path} serão removidos deste computador e mantidos somente no " "Proton Drive. Cada arquivo é baixado novamente quando você o abre." -#: crates/pdfs-gui/src/app/pages/locations.rs:1336 +#: crates/pdfs-gui/src/app/pages/locations.rs:1419 msgid "Make Online Only" msgstr "Tornar somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1372 +#: crates/pdfs-gui/src/app/pages/locations.rs:1455 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -2917,61 +2983,61 @@ msgstr "" "Todos os arquivos em {path} serão baixados para este computador e " "continuarão sincronizados. Há {free} livres neste disco." -#: crates/pdfs-gui/src/app/pages/locations.rs:1377 +#: crates/pdfs-gui/src/app/pages/locations.rs:1460 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Todos os arquivos em {path} serão baixados para este computador e " "continuarão sincronizados." -#: crates/pdfs-gui/src/app/pages/locations.rs:1382 +#: crates/pdfs-gui/src/app/pages/locations.rs:1465 msgid "Download Folder?" msgstr "Baixar a pasta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1386 +#: crates/pdfs-gui/src/app/pages/locations.rs:1469 msgid "Download" msgstr "Baixar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1410 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgid "Couldn't pause the folder" msgstr "Não foi possível pausar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1411 +#: crates/pdfs-gui/src/app/pages/locations.rs:1494 msgid "Couldn't resume the folder" msgstr "Não foi possível retomar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1417 +#: crates/pdfs-gui/src/app/pages/locations.rs:1500 msgid "Folder paused" msgstr "Pasta pausada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1418 +#: crates/pdfs-gui/src/app/pages/locations.rs:1501 msgid "Folder resumed" msgstr "Pasta retomada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1442 -#: crates/pdfs-gui/src/app/pages/locations.rs:1446 +#: crates/pdfs-gui/src/app/pages/locations.rs:1525 +#: crates/pdfs-gui/src/app/pages/locations.rs:1529 msgid "Couldn't sync" msgstr "Não foi possível sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1472 +#: crates/pdfs-gui/src/app/pages/locations.rs:1555 msgid "Shared folder" msgstr "Pasta compartilhada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1474 +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 msgid "Going online only" msgstr "Tornando somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1475 +#: crates/pdfs-gui/src/app/pages/locations.rs:1558 msgid "Switching to synced" msgstr "Passando para sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1485 +#: crates/pdfs-gui/src/app/pages/locations.rs:1568 msgctxt "state" msgid "paused" msgstr "pausada" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1496 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 msgid "not available" msgstr "indisponível" @@ -5465,10 +5531,6 @@ msgstr "Salvar versão" msgid "Couldn't save that version" msgstr "Não foi possível salvar essa versão" -#: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:351 -msgid "That location isn't a local file." -msgstr "Esse local não é um arquivo local." - #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:358 msgid "Version saved" msgstr "Versão salva"