From c1d9538669c85c1a09f48e122569a46f0dc213bf Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 25 Oct 2026 21:10:50 +0100 Subject: [PATCH 1/9] feat(cli,fuse,core): copy files and folders on Proton Drive `pdfs copy PATH... NEW_PARENT` sends a new control request, Copy, which copies a file with its content or a folder with its subtree on Proton Drive through proton-drive-rs's copy_node. Nothing is downloaded or uploaded. A name already taken in the destination gets the next free " (n)" suffix through get_available_name. A copy cannot wait in the queue, because Drive copies what it holds. So it is refused offline, and while the mount still owes Drive part of the node: a local placeholder, a queued op, unsaved writes, or, for a folder, any queued op at all. Local-first does not change this. DriveApi gains copy_node and get_available_name, and the fake drive copies subtrees, so a FUSE sim test covers the copy, the suffix, the folder subtree and both refusals. The activity feed logs a new Copy kind, translated in every catalog. Needs the proton-drive-rs release that adds copy_node; until then, build with a [patch.crates-io] pointing at proton-sdk-rs. --- crates/pdfs-cli/src/main.rs | 46 +++++ crates/pdfs-core/src/control.rs | 11 ++ crates/pdfs-fuse/src/control.rs | 25 +++ crates/pdfs-fuse/src/drive.rs | 38 ++++- crates/pdfs-fuse/src/lib.rs | 86 +++++++++- crates/pdfs-fuse/src/sim/daemon.rs | 69 ++++++++ crates/pdfs-fuse/src/sim/fake_drive.rs | 92 +++++++++- crates/pdfs-gui/src/app/pages/activity.rs | 1 + .../pdfs-gui/src/app/pages/activity_text.rs | 4 + docs/CHANGELOG.md | 4 + docs/CLI.md | 1 + po/de.po | 142 +++++++++------- po/en_GB.po | 142 +++++++++------- po/es.po | 142 +++++++++------- po/fr.po | 142 +++++++++------- po/it.po | 142 +++++++++------- po/nl.po | 142 +++++++++------- po/pdfs.pot | 160 ++++++++++-------- po/pl.po | 142 +++++++++------- po/pt_BR.po | 142 +++++++++------- 20 files changed, 1073 insertions(+), 600 deletions(-) diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index d358c42..dbc008e 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -356,6 +356,18 @@ enum Command { #[arg(required = true, num_args = 2.., value_name = "PATH")] paths: Vec, }, + /// Copy files or folders into another folder in My files via the running + /// daemon. + /// + /// The copy happens on Proton Drive, so nothing is downloaded or uploaded, + /// unlike `cp` inside the mount. A name already taken in the destination + /// gets a " (1)" suffix. The last path is the destination folder. + Copy { + /// Files/folders to copy, then the destination folder: inside My files, + /// or relative to the mountpoint. + #[arg(required = true, num_args = 2.., value_name = "PATH")] + paths: Vec, + }, /// Trash a file or folder via the running daemon. Rm { /// File/folder path, inside My files or an on-demand synced folder, or @@ -919,6 +931,10 @@ fn main() -> Result<()> { let new_parent = paths.pop().expect("clap requires at least two paths"); cmd_move(paths, new_parent) } + Command::Copy { mut paths } => { + let new_parent = paths.pop().expect("clap requires at least two paths"); + cmd_copy(paths, new_parent) + } Command::Rm { path } => cmd_rm(path), Command::Mkdir { parent, name } => cmd_mkdir(parent, name), Command::Upload { sources, parent } => cmd_upload(sources, parent), @@ -1765,6 +1781,7 @@ fn activity_verb(kind: pdfs_core::control::ActivityKind) -> &'static str { Sync => "sync", Rename => "rename", Move => "move", + Copy => "copy", CreateFolder => "mkdir", Trash => "trash", Restore => "restore", @@ -2920,6 +2937,35 @@ fn cmd_move(sources: Vec, new_parent: PathBuf) -> Result<()> { Ok(()) } +fn cmd_copy(sources: Vec, new_parent: PathBuf) -> Result<()> { + let new_parent = path_arg(&new_parent)?; + let mut failed = 0; + for source in &sources { + let outcome = path_arg(source).and_then(|path| { + match control_request(CtlRequest::Copy { + path, + new_parent: new_parent.clone(), + })? { + CtlResponse::Ok { message } => Ok(message), + CtlResponse::Error { message, kind } => bail!("{}", cli_error(kind, &message)), + other => bail!("unexpected response: {other:?}"), + } + }); + match outcome { + Ok(message) => println!("{message}"), + Err(e) if sources.len() == 1 => return Err(e), + Err(e) => { + eprintln!("{}: {e:#}", source.display()); + failed += 1; + } + } + } + if failed > 0 { + bail!("{failed} of {} could not be copied", sources.len()); + } + Ok(()) +} + fn cmd_rm(path: PathBuf) -> Result<()> { match control_request(CtlRequest::Delete { path: path_arg(&path)?, diff --git a/crates/pdfs-core/src/control.rs b/crates/pdfs-core/src/control.rs index 202240d..9104e87 100644 --- a/crates/pdfs-core/src/control.rs +++ b/crates/pdfs-core/src/control.rs @@ -344,6 +344,12 @@ pub enum Request { /// or a mirror synced folder), and the move is still made on Proton Drive /// without transferring content. Replies with [`Response::Ok`]. Move { path: String, new_parent: String }, + /// Copy a file or folder into a folder on Proton Drive, without + /// downloading or uploading it. Both `path` and `new_parent` are + /// mountpoint-relative, or absolute paths inside My files. A name already + /// taken in `new_parent` gets the next free ` (n)` suffix. Replies with + /// [`Response::Ok`]. + Copy { path: String, new_parent: String }, /// Trash a file or folder. `path` is mountpoint-relative. Replies with /// [`Response::Ok`]. Delete { path: String }, @@ -1169,6 +1175,7 @@ pub enum ActivityKind { Sync, Rename, Move, + Copy, CreateFolder, Trash, Restore, @@ -2687,6 +2694,10 @@ mod tests { path: "a/b.txt".into(), new_parent: "d".into(), }, + Request::Copy { + path: "a/b.txt".into(), + new_parent: "d".into(), + }, Request::Delete { path: "a/b.txt".into(), }, diff --git a/crates/pdfs-fuse/src/control.rs b/crates/pdfs-fuse/src/control.rs index 1e0f5ee..4030f68 100644 --- a/crates/pdfs-fuse/src/control.rs +++ b/crates/pdfs-fuse/src/control.rs @@ -1063,6 +1063,31 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U (Err(e), _) | (_, Err(e)) => CtlResponse::error(e), } } + Ok(CtlRequest::Copy { path, new_parent }) => { + match ( + rel_to_mount(mountpoint, &path), + rel_to_mount(mountpoint, &new_parent), + ) { + (Ok(rel), Ok(parent_rel)) => match core.copy_to(&rel, &parent_rel) { + Ok(name) => { + let dest = if new_parent.is_empty() { + "My files".to_string() + } else { + new_parent.clone() + }; + core.log_activity(ActivityKind::Copy, &name, format!("to {dest}"), true); + CtlResponse::Ok { + message: format!("copied to {name}"), + } + } + Err(e) => { + core.log_activity(ActivityKind::Copy, &path, &e, false); + CtlResponse::error(e) + } + }, + (Err(e), _) | (_, Err(e)) => CtlResponse::error(e), + } + } Ok(CtlRequest::Delete { path }) => match route_node(core, mountpoint, &path) { Ok((core, rel)) => match core.delete(&rel) { Ok(name) => { diff --git a/crates/pdfs-fuse/src/drive.rs b/crates/pdfs-fuse/src/drive.rs index 53686f4..5d9a261 100644 --- a/crates/pdfs-fuse/src/drive.rs +++ b/crates/pdfs-fuse/src/drive.rs @@ -28,8 +28,8 @@ use proton_drive_rs::proton_sdk::account::Quota; use proton_drive_rs::proton_sdk::error::Result; use proton_drive_rs::proton_sdk::ids::{DriveEventId, NodeUid}; use proton_drive_rs::{ - Device, DeviceType, DriveEvent, DriveEventScopeId, Node, NodeMoveItem, ProtonDriveClient, - RevisionReader, Thumbnail, + AvailableNameTarget, Device, DeviceType, DriveEvent, DriveEventScopeId, Node, NodeMoveItem, + ProtonDriveClient, RevisionReader, Thumbnail, }; /// One outcome per node of a batch request; see [`ProtonDriveClient::trash_nodes`]. @@ -138,6 +138,22 @@ pub(crate) trait DriveApi: Send + Sync { async fn move_node(&self, uid: &NodeUid, new_parent: &NodeUid) -> Result<()>; + /// See [`ProtonDriveClient::copy_node`]. + async fn copy_node( + &self, + uid: &NodeUid, + new_parent: &NodeUid, + name: Option<&str>, + ) -> Result; + + /// See [`ProtonDriveClient::get_available_name`]. + async fn get_available_name( + &self, + parent_uid: &NodeUid, + name: &str, + target: AvailableNameTarget, + ) -> Result; + fn move_nodes_streaming<'a>( &'a self, items: Vec, @@ -448,6 +464,24 @@ impl DriveApi for ProtonDriveClient { ProtonDriveClient::move_node(self, uid, new_parent).await } + async fn copy_node( + &self, + uid: &NodeUid, + new_parent: &NodeUid, + name: Option<&str>, + ) -> Result { + ProtonDriveClient::copy_node(self, uid, new_parent, name).await + } + + async fn get_available_name( + &self, + parent_uid: &NodeUid, + name: &str, + target: AvailableNameTarget, + ) -> Result { + ProtonDriveClient::get_available_name(self, parent_uid, name, target).await + } + fn move_nodes_streaming<'a>( &'a self, items: Vec, diff --git a/crates/pdfs-fuse/src/lib.rs b/crates/pdfs-fuse/src/lib.rs index 8d02340..72bf580 100644 --- a/crates/pdfs-fuse/src/lib.rs +++ b/crates/pdfs-fuse/src/lib.rs @@ -74,8 +74,8 @@ use proton_drive_rs::proton_sdk::api::ResponseCode; use proton_drive_rs::proton_sdk::error::ProtonError; use proton_drive_rs::proton_sdk::ids::{DriveEventId, LinkId, NodeUid, ShareId, VolumeId}; use proton_drive_rs::{ - DriveEvent, DriveEventScopeId, MemberRole, Node, NodeKind, NodeMoveItem, ProtonDriveClient, - ProtonPhotosClient, SharedWithMeItem, ThumbnailType, + AvailableNameTarget, DriveEvent, DriveEventScopeId, MemberRole, Node, NodeKind, NodeMoveItem, + ProtonDriveClient, ProtonPhotosClient, SharedWithMeItem, ThumbnailType, }; mod albums; @@ -5206,6 +5206,88 @@ impl Core { Ok(name) } + /// Copy a file or folder into `new_parent_rel` on Proton Drive, which copies + /// the content there: nothing is downloaded or uploaded. Both paths are + /// mountpoint-relative. A name already taken in the folder gets the next + /// free ` (n)` suffix. Returns the copy's name. + /// + /// Drive copies what it holds, so the copy is refused offline and while the + /// mount still owes Drive part of it: a node or folder only queued locally, + /// a file with a queued upload or unsaved writes, or — for a folder, whose + /// queued changes could sit anywhere below it — any queued op at all. + fn copy_to(&self, rel: &Path, new_parent_rel: &Path) -> CoreResult { + let (ino, uid) = self.resolve(rel)?; + let (pino, new_parent_uid) = self + .resolve_path(new_parent_rel) + .map_err(|e| self.errno_error(e, "resolve new parent"))?; + self.ensure_children(pino) + .map_err(|e| self.errno_error(e, "enumerate"))?; + self.require_uid_writable(&new_parent_uid) + .map_err(|error| self.errno_error(error, "copy access"))?; + let (name, is_folder, unsaved) = { + let st = self.state(); + let entry = st + .entries + .get(&ino) + .ok_or_else(|| CoreError::not_found(format!("{} is gone", rel.display())))?; + let unsaved = st.active_writes.get(&ino).is_some_and(|w| w.dirty); + (entry.node.name.clone(), entry.node.is_folder(), unsaved) + }; + // Unlike a move, a copy cannot wait in the queue: it needs the node as + // Drive has it, so it goes now or not at all, local-first or not. + if !self.is_online() { + return Err(CoreError::offline()); + } + let owed = unsaved + || is_local_uid(&uid) + || is_local_uid(&new_parent_uid) + || self.db.has_any_op(&uid.to_string()).unwrap_or(true) + || (is_folder + && self + .db + .pending_op_counts() + .map(|counts| counts.uploads + counts.changes > 0) + .unwrap_or(true)); + if owed { + return Err(CoreError::conflict(format!( + "{name} has changes that have not reached Proton Drive yet; \ + copy it once they have synced" + ))); + } + let target = if is_folder { + AvailableNameTarget::Folder + } else { + AvailableNameTarget::File + }; + let copy_name = self + .rt + .block_on( + self.drive + .get_available_name(&new_parent_uid, &name, target), + ) + .map_err(|e| CoreError::from_api(&e, "copy"))?; + let new_uid = self + .rt + .block_on( + self.drive + .copy_node(&uid, &new_parent_uid, Some(©_name)), + ) + .map_err(|e| CoreError::from_api(&e, "copy"))?; + let node = self + .fetch_minted_node(&new_uid, ©_name) + .ok_or_else(|| minted_but_unlisted(©_name))?; + let mut st = self.state(); + let copy_ino = st.intern(pino, node); + if let Some(kids) = st.children.get_mut(&pino) + && !kids.contains(©_ino) + { + kids.push(copy_ino); + } + drop(st); + self.flush_access_changes(); + Ok(copy_name) + } + /// Trash a file or folder. `rel` is mountpoint-relative. Forgets the node, /// evicts any cached content, and invalidates the parent listing. fn delete(&self, rel: &Path) -> CoreResult { diff --git a/crates/pdfs-fuse/src/sim/daemon.rs b/crates/pdfs-fuse/src/sim/daemon.rs index 126a10b..99cbbbc 100644 --- a/crates/pdfs-fuse/src/sim/daemon.rs +++ b/crates/pdfs-fuse/src/sim/daemon.rs @@ -2214,6 +2214,75 @@ mod tests { let _ = std::fs::remove_dir_all(&dir); } + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_pdfs_copy_copies_on_drive_and_waits_for_unsynced_changes() { + let drive = FakeDrive::new(); + let dir = scratch("pdfs-copy"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + + let mount = &daemon.mountpoint; + std::fs::create_dir_all(mount.join("src/inner")).unwrap(); + std::fs::create_dir_all(mount.join("dest")).unwrap(); + std::fs::write(mount.join("src/a.txt"), b"alpha").unwrap(); + std::fs::write(mount.join("src/inner/b.txt"), b"beta").unwrap(); + let file = |bytes: &[u8]| Some(Entry::File(Arc::new(bytes.to_vec()))); + assert!(wait_until(Duration::from_secs(30), || { + drive.tree().get("src/inner/b.txt").cloned() == file(b"beta") + && daemon.pending().is_ok_and(|ops| ops.is_empty()) + })); + + let path = |rel: &str| mount.join(rel).to_string_lossy().into_owned(); + let copy = |from: &str, to: &str| { + daemon.request(&Request::Copy { + path: path(from), + new_parent: path(to), + }) + }; + let uploads = drive.tree().len(); + copy("src/a.txt", "dest").unwrap(); + // A name already taken gets a suffix rather than an error. + copy("src/a.txt", "dest").unwrap(); + copy("src", "dest").unwrap(); + assert_eq!(std::fs::read(mount.join("dest/a.txt")).unwrap(), b"alpha"); + assert_eq!( + std::fs::read(mount.join("dest/a (1).txt")).unwrap(), + b"alpha" + ); + assert_eq!( + std::fs::read(mount.join("dest/src/inner/b.txt")).unwrap(), + b"beta" + ); + let tree = drive.tree(); + assert_eq!(tree.get("dest/src/a.txt").cloned(), file(b"alpha")); + assert_eq!( + tree.len(), + uploads + 6, + "{:?}", + tree.keys().collect::>() + ); + + // Drive would copy what it has, not the bytes still queued. + let paused = |paused| Request::SetSyncPaused { + paused, + until: None, + }; + daemon.request(&paused(true)).unwrap(); + std::fs::write(mount.join("src/a.txt"), b"alpha, edited").unwrap(); + match copy("src/a.txt", "dest") { + Err(e) => assert!(e.to_string().contains("not reached Proton Drive"), "{e}"), + Ok(answer) => panic!("the copy went ahead: {answer:?}"), + } + match copy("src", "dest") { + Err(e) => assert!(e.to_string().contains("not reached Proton Drive"), "{e}"), + Ok(answer) => panic!("the folder copy went ahead: {answer:?}"), + } + daemon.request(&paused(false)).unwrap(); + + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } + #[test] #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] fn a_pdfs_rename_after_a_queued_rename_is_not_undone() { diff --git a/crates/pdfs-fuse/src/sim/fake_drive.rs b/crates/pdfs-fuse/src/sim/fake_drive.rs index 0e14808..eaf7e52 100644 --- a/crates/pdfs-fuse/src/sim/fake_drive.rs +++ b/crates/pdfs-fuse/src/sim/fake_drive.rs @@ -61,8 +61,8 @@ use proton_drive_rs::proton_sdk::ids::{ DeviceUid, DriveEventId, LinkId, NodeUid, ShareId, VolumeId, }; use proton_drive_rs::{ - Device as Computer, DeviceType, DriveEvent, DriveEventScopeId, Node, NodeKind, NodeMoveItem, - RevisionState, Thumbnail, + AvailableNameTarget, Device as Computer, DeviceType, DriveEvent, DriveEventScopeId, Node, + NodeKind, NodeMoveItem, RevisionState, Thumbnail, }; use sha1::{Digest as _, Sha1}; @@ -185,6 +185,39 @@ impl Server { } } + /// Copy `uid` and, for a folder, everything live below it under `parent` as + /// `name`, the way Drive's copy endpoint does. Returns the copy's uid. + fn copy_subtree(&mut self, uid: &NodeUid, parent: &NodeUid, name: String) -> NodeUid { + let source = self + .current(uid) + .cloned() + .expect("the caller checked the source"); + let copy = self.mint_uid(); + let now = now_secs(); + self.put( + ©, + Some(Remote { + parent: Some(parent.clone()), + name, + created: now, + ..source + }), + ); + let children: Vec<(NodeUid, String)> = self + .nodes + .keys() + .filter_map(|child| { + let remote = self.current(child)?; + (remote.parent.as_ref() == Some(uid) && !remote.trashed) + .then(|| (child.clone(), remote.name.clone())) + }) + .collect(); + for (child, child_name) in children { + self.copy_subtree(&child, ©, child_name); + } + copy + } + fn mint_uid(&mut self) -> NodeUid { self.next_link += 1; uid(&format!("L{}", self.next_link)) @@ -1490,6 +1523,61 @@ impl DriveApi for FakeClient { .await } + async fn copy_node( + &self, + uid: &NodeUid, + new_parent: &NodeUid, + name: Option<&str>, + ) -> Result { + self.request(true, |server| { + if !server.is_folder(new_parent) { + return Err(api(ResponseCode::DoesNotExist, "parent folder not found")); + } + let source = server + .current(uid) + .filter(|remote| !remote.trashed) + .cloned() + .ok_or_else(|| api(ResponseCode::DoesNotExist, "node not found"))?; + if server.is_below(new_parent, uid) { + return Err(api( + ResponseCode::InvalidRequirements, + "cannot copy a folder into itself", + )); + } + let name = name.map_or(source.name.clone(), str::to_owned); + if server.live_child_named(new_parent, &name).is_some() { + return Err(api( + ResponseCode::AlreadyExists, + "a file or folder with that name already exists", + )); + } + Ok(server.copy_subtree(uid, new_parent, name)) + }) + .await + } + + async fn get_available_name( + &self, + parent_uid: &NodeUid, + name: &str, + target: AvailableNameTarget, + ) -> Result { + self.request(false, |server| { + let (stem, extension) = match (target, name.rsplit_once('.')) { + (AvailableNameTarget::File, Some((stem, ext))) if !stem.is_empty() => { + (stem, format!(".{ext}")) + } + _ => (name, String::new()), + }; + let free = std::iter::once(name.to_owned()) + .chain((1..).map(|n| format!("{stem} ({n}){extension}"))) + .find(|candidate| server.live_child_named(parent_uid, candidate).is_none()) + .expect("an unbounded sequence has a free name"); + Ok(free) + }) + .await + } + fn move_nodes_streaming<'a>( &'a self, items: Vec, diff --git a/crates/pdfs-gui/src/app/pages/activity.rs b/crates/pdfs-gui/src/app/pages/activity.rs index 9a7b558..cb627c4 100644 --- a/crates/pdfs-gui/src/app/pages/activity.rs +++ b/crates/pdfs-gui/src/app/pages/activity.rs @@ -1043,6 +1043,7 @@ pub(crate) fn activity_icon(kind: ActivityKind) -> &'static str { ActivityKind::Sync => "pdfs-sync-symbolic", ActivityKind::Rename => "document-edit-symbolic", ActivityKind::Move => "go-jump-symbolic", + ActivityKind::Copy => "edit-copy-symbolic", ActivityKind::CreateFolder => "folder-new-symbolic", ActivityKind::Trash => "user-trash-symbolic", ActivityKind::DeleteForever | ActivityKind::EmptyTrash => "edit-delete-symbolic", diff --git a/crates/pdfs-gui/src/app/pages/activity_text.rs b/crates/pdfs-gui/src/app/pages/activity_text.rs index f18f82a..1454443 100644 --- a/crates/pdfs-gui/src/app/pages/activity_text.rs +++ b/crates/pdfs-gui/src/app/pages/activity_text.rs @@ -179,6 +179,10 @@ pub(crate) fn activity_title(kind: ActivityKind, ok: bool, name: &str) -> String (ActivityKind::Move, true) => gettext_f("Moved {name}", &args), // Translators: {name} is a file or folder name. (ActivityKind::Move, false) => gettext_f("Couldn't move {name}", &args), + // Translators: {name} is a file or folder name. + (ActivityKind::Copy, true) => gettext_f("Copied {name}", &args), + // Translators: {name} is a file or folder name. + (ActivityKind::Copy, false) => gettext_f("Couldn't copy {name}", &args), // Translators: {name} is a folder name. (ActivityKind::CreateFolder, true) => gettext_f("Created folder {name}", &args), // Translators: {name} is a folder name. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7393bed..26a5ae7 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -19,6 +19,10 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). the app asks GitHub once a day and shows a banner with a **Download** button when a newer version is out. It is off by default, and not offered for packages that a package manager updates (COPR, the AUR, Nix) (#42). +- **`pdfs copy` copies files and folders on Proton Drive**, without downloading or uploading + them: `pdfs copy ~/ProtonDrive/report.pdf ~/ProtonDrive/Archive`. A folder is copied with + everything in it, and a name already taken gets a " (1)" suffix. A file or folder with changes + that have not synced yet is refused until they have. ### Changed - **Reorganised documentation, now also on the diff --git a/docs/CLI.md b/docs/CLI.md index 0aa6b15..ffa582b 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -58,6 +58,7 @@ browser, complete it, then press Enter. | `pdfs mkdir PARENT NAME` | Create a folder. | | `pdfs rename PATH NEW_NAME` | Rename a file or folder. | | `pdfs move PATH... NEW_PARENT` | Move one or more files or folders into another folder. The two may be in different locations (My files, an on-demand or a mirrored synced folder); the move happens on Proton Drive, without downloading or uploading anything. | +| `pdfs copy PATH... NEW_PARENT` | Copy one or more files or folders into another folder in My files. The copy happens on Proton Drive, without downloading or uploading anything; a name already taken gets a " (1)" suffix. Changes that have not synced yet must sync first. | | `pdfs rm PATH` | Move to the Trash. | | `pdfs upload SOURCES... [-t FOLDER]` | Upload local files and folders (recursively) in the background. Follow with `pdfs transfers`. | | `pdfs refresh [TARGET] [--full]` | Forget a cached listing so the next read fetches it again. `TARGET` is a folder, `trash` or `photos`; `--full` with `photos` re-reads every photo's metadata. | diff --git a/po/de.po b/po/de.po index 5555d25..8b90cec 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A, %-d. %B %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -824,189 +824,201 @@ msgstr "{name} verschoben" msgid "Couldn't move {name}" msgstr "{name} konnte nicht verschoben werden" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "{name} kopiert" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "{name} konnte nicht kopiert werden" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Ordner {name} erstellt" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Ordner {name} konnte nicht erstellt werden" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "{name} in den Papierkorb verschoben" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "{name} konnte nicht in den Papierkorb verschoben werden" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "{name} wiederhergestellt" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "{name} konnte nicht wiederhergestellt werden" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "{name} endgültig gelöscht" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "{name} konnte nicht gelöscht werden" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Papierkorb geleert" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Papierkorb konnte nicht geleert werden" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "{name} geteilt" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "{name} konnte nicht geteilt werden" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Link zu {name} erstellt" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Link zu {name} konnte nicht erstellt werden" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Freigabe von {name} beendet" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Freigabe von {name} konnte nicht beendet werden" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Konfliktkopie {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "In Proton Drive entfernt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Auf diesem Computer entfernt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Durch eine umbenannte Datei ersetzt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "Der Zielordner existiert nicht mehr, daher blieb die Datei, wo sie war" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "Nach {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Vorher {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Eine frühere Version wiederhergestellt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Eine frühere Version gelöscht" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Eine frühere Version unter {path} gespeichert" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Beide behalten; die Kopie heißt jetzt {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "{name} behalten; die Kopie liegt im Papierkorb" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Konfliktkopie behalten" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "{name} behalten" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Identisch mit {name}, daher entfernt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "Der Name war vergeben, daher als {name} verschoben" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "Der Name war in Proton Drive vergeben, daher in {name} umbenannt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "Der Name war in Proton Drive vergeben, daher als {name} erstellt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1015,7 +1027,7 @@ msgstr "" "Sein Ordner wurde in Proton Drive in den Papierkorb verschoben, daher auf " "oberster Ebene als {name} erstellt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" @@ -1023,7 +1035,7 @@ msgstr "" "Die Datei existiert in Proton Drive nicht mehr, daher wurden deine " "Änderungen als {name} hochgeladen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1032,7 +1044,7 @@ msgstr "" "Die Datei wurde in Proton Drive in den Papierkorb verschoben, daher wurden " "deine Änderungen als {name} hochgeladen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1041,12 +1053,12 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Deine Änderungen wurden als {name} hochgeladen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" @@ -1054,7 +1066,7 @@ msgstr "" "Die Datei existiert in Proton Drive nicht mehr, daher wurden deine " "Änderungen in {path} aufbewahrt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1063,7 +1075,7 @@ msgstr "" "Die Datei wurde in Proton Drive in den Papierkorb verschoben, daher wurden " "deine Änderungen in {path} aufbewahrt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1072,59 +1084,59 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Deine Änderungen wurden in {path} aufbewahrt" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Unterscheidet sich von {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} existiert nicht mehr" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Identisch mit {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} Person kann ansehen" msgstr[1] "{n} Personen können ansehen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} Person kann bearbeiten" msgstr[1] "{n} Personen können bearbeiten" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} Person eingeladen" msgstr[1] "{n} Personen eingeladen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} Datei als Konfliktkopie behalten" msgstr[1] "{n} Dateien als Konfliktkopien behalten" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1132,8 +1144,8 @@ msgstr[0] "{n} Element fehlgeschlagen, wird erneut versucht" msgstr[1] "{n} Elemente fehlgeschlagen, werden erneut versucht" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1141,7 +1153,7 @@ msgstr[0] "{n} hochgeladen" msgstr[1] "{n} hochgeladen" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1149,7 +1161,7 @@ msgstr[0] "{n} heruntergeladen" msgstr[1] "{n} heruntergeladen" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1157,7 +1169,7 @@ msgstr[0] "{n} Ordner erstellt" msgstr[1] "{n} Ordner erstellt" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1165,7 +1177,7 @@ msgstr[0] "{n} gelöscht" msgstr[1] "{n} gelöscht" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1174,7 +1186,7 @@ msgstr[1] "{n} im Konflikt" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1182,28 +1194,28 @@ msgstr[0] "{n} noch geöffnet" msgstr[1] "{n} noch geöffnet" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} fehlgeschlagen" msgstr[1] "{n} fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Abgebrochen" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} bereits vorhanden" msgstr[1] "{n} bereits vorhanden" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/en_GB.po b/po/en_GB.po index 640f186..9a017b9 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -816,190 +816,202 @@ msgstr "Moved {name}" msgid "Couldn't move {name}" msgstr "Couldn't move {name}" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "Copied {name}" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "Couldn't copy {name}" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Created folder {name}" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Couldn't create folder {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "Moved {name} to the Trash" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "Couldn't move {name} to the Trash" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "Restored {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "Couldn't restore {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "Deleted {name} forever" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "Couldn't delete {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Emptied the Trash" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Couldn't empty the Trash" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "Shared {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "Couldn't share {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Created a link to {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Couldn't create a link to {name}" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Stopped sharing {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Couldn't stop sharing {name}" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Conflicting copy {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Removed on Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Removed on this computer" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Replaced by a renamed file" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "" "The destination folder no longer exists, so the file stayed where it was" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "To {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Previously {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Restored an earlier version" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Deleted an earlier version" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Saved an earlier version to {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Kept both; the copy is now {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "Kept {name}; the copy is in the Trash" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Kept the conflicting copy" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "Kept {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Same as {name}, so it was removed" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "The name was taken, so it was moved as {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "The name was taken on Proton Drive, so it was renamed to {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "The name was taken on Proton Drive, so it was created as {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1008,14 +1020,14 @@ msgstr "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " "top as {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" msgstr "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1024,7 +1036,7 @@ msgstr "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " "{name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1032,19 +1044,19 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Your changes were uploaded as {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" msgstr "" "It no longer exists on Proton Drive, so your changes were kept in {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1053,66 +1065,66 @@ msgstr "" "It was moved to the Trash on Proton Drive, so your changes were kept in " "{path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "It was changed on Proton Drive, so your changes were kept in {path}" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Your changes were kept in {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Differs from {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} no longer exists" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Same as {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} person can view" msgstr[1] "{n} people can view" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} person can edit" msgstr[1] "{n} people can edit" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} person invited" msgstr[1] "{n} people invited" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} file kept as a conflicting copy" msgstr[1] "{n} files kept as conflicting copies" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1120,8 +1132,8 @@ msgstr[0] "{n} item failed and will be tried again" msgstr[1] "{n} items failed and will be tried again" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1129,7 +1141,7 @@ msgstr[0] "{n} uploaded" msgstr[1] "{n} uploaded" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1137,7 +1149,7 @@ msgstr[0] "{n} downloaded" msgstr[1] "{n} downloaded" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1145,7 +1157,7 @@ msgstr[0] "{n} folder created" msgstr[1] "{n} folders created" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1153,7 +1165,7 @@ msgstr[0] "{n} deleted" msgstr[1] "{n} deleted" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1162,7 +1174,7 @@ msgstr[1] "{n} in conflict" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1170,28 +1182,28 @@ msgstr[0] "{n} still open" msgstr[1] "{n} still open" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} failed" msgstr[1] "{n} failed" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Cancelled" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} already there" msgstr[1] "{n} already there" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/es.po b/po/es.po index 3eb416c..0fb8f24 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -821,190 +821,202 @@ msgstr "Se movió {name}" msgid "Couldn't move {name}" msgstr "No se pudo mover {name}" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "Se copió {name}" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "No se pudo copiar {name}" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Se creó la carpeta {name}" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "No se pudo crear la carpeta {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "Se movió {name} a la papelera" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "No se pudo mover {name} a la papelera" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "Se restauró {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "No se pudo restaurar {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "Se eliminó {name} para siempre" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "No se pudo eliminar {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Se vació la papelera" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "No se pudo vaciar la papelera" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "Se compartió {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "No se pudo compartir {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Se creó un enlace a {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "No se pudo crear un enlace a {name}" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Se dejó de compartir {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "No se pudo dejar de compartir {name}" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Copia en conflicto {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Se quitó en Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Se quitó en este equipo" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Sustituido por un archivo renombrado" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "" "La carpeta de destino ya no existe, así que el archivo se quedó donde estaba" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "A {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Antes {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Se restauró una versión anterior" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Se eliminó una versión anterior" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Se guardó una versión anterior en {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Se conservaron ambos; la copia ahora es {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "Se conservó {name}; la copia está en la papelera" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Se conservó la copia en conflicto" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "Se conservó {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Igual que {name}, así que se quitó" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "El nombre ya existía, así que se movió como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "El nombre ya existía en Proton Drive, así que se renombró como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "El nombre ya existía en Proton Drive, así que se creó como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1013,14 +1025,14 @@ msgstr "" "Su carpeta se movió a la papelera en Proton Drive, así que se creó en el " "nivel superior como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" msgstr "" "Ya no existe en Proton Drive, así que sus cambios se subieron como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1029,7 +1041,7 @@ msgstr "" "Se movió a la papelera en Proton Drive, así que sus cambios se subieron como " "{name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1037,19 +1049,19 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Sus cambios se subieron como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" msgstr "" "Ya no existe en Proton Drive, así que sus cambios se guardaron en {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1058,7 +1070,7 @@ msgstr "" "Se movió a la papelera en Proton Drive, así que sus cambios se guardaron en " "{path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1066,59 +1078,59 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Sus cambios se guardaron en {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Difiere de {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} ya no existe" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Igual que {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} persona puede ver" msgstr[1] "{n} personas pueden ver" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} persona puede editar" msgstr[1] "{n} personas pueden editar" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} persona invitada" msgstr[1] "{n} personas invitadas" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} archivo se conservó como copia en conflicto" msgstr[1] "{n} archivos se conservaron como copias en conflicto" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1126,8 +1138,8 @@ msgstr[0] "{n} elemento falló y se volverá a intentar" msgstr[1] "{n} elementos fallaron y se volverán a intentar" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1135,7 +1147,7 @@ msgstr[0] "{n} subido" msgstr[1] "{n} subidos" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1143,7 +1155,7 @@ msgstr[0] "{n} descargado" msgstr[1] "{n} descargados" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1151,7 +1163,7 @@ msgstr[0] "{n} carpeta creada" msgstr[1] "{n} carpetas creadas" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1159,7 +1171,7 @@ msgstr[0] "{n} eliminado" msgstr[1] "{n} eliminados" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1168,7 +1180,7 @@ msgstr[1] "{n} en conflicto" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1176,28 +1188,28 @@ msgstr[0] "{n} aún abierto" msgstr[1] "{n} aún abiertos" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} fallido" msgstr[1] "{n} fallidos" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Cancelado" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} ya existía" msgstr[1] "{n} ya existían" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/fr.po b/po/fr.po index 507fc15..b52fc6d 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A %-d %B %Y à %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -824,194 +824,206 @@ msgstr "{name} déplacé" msgid "Couldn't move {name}" msgstr "Impossible de déplacer {name}" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "{name} copié" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "Impossible de copier {name}" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Dossier {name} créé" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Impossible de créer le dossier {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "{name} mis à la corbeille" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "Impossible de mettre {name} à la corbeille" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "{name} restauré" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "Impossible de restaurer {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "{name} supprimé définitivement" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "Impossible de supprimer {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Corbeille vidée" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Impossible de vider la corbeille" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "{name} partagé" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "Impossible de partager {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Lien vers {name} créé" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Impossible de créer un lien vers {name}" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Partage de {name} arrêté" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Impossible d’arrêter le partage de {name}" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Copie en conflit {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Retiré sur Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Retiré sur cet ordinateur" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Remplacé par un fichier renommé" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "" "Le dossier de destination n’existe plus, le fichier est donc resté à sa place" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "Vers {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Auparavant {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Version antérieure restaurée" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Version antérieure supprimée" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Version antérieure enregistrée dans {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Les deux ont été conservés ; la copie s’appelle maintenant {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "{name} conservé ; la copie est dans la corbeille" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Copie en conflit conservée" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "{name} conservé" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Identique à {name}, donc retiré" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "" "Le nom était déjà pris, l’élément a donc été déplacé sous le nom {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "" "Le nom était déjà pris sur Proton Drive, l’élément a donc été renommé {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "" "Le nom était déjà pris sur Proton Drive, l’élément a donc été créé sous le " "nom {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1020,7 +1032,7 @@ msgstr "" "Son dossier a été mis à la corbeille sur Proton Drive, l’élément a donc été " "créé à la racine sous le nom {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" @@ -1028,7 +1040,7 @@ msgstr "" "Le fichier n’existe plus sur Proton Drive, vos modifications ont donc été " "envoyées sous le nom {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1037,7 +1049,7 @@ msgstr "" "Le fichier a été mis à la corbeille sur Proton Drive, vos modifications ont " "donc été envoyées sous le nom {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1046,12 +1058,12 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Vos modifications ont été envoyées sous le nom {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" @@ -1059,7 +1071,7 @@ msgstr "" "Le fichier n’existe plus sur Proton Drive, vos modifications ont donc été " "conservées dans {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1068,7 +1080,7 @@ msgstr "" "Le fichier a été mis à la corbeille sur Proton Drive, vos modifications ont " "donc été conservées dans {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1077,59 +1089,59 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Vos modifications ont été conservées dans {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Diffère de {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} n’existe plus" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Identique à {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} personne peut consulter" msgstr[1] "{n} personnes peuvent consulter" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} personne peut modifier" msgstr[1] "{n} personnes peuvent modifier" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} personne invitée" msgstr[1] "{n} personnes invitées" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} fichier conservé comme copie en conflit" msgstr[1] "{n} fichiers conservés comme copies en conflit" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1137,8 +1149,8 @@ msgstr[0] "{n} élément a échoué et sera réessayé" msgstr[1] "{n} éléments ont échoué et seront réessayés" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1146,7 +1158,7 @@ msgstr[0] "{n} téléversé" msgstr[1] "{n} téléversés" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1154,7 +1166,7 @@ msgstr[0] "{n} téléchargé" msgstr[1] "{n} téléchargés" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1162,7 +1174,7 @@ msgstr[0] "{n} dossier créé" msgstr[1] "{n} dossiers créés" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1170,7 +1182,7 @@ msgstr[0] "{n} supprimé" msgstr[1] "{n} supprimés" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1179,7 +1191,7 @@ msgstr[1] "{n} en conflit" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1187,28 +1199,28 @@ msgstr[0] "{n} encore ouvert" msgstr[1] "{n} encore ouverts" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} en échec" msgstr[1] "{n} en échec" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Annulé" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} déjà présent" msgstr[1] "{n} déjà présents" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/it.po b/po/it.po index 09893d8..2ff25fc 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -820,192 +820,204 @@ msgstr "Spostato {name}" msgid "Couldn't move {name}" msgstr "Impossibile spostare {name}" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "Copiato {name}" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "Impossibile copiare {name}" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Creata la cartella {name}" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Impossibile creare la cartella {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "Spostato {name} nel cestino" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "Impossibile spostare {name} nel cestino" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "Ripristinato {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "Impossibile ripristinare {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "Eliminato {name} per sempre" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "Impossibile eliminare {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Svuotato il cestino" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Impossibile svuotare il cestino" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "Condiviso {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "Impossibile condividere {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Creato un collegamento a {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Impossibile creare un collegamento a {name}" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Condivisione di {name} interrotta" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Impossibile interrompere la condivisione di {name}" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Copia in conflitto {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Rimosso su Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Rimosso su questo computer" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Sostituito da un file rinominato" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "" "La cartella di destinazione non esiste più, quindi il file è rimasto dov’era" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "In {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "In precedenza {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Ripristinata una versione precedente" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Eliminata una versione precedente" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Salvata una versione precedente in {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Mantenuti entrambi; la copia ora è {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "Mantenuto {name}; la copia è nel cestino" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Mantenuta la copia in conflitto" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "Mantenuto {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Uguale a {name}, quindi è stato rimosso" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "Il nome era già in uso, quindi è stato spostato come {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "" "Il nome era già in uso su Proton Drive, quindi è stato rinominato in {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "" "Il nome era già in uso su Proton Drive, quindi è stato creato come {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1014,7 +1026,7 @@ msgstr "" "La sua cartella è stata spostata nel cestino su Proton Drive, quindi è stato " "creato al primo livello come {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" @@ -1022,7 +1034,7 @@ msgstr "" "Non esiste più su Proton Drive, quindi le tue modifiche sono state caricate " "come {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1031,7 +1043,7 @@ msgstr "" "È stato spostato nel cestino su Proton Drive, quindi le tue modifiche sono " "state caricate come {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1040,12 +1052,12 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Le tue modifiche sono state caricate come {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" @@ -1053,7 +1065,7 @@ msgstr "" "Non esiste più su Proton Drive, quindi le tue modifiche sono state " "conservate in {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1062,7 +1074,7 @@ msgstr "" "È stato spostato nel cestino su Proton Drive, quindi le tue modifiche sono " "state conservate in {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1071,59 +1083,59 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Le tue modifiche sono state conservate in {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Diverso da {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} non esiste più" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Uguale a {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} persona può visualizzare" msgstr[1] "{n} persone possono visualizzare" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} persona può modificare" msgstr[1] "{n} persone possono modificare" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} persona invitata" msgstr[1] "{n} persone invitate" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} file mantenuto come copia in conflitto" msgstr[1] "{n} file mantenuti come copie in conflitto" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1131,8 +1143,8 @@ msgstr[0] "{n} elemento non riuscito, verrà riprovato" msgstr[1] "{n} elementi non riusciti, verranno riprovati" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1140,7 +1152,7 @@ msgstr[0] "{n} caricato" msgstr[1] "{n} caricati" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1148,7 +1160,7 @@ msgstr[0] "{n} scaricato" msgstr[1] "{n} scaricati" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1156,7 +1168,7 @@ msgstr[0] "{n} cartella creata" msgstr[1] "{n} cartelle create" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1164,7 +1176,7 @@ msgstr[0] "{n} eliminato" msgstr[1] "{n} eliminati" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1173,7 +1185,7 @@ msgstr[1] "{n} in conflitto" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1181,28 +1193,28 @@ msgstr[0] "{n} ancora aperto" msgstr[1] "{n} ancora aperti" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} non riuscito" msgstr[1] "{n} non riusciti" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Annullato" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} già presente" msgstr[1] "{n} già presenti" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/nl.po b/po/nl.po index adc8ef5..d36d279 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -821,189 +821,201 @@ msgstr "{name} verplaatst" msgid "Couldn't move {name}" msgstr "Kon {name} niet verplaatsen" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "{name} gekopieerd" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "Kon {name} niet kopiëren" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Map {name} aangemaakt" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Kon map {name} niet aanmaken" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "{name} naar de prullenbak verplaatst" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "Kon {name} niet naar de prullenbak verplaatsen" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "{name} teruggezet" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "Kon {name} niet terugzetten" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "{name} definitief verwijderd" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "Kon {name} niet verwijderen" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Prullenbak geleegd" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Kon de prullenbak niet legen" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "{name} gedeeld" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "Kon {name} niet delen" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Link naar {name} aangemaakt" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Kon geen link naar {name} aanmaken" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Delen van {name} gestopt" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Kon het delen van {name} niet stoppen" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Conflictkopie {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Verwijderd in Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Verwijderd op deze computer" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Vervangen door een hernoemd bestand" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "De doelmap bestaat niet meer, dus het bestand is gebleven waar het was" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "Naar {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Eerder {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Een eerdere versie teruggezet" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Een eerdere versie verwijderd" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Een eerdere versie opgeslagen in {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Beide behouden; de kopie heet nu {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "{name} behouden; de kopie staat in de prullenbak" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Conflictkopie behouden" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "{name} behouden" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Hetzelfde als {name}, dus verwijderd" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "De naam was al in gebruik, dus verplaatst als {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "De naam was al in gebruik in Proton Drive, dus hernoemd naar {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "De naam was al in gebruik in Proton Drive, dus aangemaakt als {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1012,7 +1024,7 @@ msgstr "" "De map ervan is in Proton Drive naar de prullenbak verplaatst, dus " "aangemaakt op het hoogste niveau als {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" @@ -1020,7 +1032,7 @@ msgstr "" "Het bestaat niet meer in Proton Drive, dus je wijzigingen zijn geüpload als " "{name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1029,7 +1041,7 @@ msgstr "" "Het is in Proton Drive naar de prullenbak verplaatst, dus je wijzigingen " "zijn geüpload als {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1037,12 +1049,12 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Je wijzigingen zijn geüpload als {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" @@ -1050,7 +1062,7 @@ msgstr "" "Het bestaat niet meer in Proton Drive, dus je wijzigingen zijn bewaard in " "{path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1059,7 +1071,7 @@ msgstr "" "Het is in Proton Drive naar de prullenbak verplaatst, dus je wijzigingen " "zijn bewaard in {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1067,59 +1079,59 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Je wijzigingen zijn bewaard in {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Verschilt van {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} bestaat niet meer" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Hetzelfde als {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} persoon kan bekijken" msgstr[1] "{n} personen kunnen bekijken" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} persoon kan bewerken" msgstr[1] "{n} personen kunnen bewerken" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} persoon uitgenodigd" msgstr[1] "{n} personen uitgenodigd" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} bestand behouden als conflictkopie" msgstr[1] "{n} bestanden behouden als conflictkopieën" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1127,8 +1139,8 @@ msgstr[0] "{n} item mislukt en wordt opnieuw geprobeerd" msgstr[1] "{n} items mislukt en worden opnieuw geprobeerd" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1136,7 +1148,7 @@ msgstr[0] "{n} geüpload" msgstr[1] "{n} geüpload" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1144,7 +1156,7 @@ msgstr[0] "{n} gedownload" msgstr[1] "{n} gedownload" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1152,7 +1164,7 @@ msgstr[0] "{n} map aangemaakt" msgstr[1] "{n} mappen aangemaakt" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1160,7 +1172,7 @@ msgstr[0] "{n} verwijderd" msgstr[1] "{n} verwijderd" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1169,7 +1181,7 @@ msgstr[1] "{n} in conflict" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1177,28 +1189,28 @@ msgstr[0] "{n} nog geopend" msgstr[1] "{n} nog geopend" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} mislukt" msgstr[1] "{n} mislukt" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Geannuleerd" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} al aanwezig" msgstr[1] "{n} al aanwezig" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/pdfs.pot b/po/pdfs.pot index 19f0a40..75ce199 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.5.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -61,7 +61,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -791,293 +791,305 @@ msgstr "" msgid "Couldn't move {name}" msgstr "" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 -msgid "Couldn't empty the Trash" -msgstr "" - -#. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 -#, rust-format -msgid "Shared {name}" -msgstr "" - -#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:203 -#, rust-format -msgid "Couldn't share {name}" +msgid "Couldn't empty the Trash" msgstr "" #. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format -msgid "Created a link to {name}" +msgid "Shared {name}" msgstr "" #. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format +msgid "Couldn't share {name}" +msgstr "" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#, rust-format +msgid "Created a link to {name}" +msgstr "" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#, rust-format msgid "Couldn't create a link to {name}" msgstr "" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " "top as {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " "{name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " "{path}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1085,8 +1097,8 @@ msgstr[0] "" msgstr[1] "" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1094,7 +1106,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1102,7 +1114,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1110,7 +1122,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1118,7 +1130,7 @@ msgstr[0] "" msgstr[1] "" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1127,7 +1139,7 @@ msgstr[1] "" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1135,28 +1147,28 @@ msgstr[0] "" msgstr[1] "" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/pl.po b/po/pl.po index a1d7248..3d07192 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -60,7 +60,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A, %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -840,189 +840,201 @@ msgstr "Przeniesiono {name}" msgid "Couldn't move {name}" msgstr "Nie można przenieść {name}" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "Skopiowano {name}" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "Nie można skopiować {name}" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Utworzono katalog {name}" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Nie można utworzyć katalogu {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "Przeniesiono {name} do kosza" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "Nie można przenieść {name} do kosza" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "Przywrócono {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "Nie można przywrócić {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "Trwale usunięto {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "Nie można usunąć {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Opróżniono kosz" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Nie można opróżnić kosza" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "Udostępniono {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "Nie można udostępnić {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Utworzono odnośnik do {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Nie można utworzyć odnośnika do {name}" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "Zakończono udostępnianie {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Nie można zakończyć udostępniania {name}" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Kopia konfliktowa {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Usunięto w Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Usunięto na tym komputerze" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Zastąpiono plikiem o zmienionej nazwie" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "Katalog docelowy już nie istnieje, więc plik pozostał na miejscu" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "Do {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Wcześniej {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Przywrócono wcześniejszą wersję" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Usunięto wcześniejszą wersję" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Zapisano wcześniejszą wersję w {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Zachowano oba; kopia to teraz {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "Zachowano {name}; kopia jest w koszu" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Zachowano kopię konfliktową" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "Zachowano {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Taki sam jak {name}, więc został usunięty" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "Nazwa była zajęta, więc przeniesiono jako {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "Nazwa była zajęta w Proton Drive, więc zmieniono ją na {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "Nazwa była zajęta w Proton Drive, więc utworzono jako {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1031,14 +1043,14 @@ msgstr "" "Jego katalog został przeniesiony do kosza w Proton Drive, więc utworzono go " "na najwyższym poziomie jako {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" msgstr "" "Plik już nie istnieje w Proton Drive, więc Twoje zmiany przesłano jako {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1047,7 +1059,7 @@ msgstr "" "Plik został przeniesiony do kosza w Proton Drive, więc Twoje zmiany " "przesłano jako {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1055,19 +1067,19 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Twoje zmiany przesłano jako {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" msgstr "" "Plik już nie istnieje w Proton Drive, więc Twoje zmiany zachowano w {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1076,7 +1088,7 @@ msgstr "" "Plik został przeniesiony do kosza w Proton Drive, więc Twoje zmiany " "zachowano w {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1084,31 +1096,31 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Twoje zmiany zachowano w {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Różni się od {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} już nie istnieje" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Taki sam jak {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" @@ -1116,7 +1128,7 @@ msgstr[0] "Osoby z prawem do wyświetlania: {n}" msgstr[1] "Osoby z prawem do wyświetlania: {n}" msgstr[2] "Osoby z prawem do wyświetlania: {n}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" @@ -1124,7 +1136,7 @@ msgstr[0] "Osoby z prawem do edycji: {n}" msgstr[1] "Osoby z prawem do edycji: {n}" msgstr[2] "Osoby z prawem do edycji: {n}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" @@ -1132,7 +1144,7 @@ msgstr[0] "Zaproszone osoby: {n}" msgstr[1] "Zaproszone osoby: {n}" msgstr[2] "Zaproszone osoby: {n}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" @@ -1140,7 +1152,7 @@ msgstr[0] "Pliki zachowane jako kopie konfliktowe: {n}" msgstr[1] "Pliki zachowane jako kopie konfliktowe: {n}" msgstr[2] "Pliki zachowane jako kopie konfliktowe: {n}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1149,8 +1161,8 @@ msgstr[1] "Nieudane elementy, które zostaną ponowione: {n}" msgstr[2] "Nieudane elementy, które zostaną ponowione: {n}" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1159,7 +1171,7 @@ msgstr[1] "Wysłano: {n}" msgstr[2] "Wysłano: {n}" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1168,7 +1180,7 @@ msgstr[1] "Pobrano: {n}" msgstr[2] "Pobrano: {n}" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1177,7 +1189,7 @@ msgstr[1] "Utworzone katalogi: {n}" msgstr[2] "Utworzone katalogi: {n}" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1186,7 +1198,7 @@ msgstr[1] "Usunięto: {n}" msgstr[2] "Usunięto: {n}" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1196,7 +1208,7 @@ msgstr[2] "W konflikcie: {n}" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1205,8 +1217,8 @@ msgstr[1] "Wciąż otwarte: {n}" msgstr[2] "Wciąż otwarte: {n}" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" @@ -1214,13 +1226,13 @@ msgstr[0] "Niepowodzenia: {n}" msgstr[1] "Niepowodzenia: {n}" msgstr[2] "Niepowodzenia: {n}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Anulowano" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" @@ -1228,7 +1240,7 @@ msgstr[0] "Już obecne: {n}" msgstr[1] "Już obecne: {n}" msgstr[2] "Już obecne: {n}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format diff --git a/po/pt_BR.po b/po/pt_BR.po index 0bba657..62778e1 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-17 01:23+0200\n" +"POT-Creation-Date: 2026-10-25 20:52+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -58,7 +58,7 @@ msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/main.rs:856 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:539 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:1239 @@ -820,189 +820,201 @@ msgstr "{name} movido" msgid "Couldn't move {name}" msgstr "Não foi possível mover {name}" -#. Translators: {name} is a folder name. +#. Translators: {name} is a file or folder name. #: crates/pdfs-gui/src/app/pages/activity_text.rs:183 #, rust-format +msgid "Copied {name}" +msgstr "{name} copiado" + +#. Translators: {name} is a file or folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#, rust-format +msgid "Couldn't copy {name}" +msgstr "Não foi possível copiar {name}" + +#. Translators: {name} is a folder name. +#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#, rust-format msgid "Created folder {name}" msgstr "Pasta {name} criada" #. Translators: {name} is a folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:185 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 #, rust-format msgid "Couldn't create folder {name}" msgstr "Não foi possível criar a pasta {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:187 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 #, rust-format msgid "Moved {name} to the Trash" msgstr "{name} movido para a lixeira" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:189 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 #, rust-format msgid "Couldn't move {name} to the Trash" msgstr "Não foi possível mover {name} para a lixeira" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:191 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 #, rust-format msgid "Restored {name}" msgstr "{name} restaurado" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:193 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 #, rust-format msgid "Couldn't restore {name}" msgstr "Não foi possível restaurar {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:195 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 #, rust-format msgid "Deleted {name} forever" msgstr "{name} excluído para sempre" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:197 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 #, rust-format msgid "Couldn't delete {name}" msgstr "Não foi possível excluir {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:198 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:202 msgid "Emptied the Trash" msgstr "Lixeira esvaziada" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:199 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 msgid "Couldn't empty the Trash" msgstr "Não foi possível esvaziar a lixeira" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:201 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 #, rust-format msgid "Shared {name}" msgstr "{name} compartilhado" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:203 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 #, rust-format msgid "Couldn't share {name}" msgstr "Não foi possível compartilhar {name}" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:205 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 #, rust-format msgid "Created a link to {name}" msgstr "Link para {name} criado" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:207 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 #, rust-format msgid "Couldn't create a link to {name}" msgstr "Não foi possível criar um link para {name}" #. Translators: {name} is a file or folder name. #. Translators: {name} is the item's name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:209 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:559 #, rust-format msgid "Stopped sharing {name}" msgstr "{name} deixou de ser compartilhado" #. Translators: {name} is a file or folder name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:211 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:215 #, rust-format msgid "Couldn't stop sharing {name}" msgstr "Não foi possível parar de compartilhar {name}" #. Translators: {name} is the name of the conflicting copy. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:213 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:217 #, rust-format msgid "Conflicting copy {name}" msgstr "Cópia em conflito {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:236 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:240 msgid "Removed on Proton Drive" msgstr "Removido no Proton Drive" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:237 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:241 msgid "Removed on this computer" msgstr "Removido neste computador" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:239 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 msgid "Replaced by a renamed file" msgstr "Substituído por um arquivo renomeado" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:243 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:247 msgid "" "The destination folder no longer exists, so the file stayed where it was" msgstr "A pasta de destino não existe mais, então o arquivo ficou onde estava" #. Translators: {name} is the folder an item was moved into. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:262 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 #, rust-format msgid "To {name}" msgstr "Para {name}" #. Translators: {name} is an item's previous name. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:266 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:270 #, rust-format msgid "Previously {name}" msgstr "Antes {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:269 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:273 msgid "Restored an earlier version" msgstr "Versão anterior restaurada" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:272 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:276 msgid "Deleted an earlier version" msgstr "Versão anterior excluída" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:279 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:283 #, rust-format msgid "Saved an earlier version to {path}" msgstr "Versão anterior salva em {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:286 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:290 #, rust-format msgid "Kept both; the copy is now {name}" msgstr "Ambos mantidos; a cópia agora é {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:296 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:300 #, rust-format msgid "Kept {name}; the copy is in the Trash" msgstr "{name} mantido; a cópia está na lixeira" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:301 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 msgid "Kept the conflicting copy" msgstr "Cópia em conflito mantida" #. Translators: {name} is the file that was kept. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:305 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:309 #, rust-format msgid "Kept {name}" msgstr "{name} mantido" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:310 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:314 #, rust-format msgid "Same as {name}, so it was removed" msgstr "Igual a {name}, então foi removido" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:317 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:321 #, rust-format msgid "The name was taken, so it was moved as {name}" msgstr "O nome já existia, então foi movido como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:324 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:328 #, rust-format msgid "The name was taken on Proton Drive, so it was renamed to {name}" msgstr "O nome já existia no Proton Drive, então foi renomeado para {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:331 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:335 #, rust-format msgid "The name was taken on Proton Drive, so it was created as {name}" msgstr "O nome já existia no Proton Drive, então foi criado como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:340 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:344 #, rust-format msgid "" "Its folder was moved to the Trash on Proton Drive, so it was created at the " @@ -1011,7 +1023,7 @@ msgstr "" "A pasta dele foi movida para a lixeira no Proton Drive, então foi criado no " "nível superior como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:350 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:354 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were uploaded as {name}" @@ -1019,7 +1031,7 @@ msgstr "" "Ele não existe mais no Proton Drive, então suas alterações foram enviadas " "como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:356 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:360 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were uploaded as " @@ -1028,7 +1040,7 @@ msgstr "" "Ele foi movido para a lixeira no Proton Drive, então suas alterações foram " "enviadas como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:362 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:366 #, rust-format msgid "It was changed on Proton Drive, so your changes were uploaded as {name}" msgstr "" @@ -1037,12 +1049,12 @@ msgstr "" #. Translators: {name} is the copy the changes made on this #. computer were uploaded as. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:367 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:371 #, rust-format msgid "Your changes were uploaded as {name}" msgstr "Suas alterações foram enviadas como {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:377 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:381 #, rust-format msgid "" "It no longer exists on Proton Drive, so your changes were kept in {path}" @@ -1050,7 +1062,7 @@ msgstr "" "Ele não existe mais no Proton Drive, então suas alterações foram mantidas em " "{path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:383 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:387 #, rust-format msgid "" "It was moved to the Trash on Proton Drive, so your changes were kept in " @@ -1059,7 +1071,7 @@ msgstr "" "Ele foi movido para a lixeira no Proton Drive, então suas alterações foram " "mantidas em {path}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:389 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:393 #, rust-format msgid "It was changed on Proton Drive, so your changes were kept in {path}" msgstr "" @@ -1068,59 +1080,59 @@ msgstr "" #. Translators: {path} is the file on this computer that holds the #. changes which could not be uploaded. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:394 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:398 #, rust-format msgid "Your changes were kept in {path}" msgstr "Suas alterações foram mantidas em {path}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:399 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:403 #: crates/pdfs-gui/src/app/pages/locations.rs:989 #, rust-format msgid "Differs from {name}" msgstr "Difere de {name}" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:406 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:410 #, rust-format msgid "{name} no longer exists" msgstr "{name} não existe mais" #. Translators: {name} is the file the conflicting copy was made from. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:413 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:417 #, rust-format msgid "Same as {name}" msgstr "Igual a {name}" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:420 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:424 #, rust-format msgid "{n} person can view" msgid_plural "{n} people can view" msgstr[0] "{n} pessoa pode ver" msgstr[1] "{n} pessoas podem ver" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:421 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:425 #, rust-format msgid "{n} person can edit" msgid_plural "{n} people can edit" msgstr[0] "{n} pessoa pode editar" msgstr[1] "{n} pessoas podem editar" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:422 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:426 #, rust-format msgid "{n} person invited" msgid_plural "{n} people invited" msgstr[0] "{n} pessoa convidada" msgstr[1] "{n} pessoas convidadas" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:427 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:431 #, rust-format msgid "{n} file kept as a conflicting copy" msgid_plural "{n} files kept as conflicting copies" msgstr[0] "{n} arquivo mantido como cópia em conflito" msgstr[1] "{n} arquivos mantidos como cópias em conflito" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:435 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:439 #, rust-format msgid "{n} item failed and will be tried again" msgid_plural "{n} items failed and will be tried again" @@ -1128,8 +1140,8 @@ msgstr[0] "{n} item falhou e será tentado novamente" msgstr[1] "{n} itens falharam e serão tentados novamente" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:473 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:504 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 #, rust-format msgid "{n} uploaded" msgid_plural "{n} uploaded" @@ -1137,7 +1149,7 @@ msgstr[0] "{n} enviado" msgstr[1] "{n} enviados" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:475 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 #, rust-format msgid "{n} downloaded" msgid_plural "{n} downloaded" @@ -1145,7 +1157,7 @@ msgstr[0] "{n} baixado" msgstr[1] "{n} baixados" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:477 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 #, rust-format msgid "{n} folder created" msgid_plural "{n} folders created" @@ -1153,7 +1165,7 @@ msgstr[0] "{n} pasta criada" msgstr[1] "{n} pastas criadas" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:479 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:483 #, rust-format msgid "{n} deleted" msgid_plural "{n} deleted" @@ -1161,7 +1173,7 @@ msgstr[0] "{n} excluído" msgstr[1] "{n} excluídos" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:481 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:485 #, rust-format msgid "{n} in conflict" msgid_plural "{n} in conflict" @@ -1170,7 +1182,7 @@ msgstr[1] "{n} em conflito" #. Translators: part of a list summing up a sync pass; the files are #. still open in another app. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:484 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:488 #, rust-format msgid "{n} still open" msgid_plural "{n} still open" @@ -1178,28 +1190,28 @@ msgstr[0] "{n} ainda aberto" msgstr[1] "{n} ainda abertos" #. Translators: part of a list summing up a sync pass. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:486 -#: crates/pdfs-gui/src/app/pages/activity_text.rs:509 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:490 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:513 #, rust-format msgid "{n} failed" msgid_plural "{n} failed" msgstr[0] "{n} com falha" msgstr[1] "{n} com falha" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:498 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:502 msgid "Cancelled" msgstr "Cancelado" #. Translators: photos an import skipped because they were already #. in Proton Drive. -#: crates/pdfs-gui/src/app/pages/activity_text.rs:507 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:511 #, rust-format msgid "{n} already there" msgid_plural "{n} already there" msgstr[0] "{n} já existia" msgstr[1] "{n} já existiam" -#: crates/pdfs-gui/src/app/pages/activity_text.rs:508 +#: crates/pdfs-gui/src/app/pages/activity_text.rs:512 #: crates/pdfs-gui/src/app/pages/albums.rs:107 #: crates/pdfs-gui/src/app/pages/albums.rs:694 #, rust-format From ee59e338b65426fd383badd2fd7e322fc0589ad5 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 25 Oct 2026 21:41:21 +0100 Subject: [PATCH 2/9] feat(gui): make a copy and copy to another folder in My files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The entry menu gains Make a Copy, which copies an item next to itself, and Copy To…, which reuses the move folder picker limited to My files; Copy To… is also in the selection menu. Both send Request::Copy, so the copy is made on Proton Drive. The move and copy reports share one request loop. Docs describe the new actions, and the changelog notes that saved public links now show their names once the SDK decrypts them. --- crates/pdfs-gui/src/app/pages/browser.rs | 246 ++++++++++++++--- docs/CHANGELOG.md | 17 +- docs/FILES.md | 6 + docs/SHARING.md | 3 +- po/de.po | 335 +++++++++++++--------- po/en_GB.po | 335 +++++++++++++--------- po/es.po | 335 +++++++++++++--------- po/fr.po | 335 +++++++++++++--------- po/it.po | 335 +++++++++++++--------- po/nl.po | 335 +++++++++++++--------- po/pdfs.pot | 331 +++++++++++++--------- po/pl.po | 338 ++++++++++++++--------- po/pt_BR.po | 335 +++++++++++++--------- 13 files changed, 1995 insertions(+), 1291 deletions(-) diff --git a/crates/pdfs-gui/src/app/pages/browser.rs b/crates/pdfs-gui/src/app/pages/browser.rs index 0493a76..b24130e 100644 --- a/crates/pdfs-gui/src/app/pages/browser.rs +++ b/crates/pdfs-gui/src/app/pages/browser.rs @@ -904,6 +904,12 @@ pub(crate) fn entry_context_menu(ui: &Rc, entry: &DirEntry) -> ActionMenu { menu.item(&gettext("Move To…"), move || { prompt_move(&ui_c, vec![entry_c.clone()]) }); + let (ui_c, entry_c) = (ui.clone(), entry.clone()); + menu.item(&gettext("Make a Copy"), move || make_copy(&ui_c, &entry_c)); + let (ui_c, entry_c) = (ui.clone(), entry.clone()); + menu.item(&gettext("Copy To…"), move || { + prompt_copy(&ui_c, vec![entry_c.clone()]) + }); if !entry.is_dir { let (ui_c, entry_c) = (ui.clone(), entry.clone()); menu.item(&gettext("Versions…"), move || { @@ -938,6 +944,10 @@ pub(crate) fn bulk_context_menu(ui: &Rc, entries: Vec) -> ActionMe menu.item(&gettext("Move To…"), move || { prompt_move(&ui_c, batch.clone()) }); + let (ui_c, batch) = (ui.clone(), entries.clone()); + menu.item(&gettext("Copy To…"), move || { + prompt_copy(&ui_c, batch.clone()) + }); menu.labelled_section(&ngettext_f( "{n} selected", "{n} selected", @@ -1940,17 +1950,63 @@ pub(crate) fn prompt_rename(ui: &Rc, entry: &DirEntry) { /// still made on Proton Drive, so nothing is downloaded or uploaded again; it /// is sent with absolute paths, which is how the daemon tells locations apart. pub(crate) fn prompt_move(ui: &Rc, entries: Vec) { + prompt_destination(ui, entries, PickerKind::Move); +} + +/// Ask where to copy `entries`, then copy them there on Proton Drive. Only +/// My files is offered: a copy is made on the server, inside the mount. +pub(crate) fn prompt_copy(ui: &Rc, entries: Vec) { + prompt_destination(ui, entries, PickerKind::Copy); +} + +/// Copy one entry into the folder it is in. The copy gets a free name, such +/// as "report (1).pdf". +pub(crate) fn make_copy(ui: &Rc, entry: &DirEntry) { + let source = entry_rel(ui, entry); + let parent = source + .rfind('/') + .map(|i| source[..i].to_string()) + .unwrap_or_default(); + run_bulk_copy(ui, vec![source], parent); +} + +/// What the folder picker chooses a destination for. +#[derive(Clone, Copy, Debug, PartialEq)] +pub(crate) enum PickerKind { + Move, + Copy, +} + +fn prompt_destination(ui: &Rc, entries: Vec, kind: PickerKind) { if entries.is_empty() { return; } let sources: Vec = entries.iter().map(|e| entry_rel(ui, e)).collect(); - let heading = match entries.as_slice() { - [one] => gettext_f("Move “{name}”", &[("name", &one.name)]), - many => ngettext_f("Move {n} item", "Move {n} items", many.len() as u64, &[]), + let (heading, body, confirm) = match (kind, entries.as_slice()) { + (PickerKind::Move, [one]) => ( + gettext_f("Move “{name}”", &[("name", &one.name)]), + gettext("Choose the folder to move into."), + gettext("Move Here"), + ), + (PickerKind::Move, many) => ( + ngettext_f("Move {n} item", "Move {n} items", many.len() as u64, &[]), + gettext("Choose the folder to move into."), + gettext("Move Here"), + ), + (PickerKind::Copy, [one]) => ( + gettext_f("Copy “{name}”", &[("name", &one.name)]), + gettext("Choose the folder to copy into."), + gettext("Copy Here"), + ), + (PickerKind::Copy, many) => ( + ngettext_f("Copy {n} item", "Copy {n} items", many.len() as u64, &[]), + gettext("Choose the folder to copy into."), + gettext("Copy Here"), + ), }; let dialog = adw::AlertDialog::builder() .heading(heading) - .body(gettext("Choose the folder to move into.")) + .body(body) .build(); let up = gtk4::Button::builder() @@ -1981,7 +2037,7 @@ pub(crate) fn prompt_move(ui: &Rc, entries: Vec) { body.append(&scroll); dialog.set_extra_child(Some(&body)); dialog.add_response("cancel", &gettext("Cancel")); - dialog.add_response("move", &gettext("Move Here")); + dialog.add_response("move", &confirm); dialog.set_response_appearance("move", adw::ResponseAppearance::Suggested); dialog.set_default_response(Some("move")); dialog.set_close_response("cancel"); @@ -1994,6 +2050,7 @@ pub(crate) fn prompt_move(ui: &Rc, entries: Vec) { list, up: up.clone(), sources: sources.clone(), + kind, folder: RefCell::new(MoveTarget::Locations), generation: Cell::new(0), }); @@ -2013,6 +2070,10 @@ pub(crate) fn prompt_move(ui: &Rc, entries: Vec) { } match picker_done.folder.borrow().clone() { MoveTarget::Locations => {} + MoveTarget::Drive(folder) if kind == PickerKind::Copy => { + run_bulk_copy(&ui, sources.clone(), folder) + } + MoveTarget::Synced { .. } if kind == PickerKind::Copy => {} MoveTarget::Drive(folder) => run_bulk_move(&ui, sources.clone(), folder), MoveTarget::Synced { path, .. } => { let absolute = sources @@ -2088,8 +2149,9 @@ struct MovePicker { location: gtk4::Label, list: gtk4::ListBox, up: gtk4::Button, - /// What is being moved, mountpoint-relative. + /// What is being moved or copied, mountpoint-relative. sources: Vec, + kind: PickerKind, /// The folder on show, and the destination if the user confirms now. folder: RefCell, /// Drops a listing that arrives after the user went elsewhere. @@ -2110,11 +2172,13 @@ impl MovePicker { self.location.set_tooltip_text(Some(&tooltip)); self.up .set_sensitive(!matches!(folder, MoveTarget::Locations)); - let allowed = match &folder { - MoveTarget::Locations => false, - MoveTarget::Drive(rel) => move_target_allowed(&self.sources, rel), + let allowed = match (&folder, self.kind) { + (MoveTarget::Locations, _) => false, + (MoveTarget::Drive(rel), PickerKind::Move) => move_target_allowed(&self.sources, rel), + (MoveTarget::Drive(rel), PickerKind::Copy) => copy_target_allowed(&self.sources, rel), // What is moved is in My files, so it cannot be in a synced folder. - MoveTarget::Synced { .. } => true, + (MoveTarget::Synced { .. }, PickerKind::Move) => true, + (MoveTarget::Synced { .. }, PickerKind::Copy) => false, }; self.dialog.set_response_enabled("move", allowed); *self.folder.borrow_mut() = folder.clone(); @@ -2180,6 +2244,10 @@ impl MovePicker { /// My files and every synced folder, as rows of the top level. async fn locations(&self) -> Option> { let mut rows = vec![(gettext("My files"), None, MoveTarget::Drive(String::new()))]; + // A copy is made on the server, so it can only land in My files. + if self.kind == PickerKind::Copy { + return Some(rows); + } let rx = spawn_request(self.ui.dirs.control_socket(), Request::ListSyncFolders); let Ok(Ok(Response::SyncFolders { mut items })) = rx.recv().await else { // My files alone is still somewhere to move to. @@ -2286,11 +2354,16 @@ pub(crate) fn move_target_allowed(sources: &[String], target: &str) -> bool { .map(|i| path[..i].to_string()) .unwrap_or_default() }; - let inside = sources - .iter() - .any(|src| target == src || target.starts_with(&format!("{src}/"))); let all_here = sources.iter().all(|src| parent(src) == target); - !inside && !all_here + copy_target_allowed(sources, target) && !all_here +} + +/// Whether `target` is somewhere `sources` can be copied to: anywhere but into +/// one of themselves. The folder they are in is fine; the copy gets a free name. +pub(crate) fn copy_target_allowed(sources: &[String], target: &str) -> bool { + !sources + .iter() + .any(|src| target == src || target.starts_with(&format!("{src}/"))) } /// Move each of `sources` into `target`, one request at a time, then report @@ -2309,38 +2382,14 @@ pub(crate) fn run_bulk_move(ui: &Rc, sources: Vec, target: String) { clear_selection(ui); let ui = ui.clone(); glib::spawn_future_local(async move { - let mut done = 0usize; - let mut failure: Option<(String, ErrorKind)> = None; - for path in sources { - let rx = spawn_request( - socket.clone(), - Request::Move { - path, - new_parent: target.clone(), - }, - ); - match rx.recv().await { - Ok(Ok(Response::Ok { .. })) => done += 1, - Ok(Ok(Response::Error { message, kind })) => { - failure.get_or_insert((message, kind)); - } - _ => { - failure.get_or_insert_with(|| { - ( - gettext("The Proton Drive service didn't respond."), - ErrorKind::Internal, - ) - }); - } - } - } + let (done, failure) = send_each(&socket, sources, |path| Request::Move { + path, + new_parent: target.clone(), + }) + .await; ui.busy_end(); reload_listing(&ui); - let place = match target.rsplit('/').next() { - // Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". - Some(name) if !name.is_empty() => gettext_f("“{name}”", &[("name", name)]), - _ => "Proton Drive".to_string(), - }; + let place = quoted_place(&target); match (done, failure) { (0, Some((message, kind))) => { toast_failure(&ui, &gettext("Couldn't move"), &message, kind) @@ -2373,6 +2422,101 @@ pub(crate) fn run_bulk_move(ui: &Rc, sources: Vec, target: String) { }); } +/// Copy each of `sources` into `target` on Proton Drive, one request at a +/// time, then report once for the lot. +pub(crate) fn run_bulk_copy(ui: &Rc, sources: Vec, target: String) { + if !*ui.mounted.borrow() { + toast_error( + ui, + &gettext("Couldn't copy"), + &gettext("Proton Drive isn't connected."), + ); + return; + } + let socket = ui.dirs.control_socket(); + ui.busy_begin(); + clear_selection(ui); + let ui = ui.clone(); + glib::spawn_future_local(async move { + let (done, failure) = send_each(&socket, sources, |path| Request::Copy { + path, + new_parent: target.clone(), + }) + .await; + ui.busy_end(); + reload_listing(&ui); + let place = quoted_place(&target); + match (done, failure) { + (0, Some((message, kind))) => { + toast_failure(&ui, &gettext("Couldn't copy"), &message, kind) + } + (0, None) => {} + (n, Some((message, _))) => toast_error( + &ui, + // Translators: {place} is a quoted folder name or "Proton Drive". + &ngettext_f( + "Copied {n} item to {place}, but not all", + "Copied {n} items to {place}, but not all", + n as u64, + &[("place", &place)], + ), + &message, + ), + // Translators: {place} is a quoted folder name or "Proton Drive". + (1, None) => toast(&ui, &gettext_f("Copied to {place}", &[("place", &place)])), + (n, None) => toast( + &ui, + // Translators: {place} is a quoted folder name or "Proton Drive". + &ngettext_f( + "Copied {n} item to {place}", + "Copied {n} items to {place}", + n as u64, + &[("place", &place)], + ), + ), + } + }); +} + +/// Send one request per source, in order, and count how many succeeded. The +/// first failure is kept for the report. +async fn send_each( + socket: &Path, + sources: Vec, + request: impl Fn(String) -> Request, +) -> (usize, Option<(String, ErrorKind)>) { + let mut done = 0usize; + let mut failure: Option<(String, ErrorKind)> = None; + for path in sources { + let rx = spawn_request(socket.to_path_buf(), request(path)); + match rx.recv().await { + Ok(Ok(Response::Ok { .. })) => done += 1, + Ok(Ok(Response::Error { message, kind })) => { + failure.get_or_insert((message, kind)); + } + _ => { + failure.get_or_insert_with(|| { + ( + gettext("The Proton Drive service didn't respond."), + ErrorKind::Internal, + ) + }); + } + } + } + (done, failure) +} + +/// The destination folder for a report: its name in quotes, or "Proton Drive" +/// for My files. +fn quoted_place(target: &str) -> String { + match target.rsplit('/').next() { + // Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". + Some(name) if !name.is_empty() => gettext_f("“{name}”", &[("name", name)]), + _ => "Proton Drive".to_string(), + } +} + /// Move one entry to Trash, through the batch path so it gets the same Undo. pub(crate) fn trash_entry(ui: &Rc, entry: &DirEntry) { run_bulk_delete(ui, vec![entry.clone()]); @@ -2978,8 +3122,8 @@ fn listing_summary(files: usize, folders: usize, file_bytes: u64) -> String { #[cfg(test)] mod tests { use super::{ - MoveTarget, badge_for, hit_location, listing_summary, move_target_allowed, - show_thumbnail_build_progress, sort_entries, + MoveTarget, badge_for, copy_target_allowed, hit_location, listing_summary, + move_target_allowed, show_thumbnail_build_progress, sort_entries, }; use pdfs_core::config::{FileSort, FilesView}; use pdfs_core::control::{DirEntry, SyncIssue, ThumbnailBuildStatus}; @@ -3067,6 +3211,16 @@ mod tests { assert!(move_target_allowed(&mixed, "")); } + #[test] + fn copy_refuses_its_own_subtree_but_not_the_folder_it_is_in() { + let sources = ["Docs/Work".to_string()]; + assert!(!copy_target_allowed(&sources, "Docs/Work")); + assert!(!copy_target_allowed(&sources, "Docs/Work/Old")); + assert!(copy_target_allowed(&sources, "Docs")); + assert!(copy_target_allowed(&sources, "")); + assert!(copy_target_allowed(&sources, "Docs/Workshop")); + } + #[test] fn listing_summary_matches_dolphin_order_and_wording() { assert_eq!(listing_summary(0, 0, 0), "0 folders, 0 files"); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 26a5ae7..b13931e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -19,10 +19,12 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). the app asks GitHub once a day and shows a banner with a **Download** button when a newer version is out. It is off by default, and not offered for packages that a package manager updates (COPR, the AUR, Nix) (#42). -- **`pdfs copy` copies files and folders on Proton Drive**, without downloading or uploading - them: `pdfs copy ~/ProtonDrive/report.pdf ~/ProtonDrive/Archive`. A folder is copied with - everything in it, and a name already taken gets a " (1)" suffix. A file or folder with changes - that have not synced yet is refused until they have. +- **Copy files and folders on Proton Drive**, without downloading or uploading them. In My files, + right-click an item and choose **Make a Copy** to copy it next to itself, or **Copy To…** to pick + another folder; **Copy To…** also works on a selection. From a terminal: + `pdfs copy ~/ProtonDrive/report.pdf ~/ProtonDrive/Archive`. A folder is copied with everything + in it, and a name already taken gets a " (1)" suffix. A file or folder with changes that have + not synced yet is refused until they have. ### Changed - **Reorganised documentation, now also on the @@ -33,6 +35,13 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). Installation puts the COPR repository first for Fedora and explains updating and uninstalling for each kind of package. Each release publishes `docs/` to the wiki. +### Fixed + +- **Saved public links show the name of what they point at**, in the app and in `pdfs bookmarks`, + instead of "Shared link". For a link with a custom password, the address no longer has the custom + password stuck to its end, so it matches the link the web shows and the page asks for the + password. + ## [3.5.0] — 2026-10-16 Schema: **44**. Queued changes get an index by kind and name, and each synced file remembers the diff --git a/docs/FILES.md b/docs/FILES.md index 87b3976..6e0e5aa 100644 --- a/docs/FILES.md +++ b/docs/FILES.md @@ -61,6 +61,12 @@ a list view, sorting, thumbnails (including camera RAW previews), multi-select, to upload. **Details** (Alt+Enter) shows the size, dates, sharing and version history of the selected item. +Right-click an item for more. **Make a Copy** copies it into the same folder, and **Copy To…** +copies it, or a whole selection, into another folder in My files. The copy is made on Proton +Drive, so nothing is downloaded or uploaded, and a name already taken gets a " (1)" suffix. An +item with changes that have not reached Proton Drive yet can be copied once they have. From a +terminal: `pdfs copy PATH... NEW_PARENT`. + ## Trash Deleted files go to the Trash, both from `~/ProtonDrive` and from the app. The **Trash** page diff --git a/docs/SHARING.md b/docs/SHARING.md index a1e5d65..8364f68 100644 --- a/docs/SHARING.md +++ b/docs/SHARING.md @@ -47,6 +47,7 @@ a viewer are read-only. - **Invitations** wait in a banner at the top of the page until you accept or reject them. From a terminal: `pdfs invitations list`, then `accept ID` or `reject ID`. -- **Saved public links** have their own view. `pdfs bookmarks` manages them. +- **Saved public links** have their own view, listed by the name of what they point at. + `pdfs bookmarks` manages them. - **Leave…** a share you no longer need, or run `pdfs leave UID` with the ID from `pdfs shared-with-me`. diff --git a/po/de.po b/po/de.po index 8b90cec..d820ae9 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -61,9 +61,9 @@ msgstr "%A, %-d. %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -246,9 +246,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -301,7 +301,7 @@ msgid "Search Drive" msgstr "Drive durchsuchen" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -337,7 +337,7 @@ msgid "Back / forward" msgstr "Zurück / Vor" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Übergeordneter Ordner" @@ -347,8 +347,8 @@ msgstr "Raster / Liste" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -356,8 +356,8 @@ msgstr "Umbenennen" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -506,9 +506,9 @@ msgstr "Ansichtsoptionen" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -529,8 +529,8 @@ msgid "Couldn't read activity" msgstr "Aktivität konnte nicht gelesen werden" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1265,14 +1265,14 @@ msgstr "Alben konnten nicht geladen werden" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1337,7 +1337,7 @@ msgid "Album name" msgstr "Albumname" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Erstellen" @@ -1464,17 +1464,17 @@ msgid "Forward (Alt+Right)" msgstr "Vor (Alt+Rechts)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Neuer Ordner" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Dateien hochladen …" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Ordner hochladen …" @@ -1529,7 +1529,7 @@ msgid "Folders First" msgstr "Ordner zuerst" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Als Liste anzeigen (Strg+2)" @@ -1539,7 +1539,7 @@ msgid "Sort and view options" msgstr "Sortier- und Ansichtsoptionen" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "In Dateiverwaltung öffnen" @@ -1556,7 +1556,7 @@ msgid "Cancel thumbnail build" msgstr "Erstellen der Vorschaubilder abbrechen" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Nur diesen Ordner durchsuchen" @@ -1591,7 +1591,7 @@ msgstr "Symbolgröße" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1611,10 +1611,11 @@ msgid "Couldn't move to Trash" msgstr "Verschieben in den Papierkorb fehlgeschlagen" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1664,8 +1665,8 @@ msgid "Couldn't restore from Trash" msgstr "Wiederherstellen aus dem Papierkorb fehlgeschlagen" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Offline-Status konnte nicht geändert werden" @@ -1726,7 +1727,7 @@ msgstr "Abspielen" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1746,25 +1747,34 @@ msgid "Copy Link" msgstr "Link kopieren" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Verschieben nach …" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Kopie erstellen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Kopieren nach …" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versionen …" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Details" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Neuer Ordner …" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1772,20 +1782,20 @@ msgstr "Neuer Ordner …" msgid "Select All" msgstr "Alles auswählen" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Datei konnte nicht geöffnet werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "Für „Öffnen mit“ muss der Proton-Drive-Dienst laufen." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1793,114 +1803,114 @@ msgstr "Für „Öffnen mit“ muss der Proton-Drive-Dienst laufen." msgid "Link copied" msgstr "Link kopiert" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Link konnte nicht kopiert werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Medium konnte nicht abgespielt werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "Der Dateipfad ist kein gültiges UTF-8." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "„{name}“ wird gestreamt …" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "„{name}“ ist jetzt nur online verfügbar" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "„{name}“ wird offline verfügbar gemacht…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "„{name}“ ist jetzt offline verfügbar" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Die Ansicht konnte nicht gespeichert werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Als Raster anzeigen (Strg+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Der Ordner konnte nicht geöffnet werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Vorschaubilder konnten nicht erstellt werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Erstellen der Vorschaubilder wird gestartet …" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Erstellen der Vorschaubilder wird angehalten …" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Erstellen der Vorschaubilder konnte nicht abgebrochen werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Erstellen der Vorschaubilder angehalten" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "" "Der Proton-Drive-Dienst meldet keinen Fortschritt der Vorschaubilder mehr." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} Ordner" msgstr[1] "{n} Ordner" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} Bild" msgstr[1] "{n} Bilder" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "{root} wird durchsucht … {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Vorschaubilder in {root} werden erstellt … {done} von {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Vorschaubilder für {n} Bild in {root} bereit" msgstr[1] "Vorschaubilder für {n} Bilder in {root} bereit" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1909,71 +1919,89 @@ msgstr[0] "" msgstr[1] "" "Vorschaubilder für {n} Bilder in {root} bereit; {failed} nicht verfügbar" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Neuer Name" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Umbenannt in „{name}“" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Umbenennen fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "„{name}“ verschieben" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Den Zielordner auswählen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Hierher verschieben" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "{n} Element verschieben" msgstr[1] "{n} Elemente verschieben" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Den Zielordner auswählen." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "„{name}“ kopieren" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Hierher verschieben" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Den Zielordner für die Kopie auswählen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Hierher kopieren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "{n} Element kopieren" +msgstr[1] "{n} Elemente kopieren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Speicherorte" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Dieser Ordner konnte nicht gelesen werden." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "Hier gibt es keine Ordner." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Verschieben fehlgeschlagen" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "„{name}“" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1981,111 +2009,142 @@ msgstr[0] "{n} Element nach {place} verschoben, aber nicht alle" msgstr[1] "{n} Elemente nach {place} verschoben, aber nicht alle" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Nach {place} verschoben" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "{n} Element nach {place} verschoben" msgstr[1] "{n} Elemente nach {place} verschoben" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Kopieren fehlgeschlagen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "{n} Element nach {place} kopiert, aber nicht alle" +msgstr[1] "{n} Elemente nach {place} kopiert, aber nicht alle" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Nach {place} kopiert" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "{n} Element nach {place} kopiert" +msgstr[1] "{n} Elemente nach {place} kopiert" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "„{name}“" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Einen Ordner im aktuellen Verzeichnis erstellen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Ordnername" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "„{name}“ erstellt" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Ordner konnte nicht erstellt werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Dateien hochladen" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Ordner hochladen" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Hochladen fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Wird hochgeladen …" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "{n} Element wird hochgeladen …" msgstr[1] "{n} Elemente werden hochgeladen …" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Anzeigen" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Nach „{name}“ verschoben" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Dieser Ordner wird gelesen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Ordner nicht verfügbar" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Dieser Ordner konnte nicht geöffnet werden" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Dieser Ordner ist leer" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Dateien hierher ziehen oder zum Einstieg eine Datei hochladen oder einen " "Ordner erstellen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Überall suchen" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Suche läuft …" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Suche nach „{query}“." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2093,20 +2152,20 @@ msgstr[0] "{summary} – das erste Suchergebnis wird angezeigt" msgstr[1] "{summary} – die ersten {n} Suchergebnisse werden angezeigt" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary} – Suchergebnisse" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Keine Treffer" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Keine Dateien oder Ordner entsprechen dieser Suche." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2114,17 +2173,17 @@ msgid_plural "{n} files" msgstr[0] "{n} Datei" msgstr[1] "{n} Dateien" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/en_GB.po b/po/en_GB.po index 9a017b9..cba2f5d 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -61,9 +61,9 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -242,9 +242,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -297,7 +297,7 @@ msgid "Search Drive" msgstr "Search Drive" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -333,7 +333,7 @@ msgid "Back / forward" msgstr "Back / forward" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Parent folder" @@ -343,8 +343,8 @@ msgstr "Grid / list" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -352,8 +352,8 @@ msgstr "Rename" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -500,9 +500,9 @@ msgstr "View Options" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -523,8 +523,8 @@ msgid "Couldn't read activity" msgstr "Couldn't read activity" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1253,14 +1253,14 @@ msgstr "Couldn't load albums" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1325,7 +1325,7 @@ msgid "Album name" msgstr "Album name" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Create" @@ -1452,17 +1452,17 @@ msgid "Forward (Alt+Right)" msgstr "Forward (Alt+Right)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "New Folder" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Upload Files…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Upload Folder…" @@ -1517,7 +1517,7 @@ msgid "Folders First" msgstr "Folders First" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Show as list (Ctrl+2)" @@ -1527,7 +1527,7 @@ msgid "Sort and view options" msgstr "Sort and view options" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Open in File Manager" @@ -1544,7 +1544,7 @@ msgid "Cancel thumbnail build" msgstr "Cancel thumbnail build" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Search this folder only" @@ -1579,7 +1579,7 @@ msgstr "Icon size" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1599,10 +1599,11 @@ msgid "Couldn't move to Trash" msgstr "Couldn't move to Trash" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1648,8 +1649,8 @@ msgid "Couldn't restore from Trash" msgstr "Couldn't restore from Trash" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Couldn't change offline state" @@ -1710,7 +1711,7 @@ msgstr "Play" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1730,25 +1731,34 @@ msgid "Copy Link" msgstr "Copy Link" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Move To…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Make a Copy" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Copy To…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versions…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Details" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "New Folder…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1756,20 +1766,20 @@ msgstr "New Folder…" msgid "Select All" msgstr "Select All" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Couldn't open file" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "Open With needs the Proton Drive service to be running." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1777,184 +1787,202 @@ msgstr "Open With needs the Proton Drive service to be running." msgid "Link copied" msgstr "Link copied" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Couldn't copy link" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Couldn't play media" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "The file path isn't valid UTF-8." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "Streaming “{name}”…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "“{name}” is now online only" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "Making “{name}” available offline…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "“{name}” is now available offline" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Couldn't save the view" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Show as grid (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Couldn't open the folder" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Couldn't build thumbnails" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Starting thumbnail build…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Stopping thumbnail build…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Couldn't cancel thumbnail build" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Thumbnail build stopped" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "The Proton Drive service stopped reporting thumbnail progress." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} folder" msgstr[1] "{n} folders" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} image" msgstr[1] "{n} images" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "Scanning {root}… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Building thumbnails in {root}… {done} of {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Thumbnails ready for {n} image in {root}" msgstr[1] "Thumbnails ready for {n} images in {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" msgstr[0] "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgstr[1] "Thumbnails ready for {n} images in {root}; {failed} unavailable" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "New name" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Renamed to “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Couldn't rename" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "Move “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Choose the folder to move into." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Move Here" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "Move {n} item" msgstr[1] "Move {n} items" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Choose the folder to move into." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copy “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Move Here" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Choose the folder to copy into." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Copy Here" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "Copy {n} item" +msgstr[1] "Copy {n} items" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Locations" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Couldn't read this folder." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "No folders here." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Couldn't move" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "“{name}”" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1962,109 +1990,140 @@ msgstr[0] "Moved {n} item to {place}, but not all" msgstr[1] "Moved {n} items to {place}, but not all" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Moved to {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "Moved {n} item to {place}" msgstr[1] "Moved {n} items to {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Couldn't copy" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "Copied {n} item to {place}, but not all" +msgstr[1] "Copied {n} items to {place}, but not all" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Copied to {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "Copied {n} item to {place}" +msgstr[1] "Copied {n} items to {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Create a folder in the current directory." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Folder name" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "Created “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Couldn't create folder" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Upload Files" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Upload Folder" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Couldn't upload" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Uploading…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "Uploading {n} item…" msgstr[1] "Uploading {n} items…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "View" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Moved into “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Reading this folder." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Folder unavailable" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Couldn't open this folder" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "This folder is empty" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "Drop files here, or upload a file or create a folder to get started." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Search everywhere" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Searching…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Looking for “{query}”." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2072,20 +2131,20 @@ msgstr[0] "{summary} — showing the first {n} search result" msgstr[1] "{summary} — showing the first {n} search results" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary} — search results" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "No matches" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "No files or folders match that search." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2093,17 +2152,17 @@ msgid_plural "{n} files" msgstr[0] "{n} file" msgstr[1] "{n} files" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/es.po b/po/es.po index 0fb8f24..4ae9382 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -61,9 +61,9 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -244,9 +244,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -299,7 +299,7 @@ msgid "Search Drive" msgstr "Buscar en Drive" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -335,7 +335,7 @@ msgid "Back / forward" msgstr "Atrás / adelante" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Carpeta superior" @@ -345,8 +345,8 @@ msgstr "Cuadrícula / lista" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -354,8 +354,8 @@ msgstr "Renombrar" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -503,9 +503,9 @@ msgstr "Opciones de vista" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -526,8 +526,8 @@ msgid "Couldn't read activity" msgstr "No se pudo leer la actividad" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1259,14 +1259,14 @@ msgstr "No se pudieron cargar los álbumes" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1331,7 +1331,7 @@ msgid "Album name" msgstr "Nombre del álbum" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Crear" @@ -1458,17 +1458,17 @@ msgid "Forward (Alt+Right)" msgstr "Adelante (Alt+Derecha)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Carpeta nueva" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Subir archivos…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Subir carpeta…" @@ -1523,7 +1523,7 @@ msgid "Folders First" msgstr "Carpetas primero" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Mostrar como lista (Ctrl+2)" @@ -1533,7 +1533,7 @@ msgid "Sort and view options" msgstr "Opciones de orden y vista" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Abrir en el gestor de archivos" @@ -1550,7 +1550,7 @@ msgid "Cancel thumbnail build" msgstr "Cancelar la generación de miniaturas" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Buscar solo en esta carpeta" @@ -1585,7 +1585,7 @@ msgstr "Tamaño de los iconos" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1605,10 +1605,11 @@ msgid "Couldn't move to Trash" msgstr "No se pudo mover a la papelera" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1655,8 +1656,8 @@ msgid "Couldn't restore from Trash" msgstr "No se pudo restaurar de la papelera" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "No se pudo cambiar el estado sin conexión" @@ -1717,7 +1718,7 @@ msgstr "Reproducir" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1737,25 +1738,34 @@ msgid "Copy Link" msgstr "Copiar enlace" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Mover a…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Hacer una copia" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Copiar a…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versiones…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Detalles" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Carpeta nueva…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1763,21 +1773,21 @@ msgstr "Carpeta nueva…" msgid "Select All" msgstr "Seleccionar todo" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "No se pudo abrir el archivo" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "" "«Abrir con» necesita que el servicio de Proton Drive esté en ejecución." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1785,114 +1795,114 @@ msgstr "" msgid "Link copied" msgstr "Enlace copiado" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "No se pudo copiar el enlace" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "No se pudo reproducir el contenido multimedia" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "La ruta del archivo no es UTF-8 válido." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "Transmitiendo “{name}”…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "“{name}” ahora está solo en línea" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "Haciendo “{name}” disponible sin conexión…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "“{name}” ya está disponible sin conexión" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "No se pudo guardar la vista" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Mostrar como cuadrícula (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "No se pudo abrir la carpeta" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "No se pudieron generar las miniaturas" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Iniciando la generación de miniaturas…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Deteniendo la generación de miniaturas…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "No se pudo cancelar la generación de miniaturas" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Generación de miniaturas detenida" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "" "El servicio de Proton Drive dejó de informar del progreso de las miniaturas." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} carpeta" msgstr[1] "{n} carpetas" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} imagen" msgstr[1] "{n} imágenes" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "Analizando {root}… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Generando miniaturas en {root}… {done} de {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Miniaturas listas para {n} imagen en {root}" msgstr[1] "Miniaturas listas para {n} imágenes en {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1901,71 +1911,89 @@ msgstr[0] "" msgstr[1] "" "Miniaturas listas para {n} imágenes en {root}; {failed} no disponibles" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Nombre nuevo" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Renombrado a “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "No se pudo renombrar" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "Mover “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Elija la carpeta de destino." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Mover aquí" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "Mover {n} elemento" msgstr[1] "Mover {n} elementos" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Elija la carpeta de destino." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copiar “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Mover aquí" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Elija la carpeta donde copiar." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Copiar aquí" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "Copiar {n} elemento" +msgstr[1] "Copiar {n} elementos" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Ubicaciones" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "No se pudo leer esta carpeta." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "No hay carpetas aquí." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "No se pudo mover" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "“{name}”" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1973,110 +2001,141 @@ msgstr[0] "Se movió {n} elemento a {place}, pero no todos" msgstr[1] "Se movieron {n} elementos a {place}, pero no todos" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Movido a {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "Se movió {n} elemento a {place}" msgstr[1] "Se movieron {n} elementos a {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "No se pudo copiar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "Se copió {n} elemento a {place}, pero no todos" +msgstr[1] "Se copiaron {n} elementos a {place}, pero no todos" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Copiado a {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "Se copió {n} elemento a {place}" +msgstr[1] "Se copiaron {n} elementos a {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Crear una carpeta en la carpeta actual." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Nombre de la carpeta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "Se creó “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "No se pudo crear la carpeta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Subir archivos" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Subir carpeta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "No se pudo subir" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Subiendo…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "Subiendo {n} elemento…" msgstr[1] "Subiendo {n} elementos…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Ver" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Movido a “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Leyendo esta carpeta." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Carpeta no disponible" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "No se pudo abrir esta carpeta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Esta carpeta está vacía" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Suelte archivos aquí, o suba un archivo o cree una carpeta para empezar." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Buscar en todas partes" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Buscando…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Buscando “{query}”." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2084,20 +2143,20 @@ msgstr[0] "{summary}: se muestra el primer resultado de búsqueda" msgstr[1] "{summary}: se muestran los primeros {n} resultados de búsqueda" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary}: resultados de búsqueda" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Sin coincidencias" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Ningún archivo ni carpeta coincide con esa búsqueda." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2105,17 +2164,17 @@ msgid_plural "{n} files" msgstr[0] "{n} archivo" msgstr[1] "{n} archivos" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/fr.po b/po/fr.po index b52fc6d..c4f16b3 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -61,9 +61,9 @@ msgstr "%A %-d %B %Y à %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -246,9 +246,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -301,7 +301,7 @@ msgid "Search Drive" msgstr "Rechercher dans Drive" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -337,7 +337,7 @@ msgid "Back / forward" msgstr "Précédent / suivant" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Dossier parent" @@ -347,8 +347,8 @@ msgstr "Grille / liste" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -356,8 +356,8 @@ msgstr "Renommer" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -506,9 +506,9 @@ msgstr "Options d’affichage" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -529,8 +529,8 @@ msgid "Couldn't read activity" msgstr "Impossible de lire l’activité" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1270,14 +1270,14 @@ msgstr "Impossible de charger les albums" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1342,7 +1342,7 @@ msgid "Album name" msgstr "Nom de l’album" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Créer" @@ -1469,17 +1469,17 @@ msgid "Forward (Alt+Right)" msgstr "Suivant (Alt+Droite)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Nouveau dossier" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Téléverser des fichiers…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Téléverser un dossier…" @@ -1534,7 +1534,7 @@ msgid "Folders First" msgstr "Dossiers en premier" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Afficher en liste (Ctrl+2)" @@ -1544,7 +1544,7 @@ msgid "Sort and view options" msgstr "Options de tri et d’affichage" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Ouvrir dans le gestionnaire de fichiers" @@ -1561,7 +1561,7 @@ msgid "Cancel thumbnail build" msgstr "Annuler la génération des miniatures" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Rechercher uniquement dans ce dossier" @@ -1596,7 +1596,7 @@ msgstr "Taille des icônes" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1616,10 +1616,11 @@ msgid "Couldn't move to Trash" msgstr "Impossible de mettre à la corbeille" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1667,8 +1668,8 @@ msgid "Couldn't restore from Trash" msgstr "Impossible de restaurer depuis la corbeille" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Impossible de modifier la disponibilité hors ligne" @@ -1729,7 +1730,7 @@ msgstr "Lire" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1749,25 +1750,34 @@ msgid "Copy Link" msgstr "Copier le lien" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Déplacer vers…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Faire une copie" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Copier vers…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versions…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Détails" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Nouveau dossier…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1775,22 +1785,22 @@ msgstr "Nouveau dossier…" msgid "Select All" msgstr "Tout sélectionner" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Impossible d’ouvrir le fichier" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "" "« Ouvrir avec » nécessite que le service Proton Drive soit en cours " "d’exécution." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1798,113 +1808,113 @@ msgstr "" msgid "Link copied" msgstr "Lien copié" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Impossible de copier le lien" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Impossible de lire le média" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "Le chemin du fichier n’est pas en UTF-8 valide." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "Diffusion de « {name} »…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "« {name} » est désormais en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "Mise à disposition hors ligne de « {name} »…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "« {name} » est désormais disponible hors ligne" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Impossible d’enregistrer l’affichage" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Afficher en grille (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Impossible d’ouvrir le dossier" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Impossible de générer les miniatures" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Démarrage de la génération des miniatures…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Arrêt de la génération des miniatures…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Impossible d’annuler la génération des miniatures" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Génération des miniatures arrêtée" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "Le service Proton Drive ne signale plus la progression des miniatures." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} dossier" msgstr[1] "{n} dossiers" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} image" msgstr[1] "{n} images" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "Analyse de {root}… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Génération des miniatures dans {root}… {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Miniatures prêtes pour {n} image dans {root}" msgstr[1] "Miniatures prêtes pour {n} images dans {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1913,71 +1923,89 @@ msgstr[0] "" msgstr[1] "" "Miniatures prêtes pour {n} images dans {root} ; indisponibles : {failed}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Nouveau nom" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Renommé en « {name} »" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Impossible de renommer" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "Déplacer « {name} »" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Choisissez le dossier de destination." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Déplacer ici" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "Déplacer {n} élément" msgstr[1] "Déplacer {n} éléments" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Choisissez le dossier de destination." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copier « {name} »" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Déplacer ici" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Choisissez le dossier où copier." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Copier ici" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "Copier {n} élément" +msgstr[1] "Copier {n} éléments" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Emplacements" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Impossible de lire ce dossier." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "Aucun dossier ici." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Impossible de déplacer" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "« {name} »" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1985,111 +2013,142 @@ msgstr[0] "{n} élément déplacé vers {place}, mais pas tous" msgstr[1] "{n} éléments déplacés vers {place}, mais pas tous" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Déplacé vers {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "{n} élément déplacé vers {place}" msgstr[1] "{n} éléments déplacés vers {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Impossible de copier" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "{n} élément copié vers {place}, mais pas tous" +msgstr[1] "{n} éléments copiés vers {place}, mais pas tous" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Copié vers {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "{n} élément copié vers {place}" +msgstr[1] "{n} éléments copiés vers {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "« {name} »" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Créer un dossier dans le répertoire actuel." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Nom du dossier" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "« {name} » créé" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Impossible de créer le dossier" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Téléverser des fichiers" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Téléverser un dossier" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Impossible de téléverser" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Téléversement…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "Téléversement de {n} élément…" msgstr[1] "Téléversement de {n} éléments…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Afficher" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Déplacé dans « {name} »" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Lecture de ce dossier." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Dossier indisponible" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Impossible d’ouvrir ce dossier" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Ce dossier est vide" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Déposez des fichiers ici, ou téléversez un fichier ou créez un dossier pour " "commencer." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Rechercher partout" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Recherche…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Recherche de « {query} »." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2097,20 +2156,20 @@ msgstr[0] "{summary} — affichage de {n} premier résultat de recherche" msgstr[1] "{summary} — affichage des {n} premiers résultats de recherche" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary} — résultats de recherche" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Aucun résultat" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Aucun fichier ni dossier ne correspond à cette recherche." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2118,17 +2177,17 @@ msgid_plural "{n} files" msgstr[0] "{n} fichier" msgstr[1] "{n} fichiers" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/it.po b/po/it.po index 2ff25fc..d33586b 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -61,9 +61,9 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -242,9 +242,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -297,7 +297,7 @@ msgid "Search Drive" msgstr "Cerca in Drive" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -333,7 +333,7 @@ msgid "Back / forward" msgstr "Indietro / avanti" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Cartella superiore" @@ -343,8 +343,8 @@ msgstr "Griglia / elenco" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -352,8 +352,8 @@ msgstr "Rinomina" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -502,9 +502,9 @@ msgstr "Opzioni di visualizzazione" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -525,8 +525,8 @@ msgid "Couldn't read activity" msgstr "Impossibile leggere le attività" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1264,14 +1264,14 @@ msgstr "Impossibile caricare gli album" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1336,7 +1336,7 @@ msgid "Album name" msgstr "Nome dell'album" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Crea" @@ -1463,17 +1463,17 @@ msgid "Forward (Alt+Right)" msgstr "Avanti (Alt+Destra)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Nuova cartella" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Carica file…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Carica cartella…" @@ -1528,7 +1528,7 @@ msgid "Folders First" msgstr "Prima le cartelle" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Mostra come elenco (Ctrl+2)" @@ -1538,7 +1538,7 @@ msgid "Sort and view options" msgstr "Opzioni di ordinamento e visualizzazione" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Apri nel gestore di file" @@ -1555,7 +1555,7 @@ msgid "Cancel thumbnail build" msgstr "Annulla la generazione delle miniature" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Cerca solo in questa cartella" @@ -1590,7 +1590,7 @@ msgstr "Dimensione icone" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1610,10 +1610,11 @@ msgid "Couldn't move to Trash" msgstr "Impossibile spostare nel cestino" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1661,8 +1662,8 @@ msgid "Couldn't restore from Trash" msgstr "Impossibile ripristinare dal cestino" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Impossibile modificare la disponibilità offline" @@ -1723,7 +1724,7 @@ msgstr "Riproduci" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1743,25 +1744,34 @@ msgid "Copy Link" msgstr "Copia collegamento" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Sposta in…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Crea una copia" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Copia in…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versioni…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Dettagli" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Nuova cartella…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1769,20 +1779,20 @@ msgstr "Nuova cartella…" msgid "Select All" msgstr "Seleziona tutto" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Impossibile aprire il file" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "«Apri con» richiede che il servizio di Proton Drive sia in esecuzione." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1790,115 +1800,115 @@ msgstr "«Apri con» richiede che il servizio di Proton Drive sia in esecuzione. msgid "Link copied" msgstr "Collegamento copiato" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Impossibile copiare il collegamento" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Impossibile riprodurre il contenuto multimediale" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "Il percorso del file non è UTF-8 valido." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "Streaming di “{name}”…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "“{name}” è ora solo online" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "Rendendo “{name}” disponibile offline…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "“{name}” è ora disponibile offline" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Impossibile salvare la visualizzazione" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Mostra come griglia (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Impossibile aprire la cartella" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Impossibile generare le miniature" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Avvio della generazione delle miniature…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Arresto della generazione delle miniature…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Impossibile annullare la generazione delle miniature" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Generazione delle miniature arrestata" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "" "Il servizio di Proton Drive ha smesso di segnalare l’avanzamento delle " "miniature." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} cartella" msgstr[1] "{n} cartelle" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} immagine" msgstr[1] "{n} immagini" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "Analisi di {root}… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Generazione delle miniature in {root}… {done} di {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Miniature pronte per {n} immagine in {root}" msgstr[1] "Miniature pronte per {n} immagini in {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1907,71 +1917,89 @@ msgstr[0] "" msgstr[1] "" "Miniature pronte per {n} immagini in {root}; {failed} non disponibili" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Nuovo nome" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Rinominato in “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Impossibile rinominare" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "Sposta “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Scegli la cartella di destinazione." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Sposta qui" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "Sposta {n} elemento" msgstr[1] "Sposta {n} elementi" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Scegli la cartella di destinazione." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copia “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Sposta qui" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Scegli la cartella in cui copiare." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Copia qui" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "Copia {n} elemento" +msgstr[1] "Copia {n} elementi" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Posizioni" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Impossibile leggere questa cartella." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "Nessuna cartella qui." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Impossibile spostare" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "“{name}”" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1979,111 +2007,142 @@ msgstr[0] "{n} elemento spostato in {place}, ma non tutti" msgstr[1] "{n} elementi spostati in {place}, ma non tutti" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Spostato in {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "{n} elemento spostato in {place}" msgstr[1] "{n} elementi spostati in {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Impossibile copiare" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "{n} elemento copiato in {place}, ma non tutti" +msgstr[1] "{n} elementi copiati in {place}, ma non tutti" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Copiato in {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "{n} elemento copiato in {place}" +msgstr[1] "{n} elementi copiati in {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Crea una cartella nella directory corrente." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Nome della cartella" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "“{name}” creata" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Impossibile creare la cartella" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Carica file" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Carica cartella" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Impossibile caricare" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Caricamento…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "Caricamento di {n} elemento…" msgstr[1] "Caricamento di {n} elementi…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Visualizza" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Spostato in “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Lettura di questa cartella." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Cartella non disponibile" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Impossibile aprire questa cartella" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Questa cartella è vuota" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Trascina qui dei file, oppure carica un file o crea una cartella per " "iniziare." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Cerca ovunque" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Ricerca…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Ricerca di “{query}”." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2091,20 +2150,20 @@ msgstr[0] "{summary}: visualizzato il primo {n} risultato della ricerca" msgstr[1] "{summary}: visualizzati i primi {n} risultati della ricerca" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary}: risultati della ricerca" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Nessuna corrispondenza" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Nessun file o cartella corrisponde alla ricerca." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2112,17 +2171,17 @@ msgid_plural "{n} files" msgstr[0] "{n} file" msgstr[1] "{n} file" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/nl.po b/po/nl.po index d36d279..a679be4 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -61,9 +61,9 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -243,9 +243,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -298,7 +298,7 @@ msgid "Search Drive" msgstr "Drive doorzoeken" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -334,7 +334,7 @@ msgid "Back / forward" msgstr "Terug / vooruit" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Bovenliggende map" @@ -344,8 +344,8 @@ msgstr "Raster / lijst" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -353,8 +353,8 @@ msgstr "Hernoemen" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -503,9 +503,9 @@ msgstr "Weergaveopties" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -526,8 +526,8 @@ msgid "Couldn't read activity" msgstr "Kon activiteit niet lezen" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1260,14 +1260,14 @@ msgstr "Kon albums niet laden" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1332,7 +1332,7 @@ msgid "Album name" msgstr "Albumnaam" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Aanmaken" @@ -1459,17 +1459,17 @@ msgid "Forward (Alt+Right)" msgstr "Vooruit (Alt+Rechts)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Nieuwe map" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Bestanden uploaden…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Map uploaden…" @@ -1524,7 +1524,7 @@ msgid "Folders First" msgstr "Mappen eerst" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Als lijst tonen (Ctrl+2)" @@ -1534,7 +1534,7 @@ msgid "Sort and view options" msgstr "Sorteer- en weergaveopties" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Openen in bestandsbeheerder" @@ -1551,7 +1551,7 @@ msgid "Cancel thumbnail build" msgstr "Aanmaken van miniaturen annuleren" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Alleen in deze map zoeken" @@ -1586,7 +1586,7 @@ msgstr "Pictogramgrootte" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1606,10 +1606,11 @@ msgid "Couldn't move to Trash" msgstr "Kon niet naar prullenbak verplaatsen" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1657,8 +1658,8 @@ msgid "Couldn't restore from Trash" msgstr "Kon niet terugzetten uit prullenbak" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Kon offlinestatus niet wijzigen" @@ -1719,7 +1720,7 @@ msgstr "Afspelen" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1739,25 +1740,34 @@ msgid "Copy Link" msgstr "Link kopiëren" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Verplaatsen naar…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Kopie maken" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Kopiëren naar…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versies…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Details" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Nieuwe map…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1765,20 +1775,20 @@ msgstr "Nieuwe map…" msgid "Select All" msgstr "Alles selecteren" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Kon bestand niet openen" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "Voor ‘Openen met’ moet de Proton Drive-service draaien." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1786,113 +1796,113 @@ msgstr "Voor ‘Openen met’ moet de Proton Drive-service draaien." msgid "Link copied" msgstr "Link gekopieerd" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Kon link niet kopiëren" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Kon media niet afspelen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "Het bestandspad is geen geldige UTF-8." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "“{name}” wordt gestreamd…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "“{name}” is nu alleen online" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "“{name}” wordt offline beschikbaar gemaakt…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "“{name}” is nu offline beschikbaar" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Kon de weergave niet opslaan" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Als raster tonen (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Kon de map niet openen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Kon miniaturen niet aanmaken" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Aanmaken van miniaturen starten…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Aanmaken van miniaturen stoppen…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Kon aanmaken van miniaturen niet annuleren" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Aanmaken van miniaturen gestopt" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "De Proton Drive-service meldt geen voortgang van miniaturen meer." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} map" msgstr[1] "{n} mappen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} afbeelding" msgstr[1] "{n} afbeeldingen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "{root} scannen… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Miniaturen aanmaken in {root}… {done} van {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Miniaturen klaar voor {n} afbeelding in {root}" msgstr[1] "Miniaturen klaar voor {n} afbeeldingen in {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1901,71 +1911,89 @@ msgstr[0] "" msgstr[1] "" "Miniaturen klaar voor {n} afbeeldingen in {root}; {failed} niet beschikbaar" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Nieuwe naam" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Hernoemd naar “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Kon niet hernoemen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "“{name}” verplaatsen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Kies de map waarnaar je wilt verplaatsen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Hierheen verplaatsen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "{n} item verplaatsen" msgstr[1] "{n} items verplaatsen" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Kies de map waarnaar je wilt verplaatsen." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "“{name}” kopiëren" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Hierheen verplaatsen" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Kies de map waarnaar je wilt kopiëren." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Hierheen kopiëren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "{n} item kopiëren" +msgstr[1] "{n} items kopiëren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Locaties" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Kon deze map niet lezen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "Geen mappen hier." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Kon niet verplaatsen" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "“{name}”" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1973,111 +2001,142 @@ msgstr[0] "{n} item verplaatst naar {place}, maar niet alles" msgstr[1] "{n} items verplaatst naar {place}, maar niet alles" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Verplaatst naar {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "{n} item verplaatst naar {place}" msgstr[1] "{n} items verplaatst naar {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Kon niet kopiëren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "{n} item gekopieerd naar {place}, maar niet alles" +msgstr[1] "{n} items gekopieerd naar {place}, maar niet alles" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Gekopieerd naar {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "{n} item gekopieerd naar {place}" +msgstr[1] "{n} items gekopieerd naar {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Een map aanmaken in de huidige map." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Mapnaam" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "“{name}” aangemaakt" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Kon map niet aanmaken" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Bestanden uploaden" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Map uploaden" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Kon niet uploaden" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Uploaden…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "{n} item uploaden…" msgstr[1] "{n} items uploaden…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Bekijken" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Verplaatst naar “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Deze map wordt gelezen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Map niet beschikbaar" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Kon deze map niet openen" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Deze map is leeg" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Sleep bestanden hierheen, of upload een bestand of maak een map aan om te " "beginnen." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Overal zoeken" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Zoeken…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Zoeken naar “{query}”." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2085,20 +2144,20 @@ msgstr[0] "{summary} — eerste {n} zoekresultaat wordt getoond" msgstr[1] "{summary} — eerste {n} zoekresultaten worden getoond" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary} — zoekresultaten" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Geen overeenkomsten" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Geen bestanden of mappen komen overeen met deze zoekopdracht." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2106,17 +2165,17 @@ msgid_plural "{n} files" msgstr[0] "{n} bestand" msgstr[1] "{n} bestanden" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/pdfs.pot b/po/pdfs.pot index 75ce199..59e627a 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.5.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -64,9 +64,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -219,9 +219,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -274,7 +274,7 @@ msgid "Search Drive" msgstr "" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -310,7 +310,7 @@ msgid "Back / forward" msgstr "" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "" @@ -320,8 +320,8 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -329,8 +329,8 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -475,9 +475,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -498,8 +498,8 @@ msgid "Couldn't read activity" msgstr "" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1218,14 +1218,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1290,7 +1290,7 @@ msgid "Album name" msgstr "" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "" @@ -1417,17 +1417,17 @@ msgid "Forward (Alt+Right)" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "" @@ -1482,7 +1482,7 @@ msgid "Folders First" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "" @@ -1492,7 +1492,7 @@ msgid "Sort and view options" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "" @@ -1509,7 +1509,7 @@ msgid "Cancel thumbnail build" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "" @@ -1544,7 +1544,7 @@ msgstr "" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1564,10 +1564,11 @@ msgid "Couldn't move to Trash" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1613,8 +1614,8 @@ msgid "Couldn't restore from Trash" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "" @@ -1675,7 +1676,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1695,25 +1696,34 @@ msgid "Copy Link" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1721,20 +1731,20 @@ msgstr "" msgid "Select All" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1742,184 +1752,202 @@ msgstr "" msgid "Link copied" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1927,109 +1955,140 @@ msgstr[0] "" msgstr[1] "" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "" +msgstr[1] "" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "" +msgstr[1] "" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2037,20 +2096,20 @@ msgstr[0] "" msgstr[1] "" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2058,17 +2117,17 @@ msgid_plural "{n} files" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "" diff --git a/po/pl.po b/po/pl.po index 3d07192..2972048 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -63,9 +63,9 @@ msgstr "%A, %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -247,9 +247,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -302,7 +302,7 @@ msgid "Search Drive" msgstr "Przeszukaj Drive" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -338,7 +338,7 @@ msgid "Back / forward" msgstr "Wstecz/dalej" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Katalog nadrzędny" @@ -348,8 +348,8 @@ msgstr "Siatka/lista" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -357,8 +357,8 @@ msgstr "Zmień nazwę" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -510,9 +510,9 @@ msgstr "Opcje widoku" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -533,8 +533,8 @@ msgid "Couldn't read activity" msgstr "Nie można odczytać aktywności" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1291,14 +1291,14 @@ msgstr "Nie można wczytać albumów" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1363,7 +1363,7 @@ msgid "Album name" msgstr "Nazwa albumu" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Utwórz" @@ -1495,17 +1495,17 @@ msgid "Forward (Alt+Right)" msgstr "Dalej (Alt+Strzałka w prawo)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Nowy katalog" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Wyślij pliki…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Wyślij katalog…" @@ -1560,7 +1560,7 @@ msgid "Folders First" msgstr "Katalogi na początku" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Wyświetl jako listę (Ctrl+2)" @@ -1570,7 +1570,7 @@ msgid "Sort and view options" msgstr "Opcje sortowania i widoku" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Otwórz w menedżerze plików" @@ -1587,7 +1587,7 @@ msgid "Cancel thumbnail build" msgstr "Anuluj tworzenie miniatur" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Przeszukaj tylko ten katalog" @@ -1623,7 +1623,7 @@ msgstr "Rozmiar ikon" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1644,10 +1644,11 @@ msgid "Couldn't move to Trash" msgstr "Nie można przenieść do kosza" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1699,8 +1700,8 @@ msgid "Couldn't restore from Trash" msgstr "Nie można przywrócić z kosza" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Nie można zmienić stanu dostępności offline" @@ -1765,7 +1766,7 @@ msgstr "Odtwórz" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1785,25 +1786,34 @@ msgid "Copy Link" msgstr "Skopiuj odnośnik" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Przenieś do…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Utwórz kopię" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Skopiuj do…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Wersje…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Szczegóły" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Nowy katalog…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1811,20 +1821,20 @@ msgstr "Nowy katalog…" msgid "Select All" msgstr "Zaznacz wszystko" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Nie można otworzyć pliku" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "„Otwórz za pomocą” wymaga uruchomionej usługi Proton Drive." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1832,82 +1842,82 @@ msgstr "„Otwórz za pomocą” wymaga uruchomionej usługi Proton Drive." msgid "Link copied" msgstr "Skopiowano odnośnik" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Nie można skopiować odnośnika" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Nie można odtworzyć multimediów" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "Ścieżka do pliku nie jest prawidłowym tekstem UTF-8." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "Przesyłanie strumieniowe „{name}”…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "„{name}” jest teraz tylko online" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "Oznaczanie „{name}” jako dostępne offline…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "„{name}” jest teraz dostępne offline" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Nie można zapisać widoku" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Wyświetl jako siatkę (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Nie można otworzyć katalogu" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Nie można utworzyć miniatur" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Rozpoczynanie tworzenia miniatur…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Zatrzymywanie tworzenia miniatur…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Nie można anulować tworzenia miniatur" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Zatrzymano tworzenie miniatur" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "Usługa Proton Drive przestała zgłaszać postęp miniatur." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" @@ -1915,7 +1925,7 @@ msgstr[0] "{n} katalog" msgstr[1] "{n} katalogi" msgstr[2] "{n} katalogów" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" @@ -1923,17 +1933,17 @@ msgstr[0] "{n} obraz" msgstr[1] "{n} obrazy" msgstr[2] "{n} obrazów" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "Skanowanie {root}… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Tworzenie miniatur w {root}… {done} z {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" @@ -1941,7 +1951,7 @@ msgstr[0] "Miniatury gotowe dla {n} obrazu w {root}" msgstr[1] "Miniatury gotowe dla {n} obrazów w {root}" msgstr[2] "Miniatury gotowe dla {n} obrazów w {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1949,31 +1959,42 @@ msgstr[0] "Miniatury gotowe dla {n} obrazu w {root}; niedostępne: {failed}" msgstr[1] "Miniatury gotowe dla {n} obrazów w {root}; niedostępne: {failed}" msgstr[2] "Miniatury gotowe dla {n} obrazów w {root}; niedostępne: {failed}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Nowa nazwa" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Zmieniono nazwę na „{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Nie można zmienić nazwy" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "Przenieś „{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Proszę wybrać katalog docelowy." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Przenieś tutaj" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" @@ -1981,40 +2002,48 @@ msgstr[0] "Przenieś {n} element" msgstr[1] "Przenieś {n} elementy" msgstr[2] "Przenieś {n} elementów" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Proszę wybrać katalog docelowy." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "Skopiuj „{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Przenieś tutaj" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Proszę wybrać katalog, do którego skopiować." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Skopiuj tutaj" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "Skopiuj {n} element" +msgstr[1] "Skopiuj {n} elementy" +msgstr[2] "Skopiuj {n} elementów" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Lokalizacje" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Nie można odczytać tego katalogu." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "Brak katalogów." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Nie można przenieść" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "„{name}”" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -2023,12 +2052,12 @@ msgstr[1] "Przeniesiono {n} elementy do {place}, ale nie wszystkie" msgstr[2] "Przeniesiono {n} elementów do {place}, ale nie wszystkie" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Przeniesiono do {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" @@ -2036,42 +2065,75 @@ msgstr[0] "Przeniesiono {n} element do {place}" msgstr[1] "Przeniesiono {n} elementy do {place}" msgstr[2] "Przeniesiono {n} elementów do {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Nie można skopiować" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "Skopiowano {n} element do {place}, ale nie wszystkie" +msgstr[1] "Skopiowano {n} elementy do {place}, ale nie wszystkie" +msgstr[2] "Skopiowano {n} elementów do {place}, ale nie wszystkie" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Skopiowano do {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "Skopiowano {n} element do {place}" +msgstr[1] "Skopiowano {n} elementy do {place}" +msgstr[2] "Skopiowano {n} elementów do {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "„{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Utwórz katalog w bieżącym katalogu." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Nazwa katalogu" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "Utworzono „{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Nie można utworzyć katalogu" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Wysyłanie plików" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Wysyłanie katalogu" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Nie można wysłać" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Wysyłanie…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" @@ -2079,56 +2141,56 @@ msgstr[0] "Wysyłanie {n} elementu…" msgstr[1] "Wysyłanie {n} elementów…" msgstr[2] "Wysyłanie {n} elementów…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Wyświetl" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Przeniesiono do „{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Odczytywanie tego katalogu." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Katalog jest niedostępny" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Nie można otworzyć tego katalogu" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Ten katalog jest pusty" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Można upuścić tutaj pliki, wysłać plik lub utworzyć katalog, aby zacząć." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Szukaj wszędzie" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Wyszukiwanie…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Wyszukiwanie „{query}”." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2137,20 +2199,20 @@ msgstr[1] "{summary} — wyświetlanie pierwszych {n} wyników wyszukiwania" msgstr[2] "{summary} — wyświetlanie pierwszych {n} wyników wyszukiwania" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary} — wyniki wyszukiwania" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Brak wyników" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Żadne pliki ani katalogi nie pasują do wyszukiwania." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2159,17 +2221,17 @@ msgstr[0] "{n} plik" msgstr[1] "{n} pliki" msgstr[2] "{n} plików" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" diff --git a/po/pt_BR.po b/po/pt_BR.po index 62778e1..a614f63 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 20:52+0100\n" +"POT-Creation-Date: 2026-10-25 21:32+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -61,9 +61,9 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1239 -#: crates/pdfs-gui/src/app/pages/browser.rs:2105 -#: crates/pdfs-gui/src/app/pages/browser.rs:2182 +#: crates/pdfs-gui/src/app/pages/browser.rs:1249 +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +#: crates/pdfs-gui/src/app/pages/browser.rs:2246 #: crates/pdfs-gui/src/app/pages/locations.rs:1667 #: 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 @@ -242,9 +242,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: crates/pdfs-gui/src/app/pages/albums.rs:243 #: crates/pdfs-gui/src/app/pages/albums.rs:428 -#: crates/pdfs-gui/src/app/pages/browser.rs:1907 -#: crates/pdfs-gui/src/app/pages/browser.rs:1983 -#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:1917 +#: crates/pdfs-gui/src/app/pages/browser.rs:2039 +#: crates/pdfs-gui/src/app/pages/browser.rs:2540 #: crates/pdfs-gui/src/app/pages/devices.rs:796 #: crates/pdfs-gui/src/app/pages/devices.rs:949 #: crates/pdfs-gui/src/app/pages/devices.rs:987 @@ -297,7 +297,7 @@ msgid "Search Drive" msgstr "Pesquisar no Drive" #: crates/pdfs-gui/src/app/main.rs:1509 -#: crates/pdfs-gui/src/app/pages/browser.rs:974 +#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:528 @@ -333,7 +333,7 @@ msgid "Back / forward" msgstr "Voltar / avançar" #: crates/pdfs-gui/src/app/main.rs:1520 -#: crates/pdfs-gui/src/app/pages/browser.rs:1958 +#: crates/pdfs-gui/src/app/pages/browser.rs:2014 msgid "Parent folder" msgstr "Pasta superior" @@ -343,8 +343,8 @@ msgstr "Grade / lista" #: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/pages/albums.rs:298 -#: crates/pdfs-gui/src/app/pages/browser.rs:1886 -#: crates/pdfs-gui/src/app/pages/browser.rs:1908 +#: crates/pdfs-gui/src/app/pages/browser.rs:1896 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/devices.rs:988 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" @@ -352,8 +352,8 @@ msgstr "Renomear" #: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/pages/browser.rs:357 -#: crates/pdfs-gui/src/app/pages/browser.rs:918 -#: crates/pdfs-gui/src/app/pages/browser.rs:949 +#: crates/pdfs-gui/src/app/pages/browser.rs:924 +#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/photos.rs:586 #: crates/pdfs-gui/src/app/pages/photos.rs:2057 #: crates/pdfs-gui/src/app/widgets/details.rs:164 @@ -502,9 +502,9 @@ msgstr "Opções de exibição" #: crates/pdfs-gui/src/app/pages/activity.rs:441 #: crates/pdfs-gui/src/app/pages/browser.rs:385 -#: crates/pdfs-gui/src/app/pages/browser.rs:2124 -#: crates/pdfs-gui/src/app/pages/browser.rs:2659 -#: crates/pdfs-gui/src/app/pages/browser.rs:2663 +#: crates/pdfs-gui/src/app/pages/browser.rs:2188 +#: crates/pdfs-gui/src/app/pages/browser.rs:2803 +#: crates/pdfs-gui/src/app/pages/browser.rs:2807 #: crates/pdfs-gui/src/app/pages/devices.rs:327 #: crates/pdfs-gui/src/app/pages/locations.rs:198 #: crates/pdfs-gui/src/app/pages/locations.rs:1166 @@ -525,8 +525,8 @@ msgid "Couldn't read activity" msgstr "Não foi possível ler a atividade" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2695 -#: crates/pdfs-gui/src/app/pages/browser.rs:2877 +#: crates/pdfs-gui/src/app/pages/browser.rs:2839 +#: crates/pdfs-gui/src/app/pages/browser.rs:3021 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:281 #: crates/pdfs-gui/src/app/pages/photos.rs:3442 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:384 @@ -1261,14 +1261,14 @@ msgstr "Não foi possível carregar os álbuns" #: crates/pdfs-gui/src/app/pages/albums.rs:566 #: crates/pdfs-gui/src/app/pages/browser.rs:600 #: crates/pdfs-gui/src/app/pages/browser.rs:688 -#: crates/pdfs-gui/src/app/pages/browser.rs:1040 -#: crates/pdfs-gui/src/app/pages/browser.rs:1150 -#: crates/pdfs-gui/src/app/pages/browser.rs:1200 -#: crates/pdfs-gui/src/app/pages/browser.rs:1625 -#: crates/pdfs-gui/src/app/pages/browser.rs:1663 -#: crates/pdfs-gui/src/app/pages/browser.rs:1863 -#: crates/pdfs-gui/src/app/pages/browser.rs:2330 -#: crates/pdfs-gui/src/app/pages/browser.rs:2506 +#: crates/pdfs-gui/src/app/pages/browser.rs:1050 +#: crates/pdfs-gui/src/app/pages/browser.rs:1160 +#: crates/pdfs-gui/src/app/pages/browser.rs:1210 +#: crates/pdfs-gui/src/app/pages/browser.rs:1635 +#: crates/pdfs-gui/src/app/pages/browser.rs:1673 +#: crates/pdfs-gui/src/app/pages/browser.rs:1873 +#: crates/pdfs-gui/src/app/pages/browser.rs:2500 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 #: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/devices.rs:739 #: crates/pdfs-gui/src/app/pages/devices.rs:892 @@ -1333,7 +1333,7 @@ msgid "Album name" msgstr "Nome do álbum" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2397 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 msgid "Create" msgstr "Criar" @@ -1460,17 +1460,17 @@ msgid "Forward (Alt+Right)" msgstr "Avançar (Alt+Direita)" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2386 +#: crates/pdfs-gui/src/app/pages/browser.rs:2530 msgid "New Folder" msgstr "Nova pasta" #: crates/pdfs-gui/src/app/pages/browser.rs:178 -#: crates/pdfs-gui/src/app/pages/browser.rs:965 +#: crates/pdfs-gui/src/app/pages/browser.rs:975 msgid "Upload Files…" msgstr "Enviar arquivos…" #: crates/pdfs-gui/src/app/pages/browser.rs:180 -#: crates/pdfs-gui/src/app/pages/browser.rs:966 +#: crates/pdfs-gui/src/app/pages/browser.rs:976 msgid "Upload Folder…" msgstr "Enviar pasta…" @@ -1525,7 +1525,7 @@ msgid "Folders First" msgstr "Pastas primeiro" #: crates/pdfs-gui/src/app/pages/browser.rs:213 -#: crates/pdfs-gui/src/app/pages/browser.rs:1440 +#: crates/pdfs-gui/src/app/pages/browser.rs:1450 #: crates/pdfs-gui/src/app/widgets/file_list.rs:430 msgid "Show as list (Ctrl+2)" msgstr "Mostrar como lista (Ctrl+2)" @@ -1535,7 +1535,7 @@ msgid "Sort and view options" msgstr "Opções de ordenação e visualização" #: crates/pdfs-gui/src/app/pages/browser.rs:223 -#: crates/pdfs-gui/src/app/pages/browser.rs:976 +#: crates/pdfs-gui/src/app/pages/browser.rs:986 msgid "Open in File Manager" msgstr "Abrir no gerenciador de arquivos" @@ -1552,7 +1552,7 @@ msgid "Cancel thumbnail build" msgstr "Cancelar geração de miniaturas" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2952 msgid "Search this folder only" msgstr "Pesquisar somente nesta pasta" @@ -1587,7 +1587,7 @@ msgstr "Tamanho dos ícones" #. Translators: {n} is how many items are selected: files and folders in My Files, photos here. #: crates/pdfs-gui/src/app/pages/browser.rs:539 -#: crates/pdfs-gui/src/app/pages/browser.rs:942 +#: crates/pdfs-gui/src/app/pages/browser.rs:952 #: crates/pdfs-gui/src/app/pages/devices.rs:544 #: crates/pdfs-gui/src/app/pages/photos.rs:1989 #: crates/pdfs-gui/src/app/pages/shared.rs:560 @@ -1607,10 +1607,11 @@ msgid "Couldn't move to Trash" msgstr "Não foi possível mover para a lixeira" #: crates/pdfs-gui/src/app/pages/browser.rs:572 -#: crates/pdfs-gui/src/app/pages/browser.rs:1592 -#: crates/pdfs-gui/src/app/pages/browser.rs:1841 -#: crates/pdfs-gui/src/app/pages/browser.rs:2303 -#: crates/pdfs-gui/src/app/pages/browser.rs:2476 +#: crates/pdfs-gui/src/app/pages/browser.rs:1602 +#: crates/pdfs-gui/src/app/pages/browser.rs:1851 +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." @@ -1656,8 +1657,8 @@ msgid "Couldn't restore from Trash" msgstr "Não foi possível restaurar da lixeira" #: crates/pdfs-gui/src/app/pages/browser.rs:696 -#: crates/pdfs-gui/src/app/pages/browser.rs:1175 -#: crates/pdfs-gui/src/app/pages/browser.rs:1199 +#: crates/pdfs-gui/src/app/pages/browser.rs:1185 +#: crates/pdfs-gui/src/app/pages/browser.rs:1209 msgid "Couldn't change offline state" msgstr "Não foi possível alterar o estado offline" @@ -1718,7 +1719,7 @@ msgstr "Reproduzir" #: crates/pdfs-gui/src/app/pages/browser.rs:880 #: crates/pdfs-gui/src/app/pages/browser.rs:883 -#: crates/pdfs-gui/src/app/pages/browser.rs:933 +#: crates/pdfs-gui/src/app/pages/browser.rs:939 #: crates/pdfs-gui/src/app/pages/status.rs:330 #: crates/pdfs-gui/src/app/widgets/details.rs:113 #: crates/pdfs-gui/src/hud/preview.rs:308 @@ -1738,25 +1739,34 @@ msgid "Copy Link" msgstr "Copiar link" #: crates/pdfs-gui/src/app/pages/browser.rs:904 -#: crates/pdfs-gui/src/app/pages/browser.rs:938 +#: crates/pdfs-gui/src/app/pages/browser.rs:944 msgid "Move To…" msgstr "Mover para…" -#: crates/pdfs-gui/src/app/pages/browser.rs:909 +#: crates/pdfs-gui/src/app/pages/browser.rs:908 +msgid "Make a Copy" +msgstr "Fazer uma cópia" + +#: crates/pdfs-gui/src/app/pages/browser.rs:910 +#: crates/pdfs-gui/src/app/pages/browser.rs:948 +msgid "Copy To…" +msgstr "Copiar para…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:915 #: crates/pdfs-gui/src/app/widgets/details.rs:151 msgid "Versions…" msgstr "Versões…" -#: crates/pdfs-gui/src/app/pages/browser.rs:914 +#: crates/pdfs-gui/src/app/pages/browser.rs:920 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1172 msgid "Details" msgstr "Detalhes" -#: crates/pdfs-gui/src/app/pages/browser.rs:964 +#: crates/pdfs-gui/src/app/pages/browser.rs:974 msgid "New Folder…" msgstr "Nova pasta…" -#: crates/pdfs-gui/src/app/pages/browser.rs:970 +#: crates/pdfs-gui/src/app/pages/browser.rs:980 #: crates/pdfs-gui/src/app/pages/devices.rs:555 #: crates/pdfs-gui/src/app/pages/shared.rs:577 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:524 @@ -1764,20 +1774,20 @@ msgstr "Nova pasta…" msgid "Select All" msgstr "Selecionar tudo" -#: crates/pdfs-gui/src/app/pages/browser.rs:991 -#: crates/pdfs-gui/src/app/pages/browser.rs:1003 -#: crates/pdfs-gui/src/app/pages/browser.rs:1145 -#: crates/pdfs-gui/src/app/pages/browser.rs:1149 +#: crates/pdfs-gui/src/app/pages/browser.rs:1001 +#: crates/pdfs-gui/src/app/pages/browser.rs:1013 +#: crates/pdfs-gui/src/app/pages/browser.rs:1155 +#: crates/pdfs-gui/src/app/pages/browser.rs:1159 #: crates/pdfs-gui/src/app/pages/shared.rs:696 #: crates/pdfs-gui/src/app/pages/shared.rs:700 msgid "Couldn't open file" msgstr "Não foi possível abrir o arquivo" -#: crates/pdfs-gui/src/app/pages/browser.rs:992 +#: crates/pdfs-gui/src/app/pages/browser.rs:1002 msgid "Open With needs the Proton Drive service to be running." msgstr "“Abrir com” precisa que o serviço do Proton Drive esteja em execução." -#: crates/pdfs-gui/src/app/pages/browser.rs:1031 +#: crates/pdfs-gui/src/app/pages/browser.rs:1041 #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 @@ -1785,114 +1795,114 @@ msgstr "“Abrir com” precisa que o serviço do Proton Drive esteja em execuç msgid "Link copied" msgstr "Link copiado" -#: crates/pdfs-gui/src/app/pages/browser.rs:1035 -#: crates/pdfs-gui/src/app/pages/browser.rs:1039 +#: crates/pdfs-gui/src/app/pages/browser.rs:1045 +#: crates/pdfs-gui/src/app/pages/browser.rs:1049 msgid "Couldn't copy link" msgstr "Não foi possível copiar o link" -#: crates/pdfs-gui/src/app/pages/browser.rs:1071 +#: crates/pdfs-gui/src/app/pages/browser.rs:1081 msgid "Couldn't play media" msgstr "Não foi possível reproduzir a mídia" -#: crates/pdfs-gui/src/app/pages/browser.rs:1072 +#: crates/pdfs-gui/src/app/pages/browser.rs:1082 msgid "The file path isn't valid UTF-8." msgstr "O caminho do arquivo não é UTF-8 válido." -#: crates/pdfs-gui/src/app/pages/browser.rs:1078 +#: crates/pdfs-gui/src/app/pages/browser.rs:1088 #, rust-format msgid "Streaming “{name}”…" msgstr "Transmitindo “{name}”…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1187 +#: crates/pdfs-gui/src/app/pages/browser.rs:1197 #, rust-format msgid "“{name}” is now online only" msgstr "“{name}” agora está somente online" -#: crates/pdfs-gui/src/app/pages/browser.rs:1190 +#: crates/pdfs-gui/src/app/pages/browser.rs:1200 #, rust-format msgid "Making “{name}” available offline…" msgstr "Disponibilizando “{name}” offline…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1192 +#: crates/pdfs-gui/src/app/pages/browser.rs:1202 #, rust-format msgid "“{name}” is now available offline" msgstr "“{name}” agora está disponível offline" -#: crates/pdfs-gui/src/app/pages/browser.rs:1415 +#: crates/pdfs-gui/src/app/pages/browser.rs:1425 msgid "Couldn't save the view" msgstr "Não foi possível salvar a visualização" -#: crates/pdfs-gui/src/app/pages/browser.rs:1438 +#: crates/pdfs-gui/src/app/pages/browser.rs:1448 #: crates/pdfs-gui/src/app/widgets/file_list.rs:428 msgid "Show as grid (Ctrl+1)" msgstr "Mostrar como grade (Ctrl+1)" -#: crates/pdfs-gui/src/app/pages/browser.rs:1578 +#: crates/pdfs-gui/src/app/pages/browser.rs:1588 msgid "Couldn't open the folder" msgstr "Não foi possível abrir a pasta" -#: crates/pdfs-gui/src/app/pages/browser.rs:1591 -#: crates/pdfs-gui/src/app/pages/browser.rs:1622 -#: crates/pdfs-gui/src/app/pages/browser.rs:1627 +#: crates/pdfs-gui/src/app/pages/browser.rs:1601 +#: crates/pdfs-gui/src/app/pages/browser.rs:1632 +#: crates/pdfs-gui/src/app/pages/browser.rs:1637 msgid "Couldn't build thumbnails" msgstr "Não foi possível gerar as miniaturas" -#: crates/pdfs-gui/src/app/pages/browser.rs:1606 +#: crates/pdfs-gui/src/app/pages/browser.rs:1616 msgid "Starting thumbnail build…" msgstr "Iniciando a geração de miniaturas…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1640 +#: crates/pdfs-gui/src/app/pages/browser.rs:1650 msgid "Stopping thumbnail build…" msgstr "Parando a geração de miniaturas…" -#: crates/pdfs-gui/src/app/pages/browser.rs:1653 -#: crates/pdfs-gui/src/app/pages/browser.rs:1662 +#: crates/pdfs-gui/src/app/pages/browser.rs:1663 +#: crates/pdfs-gui/src/app/pages/browser.rs:1672 msgid "Couldn't cancel thumbnail build" msgstr "Não foi possível cancelar a geração de miniaturas" -#: crates/pdfs-gui/src/app/pages/browser.rs:1693 -#: crates/pdfs-gui/src/app/pages/browser.rs:1699 +#: crates/pdfs-gui/src/app/pages/browser.rs:1703 +#: crates/pdfs-gui/src/app/pages/browser.rs:1709 msgid "Thumbnail build stopped" msgstr "Geração de miniaturas parada" -#: crates/pdfs-gui/src/app/pages/browser.rs:1700 +#: crates/pdfs-gui/src/app/pages/browser.rs:1710 msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "" "O serviço do Proton Drive parou de informar o progresso das miniaturas." -#: crates/pdfs-gui/src/app/pages/browser.rs:1720 -#: crates/pdfs-gui/src/app/pages/browser.rs:2951 +#: crates/pdfs-gui/src/app/pages/browser.rs:1730 +#: crates/pdfs-gui/src/app/pages/browser.rs:3095 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "{n} pasta" msgstr[1] "{n} pastas" -#: crates/pdfs-gui/src/app/pages/browser.rs:1721 +#: crates/pdfs-gui/src/app/pages/browser.rs:1731 #, rust-format msgid "{n} image" msgid_plural "{n} images" msgstr[0] "{n} imagem" msgstr[1] "{n} imagens" -#: crates/pdfs-gui/src/app/pages/browser.rs:1724 +#: crates/pdfs-gui/src/app/pages/browser.rs:1734 #, rust-format msgid "Scanning {root}… {folders}, {images}" msgstr "Examinando {root}… {folders}, {images}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1738 +#: crates/pdfs-gui/src/app/pages/browser.rs:1748 #, rust-format msgid "Building thumbnails in {root}… {done} of {total}" msgstr "Gerando miniaturas em {root}… {done} de {total}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1751 +#: crates/pdfs-gui/src/app/pages/browser.rs:1761 #, rust-format msgid "Thumbnails ready for {n} image in {root}" msgid_plural "Thumbnails ready for {n} images in {root}" msgstr[0] "Miniaturas prontas para {n} imagem em {root}" msgstr[1] "Miniaturas prontas para {n} imagens em {root}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1758 +#: crates/pdfs-gui/src/app/pages/browser.rs:1768 #, rust-format msgid "Thumbnails ready for {n} image in {root}; {failed} unavailable" msgid_plural "Thumbnails ready for {n} images in {root}; {failed} unavailable" @@ -1901,71 +1911,89 @@ msgstr[0] "" msgstr[1] "" "Miniaturas prontas para {n} imagens em {root}; {failed} indisponíveis" -#: crates/pdfs-gui/src/app/pages/browser.rs:1768 +#: crates/pdfs-gui/src/app/pages/browser.rs:1778 #, rust-format msgid "{status}. {message}" msgstr "{status}. {message}" -#: crates/pdfs-gui/src/app/pages/browser.rs:1890 +#: crates/pdfs-gui/src/app/pages/browser.rs:1900 #: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "New name" msgstr "Novo nome" -#: crates/pdfs-gui/src/app/pages/browser.rs:1922 +#: crates/pdfs-gui/src/app/pages/browser.rs:1932 #, rust-format msgid "Renamed to “{name}”" msgstr "Renomeado para “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1930 +#: crates/pdfs-gui/src/app/pages/browser.rs:1940 msgid "Couldn't rename" msgstr "Não foi possível renomear" -#: crates/pdfs-gui/src/app/pages/browser.rs:1948 +#: crates/pdfs-gui/src/app/pages/browser.rs:1987 #, rust-format msgid "Move “{name}”" msgstr "Mover “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1949 +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +msgid "Choose the folder to move into." +msgstr "Escolha a pasta de destino." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +msgid "Move Here" +msgstr "Mover para cá" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1992 #, rust-format msgid "Move {n} item" msgid_plural "Move {n} items" msgstr[0] "Mover {n} item" msgstr[1] "Mover {n} itens" -#: crates/pdfs-gui/src/app/pages/browser.rs:1953 -msgid "Choose the folder to move into." -msgstr "Escolha a pasta de destino." +#: crates/pdfs-gui/src/app/pages/browser.rs:1997 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copiar “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:1984 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 -msgid "Move Here" -msgstr "Mover para cá" +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +msgid "Choose the folder to copy into." +msgstr "Escolha a pasta onde copiar." -#: crates/pdfs-gui/src/app/pages/browser.rs:2104 +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Copy Here" +msgstr "Copiar para cá" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2002 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "Copiar {n} item" +msgstr[1] "Copiar {n} itens" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2166 msgid "Locations" msgstr "Locais" -#: crates/pdfs-gui/src/app/pages/browser.rs:2147 +#: crates/pdfs-gui/src/app/pages/browser.rs:2211 msgid "Couldn't read this folder." msgstr "Não foi possível ler esta pasta." -#: crates/pdfs-gui/src/app/pages/browser.rs:2175 +#: crates/pdfs-gui/src/app/pages/browser.rs:2239 msgid "No folders here." msgstr "Nenhuma pasta aqui." -#: crates/pdfs-gui/src/app/pages/browser.rs:2302 -#: crates/pdfs-gui/src/app/pages/browser.rs:2346 -#: crates/pdfs-gui/src/app/pages/browser.rs:2602 +#: crates/pdfs-gui/src/app/pages/browser.rs:2375 +#: crates/pdfs-gui/src/app/pages/browser.rs:2395 +#: crates/pdfs-gui/src/app/pages/browser.rs:2746 msgid "Couldn't move" msgstr "Não foi possível mover" -#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". -#: crates/pdfs-gui/src/app/pages/browser.rs:2341 -#, rust-format -msgid "“{name}”" -msgstr "“{name}”" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2353 +#: crates/pdfs-gui/src/app/pages/browser.rs:2402 #, rust-format msgid "Moved {n} item to {place}, but not all" msgid_plural "Moved {n} items to {place}, but not all" @@ -1973,110 +2001,141 @@ msgstr[0] "{n} item movido para {place}, mas não todos" msgstr[1] "{n} itens movidos para {place}, mas não todos" #. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2361 +#: crates/pdfs-gui/src/app/pages/browser.rs:2410 #, rust-format msgid "Moved to {place}" msgstr "Movido para {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2366 +#: crates/pdfs-gui/src/app/pages/browser.rs:2415 #, rust-format msgid "Moved {n} item to {place}" msgid_plural "Moved {n} items to {place}" msgstr[0] "{n} item movido para {place}" msgstr[1] "{n} itens movidos para {place}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2387 +#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2451 +msgid "Couldn't copy" +msgstr "Não foi possível copiar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2458 +#, rust-format +msgid "Copied {n} item to {place}, but not all" +msgid_plural "Copied {n} items to {place}, but not all" +msgstr[0] "{n} item copiado para {place}, mas não todos" +msgstr[1] "{n} itens copiados para {place}, mas não todos" + +#. Translators: {place} is a quoted folder name or "Proton Drive". +#: crates/pdfs-gui/src/app/pages/browser.rs:2466 +#, rust-format +msgid "Copied to {place}" +msgstr "Copiado para {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2471 +#, rust-format +msgid "Copied {n} item to {place}" +msgid_plural "Copied {n} items to {place}" +msgstr[0] "{n} item copiado para {place}" +msgstr[1] "{n} itens copiados para {place}" + +#. Translators: a folder name in quotes, filled in as {place} in "Moved to {place}". +#: crates/pdfs-gui/src/app/pages/browser.rs:2515 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "Create a folder in the current directory." msgstr "Crie uma pasta no diretório atual." -#: crates/pdfs-gui/src/app/pages/browser.rs:2391 +#: crates/pdfs-gui/src/app/pages/browser.rs:2535 msgid "Folder name" msgstr "Nome da pasta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2411 +#: crates/pdfs-gui/src/app/pages/browser.rs:2555 #, rust-format msgid "Created “{name}”" msgstr "“{name}” criada" -#: crates/pdfs-gui/src/app/pages/browser.rs:2419 +#: crates/pdfs-gui/src/app/pages/browser.rs:2563 msgid "Couldn't create folder" msgstr "Não foi possível criar a pasta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2431 +#: crates/pdfs-gui/src/app/pages/browser.rs:2575 msgid "Upload Files" msgstr "Enviar arquivos" -#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +#: crates/pdfs-gui/src/app/pages/browser.rs:2596 msgid "Upload Folder" msgstr "Enviar pasta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2475 -#: crates/pdfs-gui/src/app/pages/browser.rs:2501 -#: crates/pdfs-gui/src/app/pages/browser.rs:2505 +#: crates/pdfs-gui/src/app/pages/browser.rs:2619 +#: crates/pdfs-gui/src/app/pages/browser.rs:2645 +#: crates/pdfs-gui/src/app/pages/browser.rs:2649 msgid "Couldn't upload" msgstr "Não foi possível enviar" -#: crates/pdfs-gui/src/app/pages/browser.rs:2491 +#: crates/pdfs-gui/src/app/pages/browser.rs:2635 msgid "Uploading…" msgstr "Enviando…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2493 +#: crates/pdfs-gui/src/app/pages/browser.rs:2637 #, rust-format msgid "Uploading {n} item…" msgid_plural "Uploading {n} items…" msgstr[0] "Enviando {n} item…" msgstr[1] "Enviando {n} itens…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2496 +#: crates/pdfs-gui/src/app/pages/browser.rs:2640 #: crates/pdfs-gui/src/app/pages/photos.rs:829 msgctxt "verb" msgid "View" msgstr "Ver" -#: crates/pdfs-gui/src/app/pages/browser.rs:2594 +#: crates/pdfs-gui/src/app/pages/browser.rs:2738 #, rust-format msgid "Moved into “{name}”" msgstr "Movido para “{name}”" -#: crates/pdfs-gui/src/app/pages/browser.rs:2664 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 #: crates/pdfs-gui/src/app/pages/devices.rs:263 msgid "Reading this folder." msgstr "Lendo esta pasta." -#: crates/pdfs-gui/src/app/pages/browser.rs:2709 +#: crates/pdfs-gui/src/app/pages/browser.rs:2853 msgid "Folder unavailable" msgstr "Pasta indisponível" -#: crates/pdfs-gui/src/app/pages/browser.rs:2713 +#: crates/pdfs-gui/src/app/pages/browser.rs:2857 msgid "Couldn't open this folder" msgstr "Não foi possível abrir esta pasta" -#: crates/pdfs-gui/src/app/pages/browser.rs:2755 +#: crates/pdfs-gui/src/app/pages/browser.rs:2899 #: crates/pdfs-gui/src/app/pages/devices.rs:101 #: crates/pdfs-gui/src/app/pages/shared.rs:458 msgid "This folder is empty" msgstr "Esta pasta está vazia" -#: crates/pdfs-gui/src/app/pages/browser.rs:2756 +#: crates/pdfs-gui/src/app/pages/browser.rs:2900 msgid "Drop files here, or upload a file or create a folder to get started." msgstr "" "Solte arquivos aqui, ou envie um arquivo ou crie uma pasta para começar." -#: crates/pdfs-gui/src/app/pages/browser.rs:2806 +#: crates/pdfs-gui/src/app/pages/browser.rs:2950 msgid "Search everywhere" msgstr "Pesquisar em todos os lugares" -#: crates/pdfs-gui/src/app/pages/browser.rs:2842 -#: crates/pdfs-gui/src/app/pages/browser.rs:2846 +#: crates/pdfs-gui/src/app/pages/browser.rs:2986 +#: crates/pdfs-gui/src/app/pages/browser.rs:2990 msgid "Searching…" msgstr "Pesquisando…" -#: crates/pdfs-gui/src/app/pages/browser.rs:2847 +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 #, rust-format msgid "Looking for “{query}”." msgstr "Procurando por “{query}”." -#: crates/pdfs-gui/src/app/pages/browser.rs:2903 +#: crates/pdfs-gui/src/app/pages/browser.rs:3047 #, rust-format msgid "{summary} — showing the first {n} search result" msgid_plural "{summary} — showing the first {n} search results" @@ -2084,20 +2143,20 @@ msgstr[0] "{summary} — mostrando o primeiro resultado da pesquisa" msgstr[1] "{summary} — mostrando os primeiros {n} resultados da pesquisa" #. Translators: {summary} counts the hits, such as "2 folders, 5 files (3.0 MB)". -#: crates/pdfs-gui/src/app/pages/browser.rs:2910 +#: crates/pdfs-gui/src/app/pages/browser.rs:3054 #, rust-format msgid "{summary} — search results" msgstr "{summary} — resultados da pesquisa" -#: crates/pdfs-gui/src/app/pages/browser.rs:2916 +#: crates/pdfs-gui/src/app/pages/browser.rs:3060 msgid "No matches" msgstr "Nenhuma correspondência" -#: crates/pdfs-gui/src/app/pages/browser.rs:2917 +#: crates/pdfs-gui/src/app/pages/browser.rs:3061 msgid "No files or folders match that search." msgstr "Nenhum arquivo ou pasta corresponde a essa pesquisa." -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/i18n.rs:248 #, rust-format msgid "{n} file" @@ -2105,17 +2164,17 @@ msgid_plural "{n} files" msgstr[0] "{n} arquivo" msgstr[1] "{n} arquivos" -#: crates/pdfs-gui/src/app/pages/browser.rs:2958 +#: crates/pdfs-gui/src/app/pages/browser.rs:3102 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:2963 +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:2968 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" From 4edcff3f87791501ec6195a8d2850f1120fcc4f6 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 25 Oct 2026 22:18:11 +0100 Subject: [PATCH 3/9] feat(sharing,gui,cli): change public links and show folder sizes The share dialog gets Link settings under an existing link: role, password and expiry apply at once and keep the URL. The daemon fills in the options a change keeps from the link as it stands, and refuses to keep a password it cannot read rather than dropping it. pdfs public-link update does the same from a terminal, and pdfs members shows the expiry. Details shows a folder's size and item count as Proton Drive counts it, trash included, and pdfs du prints it. Both are refused offline and for a folder that is not on Drive yet. Needs proton-drive-rs with update_public_link, get_folder_size and PublicLink::custom_password. --- crates/pdfs-cli/src/main.rs | 94 ++++++- crates/pdfs-core/src/control.rs | 92 ++++++- crates/pdfs-fuse/src/control.rs | 43 +++ crates/pdfs-fuse/src/lib.rs | 37 +++ crates/pdfs-fuse/src/sharing.rs | 86 +++++- crates/pdfs-gui/src/app/main.rs | 10 +- crates/pdfs-gui/src/app/widgets/details.rs | 57 +++- .../pdfs-gui/src/app/widgets/share_dialog.rs | 252 ++++++++++++++++-- docs/CHANGELOG.md | 7 + docs/CLI.md | 4 +- docs/FILES.md | 3 +- docs/SHARING.md | 6 + po/de.po | 202 +++++++++----- po/en_GB.po | 202 +++++++++----- po/es.po | 202 +++++++++----- po/fr.po | 202 +++++++++----- po/it.po | 202 +++++++++----- po/nl.po | 202 +++++++++----- po/pdfs.pot | 202 +++++++++----- po/pl.po | 203 +++++++++----- po/pt_BR.po | 202 +++++++++----- 21 files changed, 1824 insertions(+), 686 deletions(-) diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index dbc008e..845e211 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -13,7 +13,7 @@ use pdfs_core::auth; use pdfs_core::cache::ContentCache; use pdfs_core::config::AppDirs; use pdfs_core::control::{ - ConflictKeep, ErrorKind, MountKind, RefreshScope, Request as CtlRequest, + ConflictKeep, ErrorKind, LinkChange, MountKind, RefreshScope, Request as CtlRequest, Response as CtlResponse, RestoreItem as CtlRestoreItem, ShareEntryKind, SyncIssue, SyncPhase, daemon_outdated, pending_summary, }; @@ -368,6 +368,14 @@ enum Command { #[arg(required = true, num_args = 2.., value_name = "PATH")] paths: Vec, }, + /// Show how much a folder holds on Proton Drive. + /// + /// Proton Drive adds it up, so nothing is downloaded. The size is the + /// encrypted bytes on storage and includes items in the trash. + Du { + /// Folder path, inside My files or relative to the mountpoint. + path: PathBuf, + }, /// Trash a file or folder via the running daemon. Rm { /// File/folder path, inside My files or an on-demand synced folder, or @@ -789,6 +797,29 @@ enum PublicLinkCmd { #[arg(long)] expires: Option, }, + /// Change a node's public link. The URL stays the same; an option not + /// given is kept. + Update { + /// File/folder path, inside the mountpoint or relative to it. + path: PathBuf, + /// Public-link id, from `pdfs members`. + id: String, + /// New role: viewer or editor. + #[arg(long)] + role: Option, + /// New custom password protecting the link. + #[arg(long, conflicts_with = "no_password")] + password: Option, + /// Remove the custom password. + #[arg(long)] + no_password: bool, + /// New expiry, Unix epoch seconds. + #[arg(long, conflicts_with = "no_expiry")] + expires: Option, + /// Remove the expiry. + #[arg(long)] + no_expiry: bool, + }, /// Remove a node's public link. Remove { /// File/folder path, inside the mountpoint or relative to it. @@ -935,6 +966,7 @@ fn main() -> Result<()> { let new_parent = paths.pop().expect("clap requires at least two paths"); cmd_copy(paths, new_parent) } + Command::Du { path } => cmd_du(path), Command::Rm { path } => cmd_rm(path), Command::Mkdir { parent, name } => cmd_mkdir(parent, name), Command::Upload { sources, parent } => cmd_upload(sources, parent), @@ -1528,7 +1560,11 @@ fn cmd_members(path: PathBuf) -> Result<()> { Some(l) => { let url = l.url.as_deref().unwrap_or("(url hidden)"); let pw = if l.has_password { " +password" } else { "" }; - println!("public link ({}{pw}): {url} [{}]", l.role, l.id); + let expiry = l + .expires + .map(|at| format!(", expires {}", format_epoch_utc(at))) + .unwrap_or_default(); + println!("public link ({}{pw}{expiry}): {url} [{}]", l.role, l.id); } None => println!("public link: none"), } @@ -1580,6 +1616,27 @@ fn cmd_public_link(action: PublicLinkCmd) -> Result<()> { CtlResponse::Error { message, kind } => bail!("{}", cli_error(kind, &message)), other => bail!("unexpected response: {other:?}"), }, + PublicLinkCmd::Update { + path, + id, + role, + password, + no_password, + expires, + no_expiry, + } => match control_request(CtlRequest::UpdatePublicLink { + path: path_arg(&path)?, + id, + role, + password: link_change(password, no_password), + expires: link_change(expires, no_expiry), + })? { + CtlResponse::PublicLink { link } => { + println!("{}", link.url.as_deref().unwrap_or("(no url returned)")); + } + CtlResponse::Error { message, kind } => bail!("{}", cli_error(kind, &message)), + other => bail!("unexpected response: {other:?}"), + }, PublicLinkCmd::Remove { path, id } => { ok_or_bail(control_request(CtlRequest::RemovePublicLink { path: path_arg(&path)?, @@ -1590,6 +1647,15 @@ fn cmd_public_link(action: PublicLinkCmd) -> Result<()> { Ok(()) } +/// A `--x VALUE` / `--no-x` flag pair as one link option change. +fn link_change(value: Option, remove: bool) -> LinkChange { + match (value, remove) { + (Some(value), _) => LinkChange::Set(value), + (None, true) => LinkChange::Remove, + (None, false) => LinkChange::Keep, + } +} + fn cmd_shared() -> Result<()> { match control_request(CtlRequest::ListSharedByMe)? { CtlResponse::SharedByMe { items } if items.is_empty() => { @@ -2966,6 +3032,23 @@ fn cmd_copy(sources: Vec, new_parent: PathBuf) -> Result<()> { Ok(()) } +fn cmd_du(path: PathBuf) -> Result<()> { + match control_request(CtlRequest::FolderSize { + path: path_arg(&path)?, + })? { + CtlResponse::FolderSize { size, items } => { + let noun = if items == 1 { "item" } else { "items" }; + println!( + "{} in {items} {noun} (on Proton Drive, trash included)", + human_bytes(size) + ); + } + CtlResponse::Error { message, kind } => bail!("{}", cli_error(kind, &message)), + other => bail!("unexpected response: {other:?}"), + } + Ok(()) +} + fn cmd_rm(path: PathBuf) -> Result<()> { match control_request(CtlRequest::Delete { path: path_arg(&path)?, @@ -3952,6 +4035,13 @@ mod login_wait_tests { assert_eq!(slept, 0); } + #[test] + fn a_link_flag_pair_keeps_removes_or_sets() { + assert_eq!(link_change::(None, false), LinkChange::Keep); + assert_eq!(link_change::(None, true), LinkChange::Remove); + assert_eq!(link_change(Some(5), false), LinkChange::Set(5)); + } + #[test] fn epoch_seconds_format_as_utc_calendar_dates() { assert_eq!(format_epoch_utc(0), "1970-01-01"); diff --git a/crates/pdfs-core/src/control.rs b/crates/pdfs-core/src/control.rs index 9104e87..0e17bd3 100644 --- a/crates/pdfs-core/src/control.rs +++ b/crates/pdfs-core/src/control.rs @@ -350,6 +350,11 @@ pub enum Request { /// taken in `new_parent` gets the next free ` (n)` suffix. Replies with /// [`Response::Ok`]. Copy { path: String, new_parent: String }, + /// Ask Proton Drive how much the folder at mountpoint-relative `path` + /// holds. Replies with [`Response::FolderSize`]. + FolderSize { path: String }, + /// The by-uid twin of [`Request::FolderSize`]. + FolderSizeByUid { uid: String }, /// Trash a file or folder. `path` is mountpoint-relative. Replies with /// [`Response::Ok`]. Delete { path: String }, @@ -602,6 +607,24 @@ pub enum Request { RemovePublicLink { path: String, id: String }, /// The by-uid twin of [`Request::RemovePublicLink`]. RemovePublicLinkByUid { uid: String, id: String }, + /// Change the public link `id` on the node at `path`, keeping its URL. + /// `role` is "viewer" or "editor", or `None` to keep the current one. + /// Replies with [`Response::PublicLink`]. + UpdatePublicLink { + path: String, + id: String, + role: Option, + password: LinkChange, + expires: LinkChange, + }, + /// The by-uid twin of [`Request::UpdatePublicLink`]. + UpdatePublicLinkByUid { + uid: String, + id: String, + role: Option, + password: LinkChange, + expires: LinkChange, + }, /// Stop sharing the node at `path`: remove its public link, every pending /// invitation and every member. Each removal is attempted even if an /// earlier one fails. Replies with [`Response::Ok`], or an error naming @@ -1081,6 +1104,18 @@ pub struct PublicLinkInfo { pub created: i64, } +/// What [`Request::UpdatePublicLink`] does with one option of a link: its +/// custom password or its expiry. +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] +pub enum LinkChange { + /// Leave the option as it is. + Keep, + /// Remove the option: no custom password, or no expiry. + Remove, + /// Set the option to this value. + Set(T), +} + /// One invitation addressed to me (in [`Response::Invitations`]). #[derive(Serialize, Deserialize, Debug, Clone)] pub struct InvitationInfo { @@ -2192,9 +2227,14 @@ pub enum Response { entries: Vec, link: Option, }, - /// A freshly created public link, carrying the shareable URL (reply to - /// [`Request::CreatePublicLink`]). + /// A freshly created or changed public link, carrying the shareable URL + /// (reply to [`Request::CreatePublicLink`] and + /// [`Request::UpdatePublicLink`]). PublicLink { link: PublicLinkInfo }, + /// What a folder holds on Proton Drive (reply to [`Request::FolderSize`]): + /// the bytes on storage and the number of items below it, folders and + /// trashed items included. + FolderSize { size: u64, items: u64 }, /// Invitations addressed to me (reply to [`Request::ListInvitations`]). Invitations { items: Vec }, /// Saved public links (reply to [`Request::ListBookmarks`]). @@ -3258,6 +3298,24 @@ mod tests { uid: "vol~link".into(), id: "url-1".into(), }, + Request::UpdatePublicLink { + path: "a/b".into(), + id: "url-1".into(), + role: Some("editor".into()), + password: LinkChange::Set("pw".into()), + expires: LinkChange::Remove, + }, + Request::UpdatePublicLinkByUid { + uid: "vol~link".into(), + id: "url-1".into(), + role: None, + password: LinkChange::Keep, + expires: LinkChange::Set(1_700_000_000), + }, + Request::FolderSize { path: "a".into() }, + Request::FolderSizeByUid { + uid: "vol~link".into(), + }, Request::ListSharedByMe, Request::ListActivity { limit: 100 }, Request::ListSharedWithMe, @@ -3632,6 +3690,16 @@ mod tests { }, "RemovePublicLinkByUid", ), + ( + Request::UpdatePublicLinkByUid { + uid: "vol~link".into(), + id: "link".into(), + role: None, + password: LinkChange::Keep, + expires: LinkChange::Keep, + }, + "UpdatePublicLinkByUid", + ), ( Request::StopSharingByUid { uid: "vol~link".into(), @@ -3657,6 +3725,7 @@ mod tests { | Request::RemoveShareEntryByUid { uid, .. } | Request::CreatePublicLinkByUid { uid, .. } | Request::RemovePublicLinkByUid { uid, .. } + | Request::UpdatePublicLinkByUid { uid, .. } | Request::StopSharingByUid { uid } => uid, other => panic!("decoded into the wrong dispatch variant: {other:?}"), }; @@ -3665,6 +3734,25 @@ mod tests { } } + #[test] + fn a_link_update_names_what_it_keeps_removes_and_sets() { + let request = Request::UpdatePublicLink { + path: "a/b".into(), + id: "url-1".into(), + role: None, + password: LinkChange::Keep, + expires: LinkChange::Set(1_700_000_000), + }; + assert_eq!( + serde_json::to_string(&request).unwrap(), + r#"{"UpdatePublicLink":{"path":"a/b","id":"url-1","role":null,"password":"Keep","expires":{"Set":1700000000}}}"# + ); + assert_eq!( + serde_json::to_string(&LinkChange::::Remove).unwrap(), + r#""Remove""# + ); + } + #[test] fn open_file_accepts_a_request_from_a_client_predating_the_uid_field() { let legacy = r#"{"OpenFile":{"path":"Documents/ONBOARDING.md"}}"#; diff --git a/crates/pdfs-fuse/src/control.rs b/crates/pdfs-fuse/src/control.rs index 4030f68..0d8604f 100644 --- a/crates/pdfs-fuse/src/control.rs +++ b/crates/pdfs-fuse/src/control.rs @@ -29,6 +29,17 @@ use super::{Core, count_noun, human_bytes, human_duration, parse_uid}; const MAX_CONTROL_REQUEST_BYTES: u64 = 1024 * 1024; const CONTROL_READ_TIMEOUT: Duration = Duration::from_secs(10); +/// Answer a [`CtlRequest::FolderSize`]. +fn folder_size_reply(size: CoreResult) -> CtlResponse { + match size { + Ok(size) => CtlResponse::FolderSize { + size: size.size, + items: size.descendants, + }, + Err(e) => CtlResponse::error(e), + } +} + /// Answer a [`CtlRequest::StopSharing`]: log it, and turn a partial removal /// into an error that names what is still shared. fn stop_sharing_reply( @@ -392,6 +403,8 @@ fn touched_topics(request: &CtlRequest) -> &'static [Topic] { | R::CreatePublicLinkByUid { .. } | R::RemovePublicLink { .. } | R::RemovePublicLinkByUid { .. } + | R::UpdatePublicLink { .. } + | R::UpdatePublicLinkByUid { .. } | R::StopSharing { .. } | R::StopSharingByUid { .. } => &[Topic::Shares, Topic::Files], R::LeaveShared { .. } @@ -1088,6 +1101,11 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U (Err(e), _) | (_, Err(e)) => CtlResponse::error(e), } } + Ok(CtlRequest::FolderSize { path }) => match rel_to_mount(mountpoint, &path) { + Ok(rel) => folder_size_reply(core.folder_size(&rel)), + Err(e) => CtlResponse::error(e), + }, + Ok(CtlRequest::FolderSizeByUid { uid }) => folder_size_reply(core.folder_size_by_uid(&uid)), Ok(CtlRequest::Delete { path }) => match route_node(core, mountpoint, &path) { Ok((core, rel)) => match core.delete(&rel) { Ok(name) => { @@ -1655,6 +1673,31 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U CtlResponse::error(e) } }, + Ok(CtlRequest::UpdatePublicLink { + path, + id, + role, + password, + expires, + }) => match rel_to_mount(mountpoint, &path) { + Ok(rel) => { + match core.update_public_link(&rel, &id, role.as_deref(), password, expires) { + Ok(link) => CtlResponse::PublicLink { link }, + Err(e) => CtlResponse::error(e), + } + } + Err(e) => CtlResponse::error(e), + }, + Ok(CtlRequest::UpdatePublicLinkByUid { + uid, + id, + role, + password, + expires, + }) => match core.update_public_link_by_uid(&uid, &id, role.as_deref(), password, expires) { + Ok(link) => CtlResponse::PublicLink { link }, + Err(e) => CtlResponse::error(e), + }, Ok(CtlRequest::RemovePublicLink { path, id }) => match rel_to_mount(mountpoint, &path) { Ok(rel) => match core.remove_public_link(&rel, &id) { Ok(()) => { diff --git a/crates/pdfs-fuse/src/lib.rs b/crates/pdfs-fuse/src/lib.rs index 72bf580..ba77d2a 100644 --- a/crates/pdfs-fuse/src/lib.rs +++ b/crates/pdfs-fuse/src/lib.rs @@ -5288,6 +5288,43 @@ impl Core { Ok(copy_name) } + /// What the folder at `rel` holds on Proton Drive: bytes on storage and the + /// number of items below it. Drive adds it up, so nothing is listed here; + /// trashed items count, and the bytes are encrypted ones. + pub(crate) fn folder_size(&self, rel: &Path) -> CoreResult { + let (ino, uid) = self.resolve(rel)?; + let is_folder = self + .state() + .entries + .get(&ino) + .is_some_and(|entry| entry.node.is_folder()); + if !is_folder { + return Err(CoreError::invalid(format!( + "{} is not a folder", + rel.display() + ))); + } + self.folder_size_for_uid(&uid) + } + + /// [`Core::folder_size`] for a folder addressed through any daemon location. + pub(crate) fn folder_size_by_uid(&self, uid: &str) -> CoreResult { + let uid = self.resolve_anywhere(uid)?; + self.folder_size_for_uid(&uid) + } + + fn folder_size_for_uid(&self, uid: &NodeUid) -> CoreResult { + if is_local_uid(uid) { + return Err(CoreError::conflict("the folder is not on Proton Drive yet")); + } + if !self.is_online() { + return Err(CoreError::offline()); + } + self.rt + .block_on(self.client.get_folder_size(uid)) + .map_err(|e| CoreError::from_api(&e, "folder size")) + } + /// Trash a file or folder. `rel` is mountpoint-relative. Forgets the node, /// evicts any cached content, and invalidates the parent listing. fn delete(&self, rel: &Path) -> CoreResult { diff --git a/crates/pdfs-fuse/src/sharing.rs b/crates/pdfs-fuse/src/sharing.rs index 9202607..a4d8fe1 100644 --- a/crates/pdfs-fuse/src/sharing.rs +++ b/crates/pdfs-fuse/src/sharing.rs @@ -9,7 +9,8 @@ use std::path::Path; use pdfs_core::control::{ - BookmarkInfo, DirEntry, InvitationInfo, PublicLinkInfo, ShareEntry, ShareEntryKind, SharedItem, + BookmarkInfo, DirEntry, InvitationInfo, LinkChange, PublicLinkInfo, ShareEntry, ShareEntryKind, + SharedItem, }; use pdfs_core::{CoreError, CoreResult}; use tracing::debug; @@ -367,6 +368,89 @@ impl Core { Ok(public_link_info(link)) } + /// Change the public link `id` on the node at `rel`, keeping its URL. + pub(crate) fn update_public_link( + &self, + rel: &Path, + id: &str, + role: Option<&str>, + password: LinkChange, + expires: LinkChange, + ) -> CoreResult { + let (_ino, uid) = self.resolve(rel)?; + self.update_public_link_for_uid(&uid, id, role, password, expires) + } + + /// [`Core::update_public_link`] for a node addressed through any daemon + /// location. + pub(crate) fn update_public_link_by_uid( + &self, + uid: &str, + id: &str, + role: Option<&str>, + password: LinkChange, + expires: LinkChange, + ) -> CoreResult { + let uid = self.resolve_anywhere(uid)?; + self.update_public_link_for_uid(&uid, id, role, password, expires) + } + + /// The SDK sets all three options on every update, so each `Keep` is + /// filled in from the link as it stands. + fn update_public_link_for_uid( + &self, + uid: &NodeUid, + id: &str, + role: Option<&str>, + password: LinkChange, + expires: LinkChange, + ) -> CoreResult { + let link = self + .rt + .block_on(self.client.get_public_link(uid)) + .map_err(|e| CoreError::from_api(&e, "get public link"))? + .filter(|l| l.public_link_id == id) + .ok_or_else(|| CoreError::not_found("public link not found"))?; + let role = match role { + Some(role) => role_from_str(role)?, + None => link.role, + }; + let unchanged = role == link.role + && matches!(password, LinkChange::Keep) + && matches!(expires, LinkChange::Keep); + if unchanged { + return Ok(public_link_info(link)); + } + let password = match password { + LinkChange::Keep if link.has_custom_password => { + // Sending `None` here would quietly remove the password. + Some(link.custom_password.clone().ok_or_else(|| { + CoreError::conflict( + "the link's password could not be read; set a new one or remove it", + ) + })?) + } + LinkChange::Keep | LinkChange::Remove => None, + LinkChange::Set(password) if password.is_empty() => { + return Err(CoreError::invalid("the new password is empty")); + } + LinkChange::Set(password) => Some(password), + }; + let expires = match expires { + LinkChange::Keep => link.expiration_time, + LinkChange::Remove => None, + LinkChange::Set(at) => Some(at), + }; + let link = self + .rt + .block_on( + self.client + .update_public_link(uid, role, password.as_deref(), expires), + ) + .map_err(|e| CoreError::from_api(&e, "update public link"))?; + Ok(public_link_info(link)) + } + /// Remove the public link `id` from the node at `rel`. pub(crate) fn remove_public_link(&self, rel: &Path, id: &str) -> CoreResult<()> { let (_ino, uid) = self.resolve(rel)?; diff --git a/crates/pdfs-gui/src/app/main.rs b/crates/pdfs-gui/src/app/main.rs index 6df2ce5..5db14d0 100644 --- a/crates/pdfs-gui/src/app/main.rs +++ b/crates/pdfs-gui/src/app/main.rs @@ -75,11 +75,11 @@ use pdfs_core::config::{AppDirs, FileSort, FilesView, WindowState}; use pdfs_core::control::{ ActivityEntry, ActivityKind, AlbumInfo, BookmarkInfo, ConflictInfo, ConflictKeep, DeviceInfo, - DirEntry, ErrorKind, ImportSummary, InvitationInfo, JobItem, MappingProgress, PendingOpInfo, - PhotoItem, PhotoKind, PhotoMonth, PlaceInfo, PublicLinkInfo, RefreshScope, Request, Response, - RestorableFolder, RestoreItem, RevisionInfo, SearchHit, ShareEntry, ShareEntryKind, SharedItem, - SyncFolderInfo, SyncIssue, SyncPhase, SyncProgress, ThumbnailBuildStatus, Topic, - TransferDirection, TransferItem, send, + DirEntry, ErrorKind, ImportSummary, InvitationInfo, JobItem, LinkChange, MappingProgress, + PendingOpInfo, PhotoItem, PhotoKind, PhotoMonth, PlaceInfo, PublicLinkInfo, RefreshScope, + Request, Response, RestorableFolder, RestoreItem, RevisionInfo, SearchHit, ShareEntry, + ShareEntryKind, SharedItem, 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/widgets/details.rs b/crates/pdfs-gui/src/app/widgets/details.rs index 4cb9c0a..bcf638d 100644 --- a/crates/pdfs-gui/src/app/widgets/details.rs +++ b/crates/pdfs-gui/src/app/widgets/details.rs @@ -368,12 +368,19 @@ pub(crate) fn show_details(ui: &Rc, entry: &DirEntry) { } else { gettext("File") }); - d.size_row.set_subtitle(&if entry.is_dir { - "—".to_string() + // A folder's size is Proton Drive's count, which takes a request; it lands + // in `load_details_extras`. + if entry.is_dir { + d.size_row.set_title(&gettext("Size on Proton Drive")); + d.size_row.set_subtitle("—"); + d.size_row.set_tooltip_text(Some(&gettext( + "Counted by Proton Drive, including items in the trash.", + ))); } else { - human_bytes(entry.size) - }); - d.size_row.set_visible(!entry.is_dir); + d.size_row.set_title(&pgettext("column", "Size")); + d.size_row.set_subtitle(&human_bytes(entry.size)); + d.size_row.set_tooltip_text(None); + } d.modified_row .set_subtitle(&dates::short_date(entry.modified)); let rel = entry_rel(ui, entry); @@ -426,8 +433,8 @@ pub(crate) fn show_details(ui: &Rc, entry: &DirEntry) { d.pages.set_visible_child_name("details"); } -/// Fill the Sharing and Versions rows, which need the network. The answers -/// land only if the pane still shows the same entry. +/// Fill the Sharing and Versions rows, and a folder's size, which need the +/// network. The answers land only if the pane still shows the same entry. fn load_details_extras(ui: &Rc, entry: &DirEntry) { let by_uid = entry.path.is_empty() && !entry.uid.is_empty(); let rel = entry_rel(ui, entry); @@ -453,6 +460,24 @@ fn load_details_extras(ui: &Rc, entry: &DirEntry) { }); if entry.is_dir { + let req = if by_uid { + Request::FolderSizeByUid { + uid: entry.uid.clone(), + } + } else { + Request::FolderSize { path: rel } + }; + let rx = spawn_request(ui.dirs.control_socket(), req); + let (ui_c, uid) = (ui.clone(), entry.uid.clone()); + glib::spawn_future_local(async move { + let text = match rx.recv().await { + Ok(Ok(Response::FolderSize { size, items })) => folder_size_summary(size, items), + _ => gettext("Couldn't load the size"), + }; + if details_showing(&ui_c, &uid) { + ui_c.details.details.size_row.set_subtitle(&text); + } + }); return; } let req = if by_uid { @@ -499,6 +524,18 @@ pub(crate) fn sharing_summary(people: usize, link: bool) -> String { } } +/// "1.2 GiB · 340 items": what a folder holds, as Proton Drive counts it. +pub(crate) fn folder_size_summary(size: u64, items: u64) -> String { + // Translators: {size} is a size such as "1.2 GiB"; {n} counts the files + // and folders inside a folder. + ngettext_f( + "{size} · {n} item", + "{size} · {n} items", + items, + &[("size", &human_bytes(size))], + ) +} + /// "3 versions · latest 2 Sep 2026". pub(crate) fn versions_summary(items: &[RevisionInfo]) -> String { let latest = items.iter().map(|r| r.created).max(); @@ -547,6 +584,12 @@ pub(crate) fn selected_entry(ui: &Rc) -> Option { mod tests { use super::*; + #[test] + fn folder_size_summary_reads_size_and_item_count() { + assert_eq!(folder_size_summary(0, 0), "0 bytes · 0 items"); + assert_eq!(folder_size_summary(2048, 1), "2.0 KiB · 1 item"); + } + #[test] fn sharing_summary_names_people_and_link() { assert_eq!(sharing_summary(0, false), "Only you"); diff --git a/crates/pdfs-gui/src/app/widgets/share_dialog.rs b/crates/pdfs-gui/src/app/widgets/share_dialog.rs index 1ab467e..77c8abd 100644 --- a/crates/pdfs-gui/src/app/widgets/share_dialog.rs +++ b/crates/pdfs-gui/src/app/widgets/share_dialog.rs @@ -51,6 +51,48 @@ pub(crate) fn link_expiry_at(idx: u32, now: i64) -> Option { .map(|days| now + days * 86_400) } +/// The labels of the Expires dropdown on an existing link. When the link has +/// an expiry, the first entry is that expiry, so the dropdown shows what is +/// set and choosing it again changes nothing. +pub(crate) fn link_expiry_choices(current: Option, now: i64) -> Vec { + let current = current.map(|at| capitalize(&link_expiry_label(at, now))); + current + .into_iter() + .chain(LINK_EXPIRY.iter().map(|(name, _)| gettext(name))) + .collect() +} + +/// What choosing entry `idx` of [`link_expiry_choices`] does to the expiry. +pub(crate) fn link_expiry_change(idx: u32, current: Option, now: i64) -> LinkChange { + let idx = match (current, idx) { + (Some(_), 0) => return LinkChange::Keep, + (Some(_), idx) => idx - 1, + (None, idx) => idx, + }; + match link_expiry_at(idx, now) { + Some(at) => LinkChange::Set(at), + None if current.is_some() => LinkChange::Remove, + None => LinkChange::Keep, + } +} + +/// A row with a title and a dropdown of `labels` as its suffix. +fn dropdown_row(title: &str, labels: &[String], selected: u32) -> (adw::ActionRow, gtk4::DropDown) { + let drop = gtk4::DropDown::builder() + .model(&string_list(labels)) + .selected(selected) + .valign(gtk4::Align::Center) + .build(); + let row = adw::ActionRow::builder().title(title).build(); + row.add_suffix(&drop); + (row, drop) +} + +/// The roles a public link can grant, in dropdown order. +fn link_roles() -> [String; 2] { + [pgettext("role", "Viewer"), pgettext("role", "Editor")] +} + /// A loose shape check for an email address: one `@` with something before /// it and a dotted domain after it. The server does the real validation; this /// only catches typos before the Invite button is pressed. @@ -237,6 +279,31 @@ impl ShareTarget { } } + fn update_link( + &self, + id: String, + role: Option, + password: LinkChange, + expires: LinkChange, + ) -> Request { + match self { + ShareTarget::Path(path) => Request::UpdatePublicLink { + path: path.clone(), + id, + role, + password, + expires, + }, + ShareTarget::Uid(uid) => Request::UpdatePublicLinkByUid { + uid: uid.clone(), + id, + role, + password, + expires, + }, + } + } + fn remove_link(&self, id: String) -> Request { match self { ShareTarget::Path(path) => Request::RemovePublicLink { @@ -585,8 +652,8 @@ pub(crate) fn repaint_share_people(state: &Rc, entries: &[ShareEntr *state.people_rows.borrow_mut() = rows; } -/// Rebuild the public-link section: an existing link (copy / remove) or a -/// create control. +/// Rebuild the public-link section: an existing link (copy / remove, and its +/// settings) or a create control. pub(crate) fn repaint_share_link(state: &Rc, link: Option<&PublicLinkInfo>) { for row in state.link_rows.borrow_mut().drain(..) { state.link_group.remove(&row); @@ -670,30 +737,19 @@ pub(crate) fn repaint_share_link(state: &Rc, link: Option<&PublicLi state.link_group.add(&row); rows.push(row.upcast()); + + let settings = link_settings_row(state, link); + state.link_group.add(&settings); + rows.push(settings.upcast()); } None => { - let role_model = string_list(&[pgettext("role", "Viewer"), pgettext("role", "Editor")]); - let role_drop = gtk4::DropDown::builder() - .model(&role_model) - .selected(0) - .valign(gtk4::Align::Center) - .build(); - let role_row = adw::ActionRow::builder() - .title(gettext("Link role")) - .build(); - role_row.add_suffix(&role_drop); + let (role_row, role_drop) = dropdown_row(&gettext("Link role"), &link_roles(), 0); let pw_row = adw::PasswordEntryRow::builder() .title(gettext("Password (optional)")) .build(); let expiry_names: Vec = LINK_EXPIRY.iter().map(|(name, _)| gettext(name)).collect(); - let expiry_drop = gtk4::DropDown::builder() - .model(&string_list(&expiry_names)) - .selected(0) - .valign(gtk4::Align::Center) - .build(); - let expiry_row = adw::ActionRow::builder().title(gettext("Expires")).build(); - expiry_row.add_suffix(&expiry_drop); + let (expiry_row, expiry_drop) = dropdown_row(&gettext("Expires"), &expiry_names, 0); let create = group_button(&gettext("Create Public Link")); // Enter in the password field creates the link. @@ -734,6 +790,142 @@ pub(crate) fn repaint_share_link(state: &Rc, link: Option<&PublicLi *state.link_rows.borrow_mut() = rows; } +/// The settings of an existing link, collapsed under one row. Each control +/// applies at once, the way a member's role does. While a change is on its way +/// the whole row is insensitive: the daemon fills in what a change keeps from +/// the link as it stands, so two changes in flight could undo each other. +fn link_settings_row(state: &Rc, link: &PublicLinkInfo) -> adw::ExpanderRow { + let now = glib::real_time() / 1_000_000; + let expander = adw::ExpanderRow::builder() + .title(gettext("Link settings")) + .subtitle(gettext( + "Change who can edit, the password or the expiry. The link stays the same.", + )) + .build(); + + let selected_role = u32::from(link.role == "editor"); + let (role_row, role_drop) = dropdown_row(&gettext("Link role"), &link_roles(), selected_role); + let (state_w, expander_w, id) = (Rc::downgrade(state), expander.clone(), link.id.clone()); + role_drop.connect_selected_notify(move |d| { + let Some(state) = state_w.upgrade() else { + return; + }; + let role = if d.selected() == 1 { + "editor" + } else { + "viewer" + }; + let request = state.target.update_link( + id.clone(), + Some(role.into()), + LinkChange::Keep, + LinkChange::Keep, + ); + share_dialog_update_link(&state, request, &expander_w); + }); + expander.add_row(&role_row); + + let current = link.expires; + let (expiry_row, expiry_drop) = + dropdown_row(&gettext("Expires"), &link_expiry_choices(current, now), 0); + let (state_w, expander_w, id) = (Rc::downgrade(state), expander.clone(), link.id.clone()); + expiry_drop.connect_selected_notify(move |d| { + let Some(state) = state_w.upgrade() else { + return; + }; + let expires = link_expiry_change(d.selected(), current, glib::real_time() / 1_000_000); + if expires == LinkChange::Keep { + return; + } + let request = state + .target + .update_link(id.clone(), None, LinkChange::Keep, expires); + share_dialog_update_link(&state, request, &expander_w); + }); + expander.add_row(&expiry_row); + + let pw_row = adw::PasswordEntryRow::builder() + .title(if link.has_password { + gettext("New password") + } else { + gettext("Add a password") + }) + .show_apply_button(true) + .build(); + let (state_w, expander_w, id) = (Rc::downgrade(state), expander.clone(), link.id.clone()); + pw_row.connect_apply(move |row| { + let Some(state) = state_w.upgrade() else { + return; + }; + let password = row.text().to_string(); + if password.is_empty() { + return; + } + let request = state.target.update_link( + id.clone(), + None, + LinkChange::Set(password), + LinkChange::Keep, + ); + share_dialog_update_link(&state, request, &expander_w); + }); + expander.add_row(&pw_row); + + if link.has_password { + let remove = gtk4::Button::builder() + .label(gettext("Remove")) + .valign(gtk4::Align::Center) + .build(); + remove.add_css_class("flat"); + let row = adw::ActionRow::builder() + .title(gettext("Remove the password")) + .subtitle(gettext( + "Anyone with the link can open it without a password.", + )) + .build(); + row.add_suffix(&remove); + let (state_w, expander_w, id) = (Rc::downgrade(state), expander.clone(), link.id.clone()); + remove.connect_clicked(move |_| { + let Some(state) = state_w.upgrade() else { + return; + }; + let request = + state + .target + .update_link(id.clone(), None, LinkChange::Remove, LinkChange::Keep); + share_dialog_update_link(&state, request, &expander_w); + }); + expander.add_row(&row); + } + expander +} + +/// Send a link change, then reload the dialog: on success to show the link as +/// it now is, on failure to put the controls back to what the link still is. +fn share_dialog_update_link( + state: &Rc, + request: Request, + settings: &adw::ExpanderRow, +) { + settings.set_sensitive(false); + let rx = spawn_request(state.ui.dirs.control_socket(), request); + let state = state.clone(); + glib::spawn_future_local(async move { + match rx.recv().await { + Ok(Ok(Response::PublicLink { .. })) => toast(&state.ui, &gettext("Link updated")), + Ok(Ok(Response::Error { message, .. })) => { + toast_error(&state.ui, &gettext("Couldn't change the link"), &message) + } + _ => toast_error( + &state.ui, + &gettext("Couldn't change the link"), + &gettext("The Proton Drive service didn't respond."), + ), + } + share_dialog_reload(&state); + }); +} + /// Create a public link, then reload the dialog so the copy/remove controls /// replace the create form (and the freshly minted URL is shown). pub(crate) fn share_dialog_create_link( @@ -863,6 +1055,28 @@ mod tests { assert_eq!(link_expiry_at(99, 0), None); } + #[test] + fn choosing_an_expiry_keeps_removes_or_sets_it() { + let now = 1_000; + // No expiry yet: the choices are just Never and the lifetimes. + assert_eq!(link_expiry_choices(None, now).len(), LINK_EXPIRY.len()); + assert_eq!(link_expiry_change(0, None, now), LinkChange::Keep); + assert_eq!( + link_expiry_change(2, None, now), + LinkChange::Set(now + 7 * 86_400) + ); + + // An expiry set: it comes first, then Never and the lifetimes. + let at = Some(2_000_000_000); + assert_eq!(link_expiry_choices(at, now).len(), LINK_EXPIRY.len() + 1); + assert_eq!(link_expiry_change(0, at, now), LinkChange::Keep); + assert_eq!(link_expiry_change(1, at, now), LinkChange::Remove); + assert_eq!( + link_expiry_change(2, at, now), + LinkChange::Set(now + 86_400) + ); + } + #[test] fn past_expiry_reads_expired() { assert_eq!(link_expiry_label(10, 20), "expired"); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b13931e..c296761 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -25,6 +25,13 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). `pdfs copy ~/ProtonDrive/report.pdf ~/ProtonDrive/Archive`. A folder is copied with everything in it, and a name already taken gets a " (1)" suffix. A file or folder with changes that have not synced yet is refused until they have. +- **Change a public link without getting a new one.** In **Share…**, open **Link settings** under + the link to switch between Viewer and Editor, set, change or remove the password, and change or + remove the expiry. The address stays the same, so people who already have the link keep it. + From a terminal: `pdfs public-link update PATH ID [--role] [--password | --no-password] + [--expires EPOCH | --no-expiry]`. `pdfs members` now also shows when a link expires. +- **Folder sizes.** **Details** shows how much a folder holds and how many items are in it, as + Proton Drive counts it, including items in the trash. From a terminal: `pdfs du PATH`. ### Changed - **Reorganised documentation, now also on the diff --git a/docs/CLI.md b/docs/CLI.md index ffa582b..a4fa60d 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -59,6 +59,7 @@ browser, complete it, then press Enter. | `pdfs rename PATH NEW_NAME` | Rename a file or folder. | | `pdfs move PATH... NEW_PARENT` | Move one or more files or folders into another folder. The two may be in different locations (My files, an on-demand or a mirrored synced folder); the move happens on Proton Drive, without downloading or uploading anything. | | `pdfs copy PATH... NEW_PARENT` | Copy one or more files or folders into another folder in My files. The copy happens on Proton Drive, without downloading or uploading anything; a name already taken gets a " (1)" suffix. Changes that have not synced yet must sync first. | +| `pdfs du PATH` | Show how much a folder holds on Proton Drive and how many items are in it. The size includes items in the trash. | | `pdfs rm PATH` | Move to the Trash. | | `pdfs upload SOURCES... [-t FOLDER]` | Upload local files and folders (recursively) in the background. Follow with `pdfs transfers`. | | `pdfs refresh [TARGET] [--full]` | Forget a cached listing so the next read fetches it again. `TARGET` is a folder, `trash` or `photos`; `--full` with `photos` re-reads every photo's metadata. | @@ -134,10 +135,11 @@ commands are for scripts and for cases where the mount is not available. | Command | Description | |---|---| | `pdfs share PATH EMAILS... [--role viewer\|editor\|admin] [--message TEXT]` | Invite people to a file or folder. | -| `pdfs members PATH` | List members, pending invitations and the public link. | +| `pdfs members PATH` | List members, pending invitations and the public link, with the link's id and expiry. | | `pdfs share-role PATH ID KIND ROLE` | Change a member's or invitation's role. | | `pdfs unshare PATH [ID KIND]` | Stop sharing, or remove one member or invitation. | | `pdfs public-link create PATH [--role] [--password] [--expires EPOCH]` | Create a public link. `--expires` takes Unix seconds. | +| `pdfs public-link update PATH ID [--role] [--password TEXT \| --no-password] [--expires EPOCH \| --no-expiry]` | Change a public link's role, password or expiry. The URL stays the same, and an option you leave out is kept. | | `pdfs public-link remove PATH ID` | Remove a public link. | | `pdfs shared` | List what you share. | | `pdfs shared-with-me [UID]` | List what others share with you, or the contents of one shared folder. | diff --git a/docs/FILES.md b/docs/FILES.md index 6e0e5aa..2b4f6fb 100644 --- a/docs/FILES.md +++ b/docs/FILES.md @@ -59,7 +59,8 @@ folder off instead. The **My files** page shows the same files without going through the folder. It has a grid and a list view, sorting, thumbnails (including camera RAW previews), multi-select, and drag and drop to upload. **Details** (Alt+Enter) shows the size, dates, sharing and version history of the -selected item. +selected item. For a folder, the size and the number of items in it come from Proton Drive and +include items in the trash; `pdfs du PATH` prints the same. Right-click an item for more. **Make a Copy** copies it into the same folder, and **Copy To…** copies it, or a whole selection, into another folder in My files. The copy is made on Proton diff --git a/docs/SHARING.md b/docs/SHARING.md index 8364f68..d214b45 100644 --- a/docs/SHARING.md +++ b/docs/SHARING.md @@ -33,6 +33,12 @@ In **Share…**, create a public link. Anyone with the link can open the item. Y link with a password and let it expire on a date. From a terminal, use `pdfs public-link create` and `pdfs public-link remove`. +To change a link later, open **Link settings** under it. You can switch it between Viewer and +Editor, set, change or remove its password, and change or remove its expiry. The address stays +the same, so everyone who has the link keeps it. From a terminal, use `pdfs public-link update`; +`pdfs members` shows the link's id. A link made long ago by an older Proton app may not be +changeable; remove it and create a new one instead. + ## See what you share **Shared by me** lists everything you share. Filter it by links, by people, or by expired links. diff --git a/po/de.po b/po/de.po index d820ae9..1ad915c 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -515,7 +515,7 @@ msgstr "Ansichtsoptionen" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Wird geladen …" @@ -1300,9 +1300,10 @@ msgstr "Alben konnten nicht geladen werden" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1315,7 +1316,7 @@ msgstr "Der Proton-Drive-Dienst hat nicht geantwortet." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1507,6 +1508,7 @@ msgstr "Name" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1616,7 +1618,7 @@ msgstr "Verschieben in den Papierkorb fehlgeschlagen" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive ist nicht verbunden." @@ -1799,7 +1801,7 @@ msgstr "Für „Öffnen mit“ muss der Proton-Drive-Dienst laufen." #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Link kopiert" @@ -2505,7 +2507,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Entfernen" @@ -4306,14 +4309,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Betrachter" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Bearbeiter" @@ -4474,7 +4477,7 @@ msgid "Link removed" msgstr "Link entfernt" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Der Link konnte nicht entfernt werden" @@ -4538,7 +4541,7 @@ msgid "People" msgstr "Personen" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Link kopieren" @@ -5630,7 +5633,7 @@ msgid "Info" msgstr "Info" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Eine Kopie auf diesem Computer behalten, auch ohne Verbindung." @@ -5668,17 +5671,25 @@ msgstr "Ordner" msgid "File" msgstr "Datei" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Größe auf Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Von Proton Drive gezählt, einschließlich der Objekte im Papierkorb." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Auf diesem Computer behalten, weil ein übergeordneter Ordner offline " "verfügbar ist." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5686,57 +5697,68 @@ msgstr "" "Eine Kopie von allem in diesem Ordner auf diesem Computer behalten, auch " "ohne Verbindung." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Ordner öffnen" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Freigaben konnten nicht geladen werden" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Die Größe konnte nicht geladen werden" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Versionen konnten nicht geladen werden" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Nur ich" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Alle mit dem Link" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Mit {n} Person geteilt" msgstr[1] "Mit {n} Personen geteilt" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Mit {n} Person geteilt · Öffentlicher Link" msgstr[1] "Mit {n} Personen geteilt · Öffentlicher Link" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} Element" +msgstr[1] "{size} · {n} Elemente" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "Keine früheren Versionen" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 Version · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5760,123 +5782,123 @@ msgstr "7 Tage" msgid "30 days" msgstr "30 Tage" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Teilen nicht möglich" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Teilen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Personen einladen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" "Proton- und andere E-Mail-Adressen, durch Leerzeichen oder Kommas getrennt." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "E-Mail-Adressen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Rolle" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Nachricht (optional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Einladungen senden" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Personen mit Zugriff" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Öffentlicher Link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "„{text}“ ist keine E-Mail-Adresse" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Einladungen gesendet" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Einladungen konnten nicht gesendet werden" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Noch hat niemand sonst Zugriff." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Einladung ausstehend" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Einladung ausstehend, noch kein Proton-Konto" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Rolle aktualisiert" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Die Rolle konnte nicht aktualisiert werden" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Zugriff entfernen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Zugriff entfernen?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} kann dieses Element nicht mehr öffnen." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Zugriff entfernt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Zugriff konnte nicht entfernt werden" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Alle mit dem Link ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "passwortgeschützt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Link entfernen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Öffentlichen Link entfernen?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5884,51 +5906,87 @@ msgstr "" "Der Link funktioniert für niemanden mehr, der ihn hat. Ein neuer Link erhält " "eine andere Adresse." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Link entfernen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Öffentlicher Link entfernt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Rolle des Links" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Passwort (optional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Läuft ab" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Öffentlichen Link erstellen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Link-Einstellungen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Ändern, wer bearbeiten darf, das Passwort oder den Ablauf. Der Link bleibt derselbe." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Neues Passwort" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Passwort hinzufügen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Passwort entfernen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Jeder mit dem Link kann ihn ohne Passwort öffnen." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Link aktualisiert" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Der Link konnte nicht geändert werden" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Öffentlicher Link erstellt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Der Link konnte nicht erstellt werden" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "abgelaufen" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "läuft ab am {date}" diff --git a/po/en_GB.po b/po/en_GB.po index cba2f5d..fc5ae38 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -509,7 +509,7 @@ msgstr "View Options" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Loading…" @@ -1288,9 +1288,10 @@ msgstr "Couldn't load albums" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1303,7 +1304,7 @@ msgstr "The Proton Drive service didn't respond." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1495,6 +1496,7 @@ msgstr "Name" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1604,7 +1606,7 @@ msgstr "Couldn't move to Trash" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive isn't connected." @@ -1783,7 +1785,7 @@ msgstr "Open With needs the Proton Drive service to be running." #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Link copied" @@ -2476,7 +2478,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Remove" @@ -4231,14 +4234,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Viewer" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Editor" @@ -4395,7 +4398,7 @@ msgid "Link removed" msgstr "Link removed" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Couldn't remove the link" @@ -4458,7 +4461,7 @@ msgid "People" msgstr "People" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Copy link" @@ -5516,7 +5519,7 @@ msgid "Info" msgstr "Info" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Keep a copy on this computer, even without a connection." @@ -5554,15 +5557,23 @@ msgstr "Folder" msgid "File" msgstr "File" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Size on Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Counted by Proton Drive, including items in the trash." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "Kept on this computer because a folder it is in is available offline." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5570,57 +5581,68 @@ msgstr "" "Keep a copy of everything in this folder on this computer, even without a " "connection." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Open folder" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Couldn't load sharing" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Couldn't load the size" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Couldn't load versions" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Only you" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Anyone with the link" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Shared with {n} person" msgstr[1] "Shared with {n} people" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Shared with {n} person · Public link" msgstr[1] "Shared with {n} people · Public link" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} item" +msgstr[1] "{size} · {n} items" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "No earlier versions" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 version · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5644,122 +5666,122 @@ msgstr "7 days" msgid "30 days" msgstr "30 days" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Can't share" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Share" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Invite people" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "Proton and non-Proton email addresses, separated by spaces or commas." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "Email addresses" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Role" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Message (optional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Send Invitations" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "People with access" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Public link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "“{text}” isn't an email address" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Invitations sent" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Couldn't send invitations" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "No one else has access yet." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Invitation pending" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Invitation pending, no Proton account yet" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Role updated" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Couldn't update the role" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Remove access" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Remove Access?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} will no longer be able to open this item." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Access removed" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Couldn't remove access" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Anyone with the link ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "password-protected" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Remove link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Remove Public Link?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5767,51 +5789,87 @@ msgstr "" "The link stops working for everyone who has it. A new link will have a " "different address." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Remove Link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Public link removed" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Link role" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Password (optional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Expires" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Create Public Link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Link settings" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Change who can edit, the password or the expiry. The link stays the same." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "New password" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Add a password" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Remove the password" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Anyone with the link can open it without a password." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Link updated" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Couldn't change the link" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Public link created" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Couldn't create the link" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "expired" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "expires {date}" diff --git a/po/es.po b/po/es.po index 4ae9382..06647ae 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -512,7 +512,7 @@ msgstr "Opciones de vista" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Cargando…" @@ -1294,9 +1294,10 @@ msgstr "No se pudieron cargar los álbumes" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1309,7 +1310,7 @@ msgstr "El servicio de Proton Drive no respondió." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1501,6 +1502,7 @@ msgstr "Nombre" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1610,7 +1612,7 @@ msgstr "No se pudo mover a la papelera" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive no está conectado." @@ -1791,7 +1793,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Enlace copiado" @@ -2490,7 +2492,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Quitar" @@ -4278,14 +4281,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Lector" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Editor" @@ -4444,7 +4447,7 @@ msgid "Link removed" msgstr "Enlace quitado" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "No se pudo quitar el enlace" @@ -4507,7 +4510,7 @@ msgid "People" msgstr "Personas" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Copiar enlace" @@ -5585,7 +5588,7 @@ msgid "Info" msgstr "Información" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Conservar una copia en este equipo, incluso sin conexión." @@ -5623,17 +5626,25 @@ msgstr "Carpeta" msgid "File" msgstr "Archivo" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Tamaño en Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Calculado por Proton Drive, incluidos los elementos de la papelera." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Se conserva en este equipo porque una carpeta que lo contiene está " "disponible sin conexión." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5641,57 +5652,68 @@ msgstr "" "Conservar una copia de todo el contenido de esta carpeta en este equipo, " "incluso sin conexión." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Abrir carpeta" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "No se pudo cargar la compartición" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "No se pudo cargar el tamaño" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "No se pudieron cargar las versiones" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Solo usted" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Cualquiera con el enlace" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Compartido con {n} persona" msgstr[1] "Compartido con {n} personas" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Compartido con {n} persona · Enlace público" msgstr[1] "Compartido con {n} personas · Enlace público" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} elemento" +msgstr[1] "{size} · {n} elementos" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "No hay versiones anteriores" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 versión · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5715,124 +5737,124 @@ msgstr "7 días" msgid "30 days" msgstr "30 días" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "No se puede compartir" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Compartir" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Invitar a personas" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" "Direcciones de correo electrónico de Proton y de otros proveedores, " "separadas por espacios o comas." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "Direcciones de correo electrónico" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Rol" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Mensaje (opcional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Enviar invitaciones" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Personas con acceso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Enlace público" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "“{text}” no es una dirección de correo electrónico" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Invitaciones enviadas" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "No se pudieron enviar las invitaciones" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Nadie más tiene acceso todavía." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Invitación pendiente" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Invitación pendiente, aún sin cuenta de Proton" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Rol actualizado" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "No se pudo actualizar el rol" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Quitar el acceso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "¿Quitar el acceso?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} ya no podrá abrir este elemento." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Acceso quitado" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "No se pudo quitar el acceso" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Cualquiera con el enlace ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "protegido con contraseña" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Quitar el enlace" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "¿Quitar el enlace público?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5840,51 +5862,87 @@ msgstr "" "El enlace deja de funcionar para todas las personas que lo tienen. Un enlace " "nuevo tendrá una dirección distinta." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Quitar enlace" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Enlace público quitado" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Rol del enlace" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Contraseña (opcional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Caduca" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Crear enlace público" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Ajustes del enlace" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Cambie quién puede editar, la contraseña o la caducidad. El enlace no cambia." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Nueva contraseña" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Añadir una contraseña" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Quitar la contraseña" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Cualquiera con el enlace puede abrirlo sin contraseña." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Enlace actualizado" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "No se pudo cambiar el enlace" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Enlace público creado" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "No se pudo crear el enlace" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "caducado" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "caduca el {date}" diff --git a/po/fr.po b/po/fr.po index c4f16b3..6e41a9b 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -515,7 +515,7 @@ msgstr "Options d’affichage" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Chargement…" @@ -1305,9 +1305,10 @@ msgstr "Impossible de charger les albums" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1320,7 +1321,7 @@ msgstr "Le service Proton Drive n’a pas répondu." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1512,6 +1513,7 @@ msgstr "Nom" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1621,7 +1623,7 @@ msgstr "Impossible de mettre à la corbeille" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive n’est pas connecté." @@ -1804,7 +1806,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Lien copié" @@ -2504,7 +2506,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Retirer" @@ -4311,14 +4314,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Lecteur" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Éditeur" @@ -4479,7 +4482,7 @@ msgid "Link removed" msgstr "Lien retiré" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Impossible de supprimer le lien" @@ -4542,7 +4545,7 @@ msgid "People" msgstr "Personnes" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Copier le lien" @@ -5631,7 +5634,7 @@ msgid "Info" msgstr "Informations" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Conserver une copie sur cet ordinateur, même sans connexion." @@ -5669,17 +5672,25 @@ msgstr "Dossier" msgid "File" msgstr "Fichier" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Taille sur Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Calculée par Proton Drive, éléments de la corbeille compris." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Conservé sur cet ordinateur, car un dossier qui le contient est disponible " "hors ligne." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5687,57 +5698,68 @@ msgstr "" "Conserver une copie de tout le contenu de ce dossier sur cet ordinateur, " "même sans connexion." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Ouvrir le dossier" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Impossible de charger le partage" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Impossible de charger la taille" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Impossible de charger les versions" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Vous uniquement" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Toute personne disposant du lien" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Partagé avec {n} personne" msgstr[1] "Partagé avec {n} personnes" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Partagé avec {n} personne · Lien public" msgstr[1] "Partagé avec {n} personnes · Lien public" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} élément" +msgstr[1] "{size} · {n} éléments" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "Aucune version antérieure" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 version · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5761,124 +5783,124 @@ msgstr "7 jours" msgid "30 days" msgstr "30 jours" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Partage impossible" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Partager" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Inviter des personnes" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" "Adresses électroniques Proton ou non, séparées par des espaces ou des " "virgules." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "Adresses électroniques" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Rôle" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Message (facultatif)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Envoyer les invitations" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Personnes ayant accès" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Lien public" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "« {text} » n’est pas une adresse électronique" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Invitations envoyées" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Impossible d’envoyer les invitations" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Personne d’autre n’a encore accès." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Invitation en attente" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Invitation en attente, pas encore de compte Proton" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Rôle mis à jour" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Impossible de mettre à jour le rôle" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Retirer l’accès" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Retirer l’accès ?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} ne pourra plus ouvrir cet élément." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Accès retiré" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Impossible de retirer l’accès" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Toute personne disposant du lien ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "protégé par mot de passe" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Supprimer le lien" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Supprimer le lien public ?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5886,51 +5908,87 @@ msgstr "" "Le lien cesse de fonctionner pour toutes les personnes qui l’ont. Un nouveau " "lien aura une adresse différente." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Supprimer le lien" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Lien public supprimé" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Rôle du lien" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Mot de passe (facultatif)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Expiration" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Créer un lien public" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Paramètres du lien" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Modifiez qui peut modifier, le mot de passe ou l’expiration. Le lien reste le même." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Nouveau mot de passe" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Ajouter un mot de passe" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Supprimer le mot de passe" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Toute personne disposant du lien peut l’ouvrir sans mot de passe." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Lien mis à jour" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Impossible de modifier le lien" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Lien public créé" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Impossible de créer le lien" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "expiré" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "expire le {date}" diff --git a/po/it.po b/po/it.po index d33586b..f87bb1f 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -511,7 +511,7 @@ msgstr "Opzioni di visualizzazione" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Caricamento…" @@ -1299,9 +1299,10 @@ msgstr "Impossibile caricare gli album" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1314,7 +1315,7 @@ msgstr "Il servizio di Proton Drive non ha risposto." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1506,6 +1507,7 @@ msgstr "Nome" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1615,7 +1617,7 @@ msgstr "Impossibile spostare nel cestino" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive non è connesso." @@ -1796,7 +1798,7 @@ msgstr "«Apri con» richiede che il servizio di Proton Drive sia in esecuzione. #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Collegamento copiato" @@ -2502,7 +2504,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Rimuovi" @@ -4296,14 +4299,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Visualizzatore" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Editor" @@ -4463,7 +4466,7 @@ msgid "Link removed" msgstr "Collegamento rimosso" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Impossibile rimuovere il collegamento" @@ -4526,7 +4529,7 @@ msgid "People" msgstr "Persone" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Copia collegamento" @@ -5610,7 +5613,7 @@ msgid "Info" msgstr "Informazioni" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Mantieni una copia su questo computer, anche senza connessione." @@ -5648,17 +5651,25 @@ msgstr "Cartella" msgid "File" msgstr "File" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Dimensione su Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Calcolata da Proton Drive, compresi gli elementi nel cestino." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Mantenuto su questo computer perché una cartella che lo contiene è " "disponibile offline." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5666,57 +5677,68 @@ msgstr "" "Mantieni una copia di tutto il contenuto di questa cartella su questo " "computer, anche senza connessione." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Apri cartella" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Impossibile caricare la condivisione" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Impossibile caricare la dimensione" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Impossibile caricare le versioni" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Solo tu" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Chiunque abbia il collegamento" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Condiviso con {n} persona" msgstr[1] "Condiviso con {n} persone" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Condiviso con {n} persona · Collegamento pubblico" msgstr[1] "Condiviso con {n} persone · Collegamento pubblico" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} elemento" +msgstr[1] "{size} · {n} elementi" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "Nessuna versione precedente" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 versione · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5740,122 +5762,122 @@ msgstr "7 giorni" msgid "30 days" msgstr "30 giorni" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Impossibile condividere" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Condividi" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Invita persone" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "Indirizzi email Proton e non Proton, separati da spazi o virgole." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "Indirizzi email" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Ruolo" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Messaggio (facoltativo)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Invia inviti" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Persone con accesso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Collegamento pubblico" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "“{text}” non è un indirizzo email" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Inviti inviati" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Impossibile inviare gli inviti" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Nessun altro ha ancora accesso." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Invito in sospeso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Invito in sospeso, ancora senza account Proton" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Ruolo aggiornato" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Impossibile aggiornare il ruolo" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Rimuovi accesso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Rimuovere l'accesso?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} non potrà più aprire questo elemento." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Accesso rimosso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Impossibile rimuovere l'accesso" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Chiunque abbia il collegamento ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "protetto da password" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Rimuovi collegamento" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Rimuovere il collegamento pubblico?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5863,51 +5885,87 @@ msgstr "" "Il collegamento smette di funzionare per chiunque lo abbia. Un nuovo " "collegamento avrà un indirizzo diverso." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Rimuovi collegamento" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Collegamento pubblico rimosso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Ruolo del collegamento" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Password (facoltativa)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Scadenza" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Crea collegamento pubblico" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Impostazioni del collegamento" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Cambia chi può modificare, la password o la scadenza. Il collegamento resta lo stesso." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Nuova password" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Aggiungi una password" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Rimuovi la password" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Chiunque abbia il collegamento può aprirlo senza password." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Collegamento aggiornato" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Impossibile modificare il collegamento" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Collegamento pubblico creato" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Impossibile creare il collegamento" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "scaduto" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "scade il {date}" diff --git a/po/nl.po b/po/nl.po index a679be4..e3bad04 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -512,7 +512,7 @@ msgstr "Weergaveopties" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Laden…" @@ -1295,9 +1295,10 @@ msgstr "Kon albums niet laden" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1310,7 +1311,7 @@ msgstr "De Proton Drive-service reageerde niet." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1502,6 +1503,7 @@ msgstr "Naam" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1611,7 +1613,7 @@ msgstr "Kon niet naar prullenbak verplaatsen" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive is niet verbonden." @@ -1792,7 +1794,7 @@ msgstr "Voor ‘Openen met’ moet de Proton Drive-service draaien." #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Link gekopieerd" @@ -2494,7 +2496,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Verwijderen" @@ -4287,14 +4290,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Lezer" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Bewerker" @@ -4456,7 +4459,7 @@ msgid "Link removed" msgstr "Link verwijderd" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Kon de link niet verwijderen" @@ -4519,7 +4522,7 @@ msgid "People" msgstr "Personen" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Link kopiëren" @@ -5597,7 +5600,7 @@ msgid "Info" msgstr "Info" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Een kopie op deze computer bewaren, ook zonder verbinding." @@ -5635,17 +5638,25 @@ msgstr "Map" msgid "File" msgstr "Bestand" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Grootte op Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Geteld door Proton Drive, inclusief items in de prullenbak." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Op deze computer bewaard omdat een map waarin het staat offline beschikbaar " "is." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5653,57 +5664,68 @@ msgstr "" "Een kopie van alles in deze map op deze computer bewaren, ook zonder " "verbinding." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Map openen" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Kon delen niet laden" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Kon de grootte niet laden" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Kon versies niet laden" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Alleen jij" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Iedereen met de link" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Gedeeld met {n} persoon" msgstr[1] "Gedeeld met {n} personen" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Gedeeld met {n} persoon · Openbare link" msgstr[1] "Gedeeld met {n} personen · Openbare link" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} item" +msgstr[1] "{size} · {n} items" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "Geen eerdere versies" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 versie · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5727,123 +5749,123 @@ msgstr "7 dagen" msgid "30 days" msgstr "30 dagen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Kan niet delen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Delen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Personen uitnodigen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" "E-mailadressen van Proton en daarbuiten, gescheiden door spaties of komma's." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "E-mailadressen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Rol" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Bericht (optioneel)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Uitnodigingen versturen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Personen met toegang" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Openbare link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "“{text}” is geen e-mailadres" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Uitnodigingen verstuurd" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Kon uitnodigingen niet versturen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Nog niemand anders heeft toegang." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Uitnodiging openstaand" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Uitnodiging openstaand, nog geen Proton-account" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Rol bijgewerkt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Kon de rol niet bijwerken" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Toegang intrekken" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Toegang intrekken?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} kan dit item niet meer openen." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Toegang ingetrokken" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Kon toegang niet intrekken" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Iedereen met de link ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "met wachtwoord beveiligd" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Link verwijderen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Openbare link verwijderen?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5851,51 +5873,87 @@ msgstr "" "De link werkt niet meer voor iedereen die hem heeft. Een nieuwe link krijgt " "een ander adres." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Link verwijderen" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Openbare link verwijderd" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Rol van link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Wachtwoord (optioneel)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Verloopt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Openbare link aanmaken" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Linkinstellingen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Wijzig wie mag bewerken, het wachtwoord of de vervaldatum. De link blijft hetzelfde." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Nieuw wachtwoord" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Wachtwoord toevoegen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Wachtwoord verwijderen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Iedereen met de link kan hem zonder wachtwoord openen." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Link bijgewerkt" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Kon de link niet wijzigen" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Openbare link aangemaakt" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Kon de link niet aanmaken" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "verlopen" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "verloopt {date}" diff --git a/po/pdfs.pot b/po/pdfs.pot index 59e627a..7a4ca64 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.5.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -484,7 +484,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "" @@ -1253,9 +1253,10 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1268,7 +1269,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1460,6 +1461,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1569,7 +1571,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "" @@ -1748,7 +1750,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "" @@ -2422,7 +2424,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "" @@ -4099,14 +4102,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "" @@ -4259,7 +4262,7 @@ msgid "Link removed" msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "" @@ -4322,7 +4325,7 @@ msgid "People" msgstr "" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "" @@ -5351,7 +5354,7 @@ msgid "Info" msgstr "" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "" @@ -5389,71 +5392,90 @@ msgstr "" msgid "File" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5477,172 +5499,208 @@ msgstr "" msgid "30 days" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "" diff --git a/po/pl.po b/po/pl.po index 2972048..dbe0723 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -519,7 +519,7 @@ msgstr "Opcje widoku" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Wczytywanie…" @@ -1326,9 +1326,10 @@ msgstr "Nie można wczytać albumów" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1341,7 +1342,7 @@ msgstr "Usługa Proton Drive nie odpowiedziała." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1538,6 +1539,7 @@ msgstr "Nazwa" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1649,7 +1651,7 @@ msgstr "Nie można przenieść do kosza" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "Proton Drive nie jest połączony." @@ -1838,7 +1840,7 @@ msgstr "„Otwórz za pomocą” wymaga uruchomionej usługi Proton Drive." #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Skopiowano odnośnik" @@ -2552,7 +2554,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Usuń" @@ -4356,14 +4359,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Przeglądający" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Redaktor" @@ -4529,7 +4532,7 @@ msgid "Link removed" msgstr "Usunięto odnośnik" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Nie można usunąć odnośnika" @@ -4592,7 +4595,7 @@ msgid "People" msgstr "Osoby" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Skopiuj odnośnik" @@ -5689,7 +5692,7 @@ msgid "Info" msgstr "Informacje" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "" "Przechowywanie kopii na tym komputerze, dostępnej nawet bez połączenia." @@ -5728,17 +5731,25 @@ msgstr "Katalog" msgid "File" msgstr "Plik" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Rozmiar w Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Policzony przez Proton Drive, łącznie z elementami w koszu." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Przechowywane na tym komputerze, ponieważ katalog nadrzędny jest dostępny " "offline." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." @@ -5746,33 +5757,37 @@ msgstr "" "Przechowywanie kopii całej zawartości tego katalogu na tym komputerze, " "dostępnej nawet bez połączenia." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Otwórz katalog" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Nie można wczytać udostępniania" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Nie można wczytać rozmiaru" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Nie można wczytać wersji" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Tylko ja" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Każdy, kto ma odnośnik" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" @@ -5780,7 +5795,7 @@ msgstr[0] "Udostępniono {n} osobie" msgstr[1] "Udostępniono {n} osobom" msgstr[2] "Udostępniono {n} osobom" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" @@ -5788,17 +5803,25 @@ msgstr[0] "Udostępniono {n} osobie · publiczny odnośnik" msgstr[1] "Udostępniono {n} osobom · publiczny odnośnik" msgstr[2] "Udostępniono {n} osobom · publiczny odnośnik" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} element" +msgstr[1] "{size} · {n} elementy" +msgstr[2] "{size} · {n} elementów" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "Brak wcześniejszych wersji" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 wersja · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5823,123 +5846,123 @@ msgstr "7 dni" msgid "30 days" msgstr "30 dni" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Nie można udostępnić" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Udostępnij" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Zaproś osoby" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" "Adresy e-mail w Proton i poza nim, oddzielone spacjami lub przecinkami." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "Adresy e-mail" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Rola" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Wiadomość (opcjonalnie)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Wyślij zaproszenia" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Osoby z dostępem" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Publiczny odnośnik" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "„{text}” nie jest adresem e-mail" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Wysłano zaproszenia" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Nie można wysłać zaproszeń" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Nikt inny nie ma jeszcze dostępu." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Zaproszenie oczekuje" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Zaproszenie oczekuje, brak jeszcze konta Proton" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Zaktualizowano rolę" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Nie można zaktualizować roli" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Usuń dostęp" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Usunąć dostęp?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} nie będzie już mieć możliwości otwarcia tego elementu." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Usunięto dostęp" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Nie można usunąć dostępu" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Każdy, kto ma odnośnik ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "chroniony hasłem" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Usuń odnośnik" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Usunąć publiczny odnośnik?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5947,51 +5970,87 @@ msgstr "" "Odnośnik przestanie działać dla wszystkich, którzy go mają. Nowy odnośnik " "będzie miał inny adres." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Usuń odnośnik" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Usunięto publiczny odnośnik" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Rola odnośnika" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Hasło (opcjonalnie)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Wygasa" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Utwórz publiczny odnośnik" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Ustawienia odnośnika" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Proszę zmienić, kto może edytować, hasło lub datę wygaśnięcia. Odnośnik pozostaje ten sam." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Nowe hasło" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Dodaj hasło" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Usuń hasło" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Każdy, kto ma odnośnik, może go otworzyć bez hasła." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Zaktualizowano odnośnik" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Nie można zmienić odnośnika" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Utworzono publiczny odnośnik" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Nie można utworzyć odnośnika" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "wygasł" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "wygasa {date}" diff --git a/po/pt_BR.po b/po/pt_BR.po index a614f63..ebb9dca 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 21:32+0100\n" +"POT-Creation-Date: 2026-10-25 22:10+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -511,7 +511,7 @@ msgstr "Opções de exibição" #: crates/pdfs-gui/src/app/pages/shared.rs:424 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:349 #: crates/pdfs-gui/src/app/pages/trash.rs:284 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:145 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:187 msgid "Loading…" msgstr "Carregando…" @@ -1296,9 +1296,10 @@ msgstr "Não foi possível carregar os álbuns" #: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:618 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:449 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:765 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:803 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:922 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:957 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:995 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:170 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:381 msgid "The Proton Drive service didn't respond." @@ -1311,7 +1312,7 @@ msgstr "O serviço do Proton Drive não respondeu." #: crates/pdfs-gui/src/app/pages/shared.rs:536 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:476 #: crates/pdfs-gui/src/app/widgets/details.rs:157 -#: crates/pdfs-gui/src/app/widgets/details.rs:406 +#: crates/pdfs-gui/src/app/widgets/details.rs:413 #: crates/pdfs-gui/src/hud/preview.rs:277 msgctxt "verb" msgid "Open" @@ -1503,6 +1504,7 @@ msgstr "Nome" #: crates/pdfs-gui/src/app/pages/shared.rs:273 #: crates/pdfs-gui/src/app/pages/trash.rs:153 #: crates/pdfs-gui/src/app/widgets/details.rs:88 +#: crates/pdfs-gui/src/app/widgets/details.rs:380 #: crates/pdfs-gui/src/hud/preview.rs:143 msgctxt "column" msgid "Size" @@ -1612,7 +1614,7 @@ msgstr "Não foi possível mover para a lixeira" #: crates/pdfs-gui/src/app/pages/browser.rs:2376 #: crates/pdfs-gui/src/app/pages/browser.rs:2432 #: crates/pdfs-gui/src/app/pages/browser.rs:2620 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:274 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:341 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:91 msgid "Proton Drive isn't connected." msgstr "O Proton Drive não está conectado." @@ -1791,7 +1793,7 @@ msgstr "“Abrir com” precisa que o serviço do Proton Drive esteja em execuç #: crates/pdfs-gui/src/app/pages/shared.rs:888 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:215 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:494 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:633 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:700 msgid "Link copied" msgstr "Link copiado" @@ -2491,7 +2493,8 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1040 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:567 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Remover" @@ -4278,14 +4281,14 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/shared.rs:646 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:6 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Viewer" msgstr "Leitor" #: crates/pdfs-gui/src/app/pages/shared.rs:647 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:7 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:675 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:93 msgctxt "role" msgid "Editor" msgstr "Editor" @@ -4445,7 +4448,7 @@ msgid "Link removed" msgstr "Link removido" #: crates/pdfs-gui/src/app/pages/shared.rs:1039 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:662 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:729 msgid "Couldn't remove the link" msgstr "Não foi possível remover o link" @@ -4508,7 +4511,7 @@ msgid "People" msgstr "Pessoas" #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:198 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:624 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:691 msgid "Copy link" msgstr "Copiar link" @@ -5585,7 +5588,7 @@ msgid "Info" msgstr "Informações" #: crates/pdfs-gui/src/app/widgets/details.rs:115 -#: crates/pdfs-gui/src/app/widgets/details.rs:399 +#: crates/pdfs-gui/src/app/widgets/details.rs:406 msgid "Keep a copy on this computer, even without a connection." msgstr "Manter uma cópia neste computador, mesmo sem conexão." @@ -5623,74 +5626,93 @@ msgstr "Pasta" msgid "File" msgstr "Arquivo" -#: crates/pdfs-gui/src/app/widgets/details.rs:385 +#: crates/pdfs-gui/src/app/widgets/details.rs:374 +msgid "Size on Proton Drive" +msgstr "Tamanho no Proton Drive" + +#: crates/pdfs-gui/src/app/widgets/details.rs:377 +msgid "Counted by Proton Drive, including items in the trash." +msgstr "Calculado pelo Proton Drive, incluindo os itens na lixeira." + +#: crates/pdfs-gui/src/app/widgets/details.rs:392 msgid "Proton Drive" msgstr "Proton Drive" -#: crates/pdfs-gui/src/app/widgets/details.rs:393 +#: crates/pdfs-gui/src/app/widgets/details.rs:400 msgid "Kept on this computer because a folder it is in is available offline." msgstr "" "Mantido neste computador porque uma pasta que o contém está disponível " "offline." -#: crates/pdfs-gui/src/app/widgets/details.rs:396 +#: crates/pdfs-gui/src/app/widgets/details.rs:403 msgid "" "Keep a copy of everything in this folder on this computer, even without a " "connection." msgstr "" "Manter uma cópia de tudo nesta pasta neste computador, mesmo sem conexão." -#: crates/pdfs-gui/src/app/widgets/details.rs:404 +#: crates/pdfs-gui/src/app/widgets/details.rs:411 #: crates/pdfs-gui/src/hud/preview.rs:275 msgid "Open folder" msgstr "Abrir pasta" -#: crates/pdfs-gui/src/app/widgets/details.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:442 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:448 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:465 +#: crates/pdfs-gui/src/app/widgets/details.rs:455 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:509 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:515 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:532 msgid "Couldn't load sharing" msgstr "Não foi possível carregar o compartilhamento" -#: crates/pdfs-gui/src/app/widgets/details.rs:470 +#: crates/pdfs-gui/src/app/widgets/details.rs:475 +msgid "Couldn't load the size" +msgstr "Não foi possível carregar o tamanho" + +#: crates/pdfs-gui/src/app/widgets/details.rs:495 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:165 #: crates/pdfs-gui/src/app/widgets/versions_dialog.rs:169 msgid "Couldn't load versions" msgstr "Não foi possível carregar as versões" -#: crates/pdfs-gui/src/app/widgets/details.rs:490 +#: crates/pdfs-gui/src/app/widgets/details.rs:515 msgid "Only you" msgstr "Somente você" -#: crates/pdfs-gui/src/app/widgets/details.rs:491 +#: crates/pdfs-gui/src/app/widgets/details.rs:516 msgid "Anyone with the link" msgstr "Qualquer pessoa com o link" -#: crates/pdfs-gui/src/app/widgets/details.rs:492 +#: crates/pdfs-gui/src/app/widgets/details.rs:517 #, rust-format msgid "Shared with {n} person" msgid_plural "Shared with {n} people" msgstr[0] "Compartilhado com {n} pessoa" msgstr[1] "Compartilhado com {n} pessoas" -#: crates/pdfs-gui/src/app/widgets/details.rs:494 +#: crates/pdfs-gui/src/app/widgets/details.rs:519 #, rust-format msgid "Shared with {n} person · Public link" msgid_plural "Shared with {n} people · Public link" msgstr[0] "Compartilhado com {n} pessoa · Link público" msgstr[1] "Compartilhado com {n} pessoas · Link público" -#: crates/pdfs-gui/src/app/widgets/details.rs:506 +#: crates/pdfs-gui/src/app/widgets/details.rs:532 +#, rust-format +msgid "{size} · {n} item" +msgid_plural "{size} · {n} items" +msgstr[0] "{size} · {n} item" +msgstr[1] "{size} · {n} itens" + +#: crates/pdfs-gui/src/app/widgets/details.rs:543 msgid "No earlier versions" msgstr "Nenhuma versão anterior" #. Translators: {date} is the date of the only version. -#: crates/pdfs-gui/src/app/widgets/details.rs:508 +#: crates/pdfs-gui/src/app/widgets/details.rs:545 #, rust-format msgid "1 version · {date}" msgstr "1 versão · {date}" -#: crates/pdfs-gui/src/app/widgets/details.rs:511 +#: crates/pdfs-gui/src/app/widgets/details.rs:548 #, rust-format msgid "{n} version · latest {date}" msgid_plural "{n} versions · latest {date}" @@ -5714,123 +5736,123 @@ msgstr "7 dias" msgid "30 days" msgstr "30 dias" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:273 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:340 msgid "Can't share" msgstr "Não é possível compartilhar" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:289 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:343 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:356 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:410 msgctxt "verb" msgid "Share" msgstr "Compartilhar" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:296 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:363 msgid "Invite people" msgstr "Convidar pessoas" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:298 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:365 msgid "Proton and non-Proton email addresses, separated by spaces or commas." msgstr "" "Endereços de e-mail Proton e não Proton, separados por espaços ou vírgulas." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:302 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 msgid "Email addresses" msgstr "Endereços de e-mail" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:311 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:378 msgid "Role" msgstr "Função" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:314 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:381 msgid "Message (optional)" msgstr "Mensagem (opcional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:316 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:383 msgid "Send Invitations" msgstr "Enviar convites" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:323 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:390 msgid "People with access" msgstr "Pessoas com acesso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:326 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:393 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:679 msgid "Public link" msgstr "Link público" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:369 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:436 #, rust-format msgid "“{text}” isn't an email address" msgstr "“{text}” não é um endereço de e-mail" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:408 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:475 msgid "Invitations sent" msgstr "Convites enviados" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:409 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:476 msgid "Couldn't send invitations" msgstr "Não foi possível enviar os convites" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:477 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:544 msgid "No one else has access yet." msgstr "Ninguém mais tem acesso ainda." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:488 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:555 msgid "Invitation pending" msgstr "Convite pendente" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:489 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:556 msgid "Invitation pending, no Proton account yet" msgstr "Convite pendente, ainda sem conta Proton" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:527 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:594 msgid "Role updated" msgstr "Função atualizada" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:528 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:595 msgid "Couldn't update the role" msgstr "Não foi possível atualizar a função" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:545 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:612 msgid "Remove access" msgstr "Remover acesso" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:561 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:628 msgid "Remove Access?" msgstr "Remover acesso?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:564 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:631 #, rust-format msgid "{email} will no longer be able to open this item." msgstr "{email} não poderá mais abrir este item." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:572 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:639 msgid "Access removed" msgstr "Acesso removido" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:573 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 msgid "Couldn't remove access" msgstr "Não foi possível remover o acesso" #. Translators: {role} is the link's role, such as "Viewer". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:601 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:668 #, rust-format msgid "Anyone with the link ({role})" msgstr "Qualquer pessoa com o link ({role})" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:604 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:671 msgid "password-protected" msgstr "protegido por senha" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:640 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:707 msgid "Remove link" msgstr "Remover link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:654 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:721 msgid "Remove Public Link?" msgstr "Remover link público?" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:655 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:722 msgid "" "The link stops working for everyone who has it. A new link will have a " "different address." @@ -5838,51 +5860,87 @@ msgstr "" "O link deixa de funcionar para todos que o têm. Um novo link terá um " "endereço diferente." -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:656 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:723 msgid "Remove Link" msgstr "Remover link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:661 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:728 msgid "Public link removed" msgstr "Link público removido" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:682 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:746 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:807 msgid "Link role" msgstr "Função do link" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:686 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:748 msgid "Password (optional)" msgstr "Senha (opcional)" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:695 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:752 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:830 msgid "Expires" msgstr "Expira" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:697 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:753 msgid "Create Public Link" msgstr "Criar link público" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:756 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:800 +msgid "Link settings" +msgstr "Configurações do link" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 +msgid "" +"Change who can edit, the password or the expiry. The link stays the same." +msgstr "Altere quem pode editar, a senha ou a expiração. O link continua o mesmo." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 +msgid "New password" +msgstr "Nova senha" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:851 +msgid "Add a password" +msgstr "Adicionar uma senha" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:881 +msgid "Remove the password" +msgstr "Remover a senha" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:883 +msgid "Anyone with the link can open it without a password." +msgstr "Qualquer pessoa com o link pode abri-lo sem senha." + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:915 +msgid "Link updated" +msgstr "Link atualizado" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:917 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:921 +msgid "Couldn't change the link" +msgstr "Não foi possível alterar o link" + +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:948 msgid "Public link created" msgstr "Link público criado" -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:760 -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:764 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:952 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:956 msgid "Couldn't create the link" msgstr "Não foi possível criar o link" #. Translators: a public link past its expiry date. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:816 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1008 msgid "expired" msgstr "expirado" #. Translators: strftime format for a link's expiry date; "%x" is the locale's date, such as "09/23/26". -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:819 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1011 msgid "%x" msgstr "%x" #. Translators: {date} is the date a public link stops working. -#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:826 +#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:1018 #, rust-format msgid "expires {date}" msgstr "expira em {date}" From 9089c8d13cb42da68762cea84b8981a0cf265e78 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 26 Oct 2026 16:57:06 +0100 Subject: [PATCH 4/9] feat(fuse): answer copy_file_range from bytes already on this machine A copy inside the mount went through the kernel's read/write loop, one FUSE round trip per page, because copy_file_range answered ENOSYS. The daemon now copies a range whose source bytes are local (an open write handle, a queued write, the cache) into the destination's scratch file, the same way write stages them. A range it would have to download gets EOPNOTSUPP, which makes the kernel copy that one call itself and keeps the operation enabled. The copy still uploads: Drive cannot copy into a file cp has already created. In the simulation, a warm cp of a 256 MiB file went from about 100 MiB/s to about 450 MiB/s (debug build). --- crates/pdfs-fuse/src/filesystem.rs | 162 ++++++++++++++++++----------- crates/pdfs-fuse/src/reads.rs | 86 +++++++++++++++ crates/pdfs-fuse/src/sim/daemon.rs | 146 ++++++++++++++++++++++++++ docs/BUGS.md | 7 ++ docs/CHANGELOG.md | 4 + 5 files changed, 343 insertions(+), 62 deletions(-) diff --git a/crates/pdfs-fuse/src/filesystem.rs b/crates/pdfs-fuse/src/filesystem.rs index 5059202..ebbb6a1 100644 --- a/crates/pdfs-fuse/src/filesystem.rs +++ b/crates/pdfs-fuse/src/filesystem.rs @@ -430,58 +430,10 @@ impl Filesystem for ProtonFs { reply.error(error); return; } - let fh = fh.0; - // Stage the bytes straight into the scratch file (no base download): only - // the untouched remainder is pulled from the remote, and only at commit. - let file = { - let st = self.core.state(); - match st.handles.get(&fh).and_then(|&i| st.active_writes.get(&i)) { - Some(aw) => aw.file.clone(), - None => { - reply.error(Errno::EBADF); - return; - } - } - }; - if let Err(e) = file.write_all_at(data, offset) { - error!(ino = ino.0, fh, error = %e, "scratch write failed"); - // A full local disk is not a broken file: answer `ENOSPC` so the - // application can say so (and so `cp`/editors take their own - // out-of-space path), and free what the cache is holding — the - // scratch file the next write goes to shares that filesystem. - if e.raw_os_error() == Some(libc::ENOSPC) { - self.core.cache.emergency_evict(); - reply.error(Errno::ENOSPC); - } else { - reply.error(Errno::EIO); - } - return; + match self.stage_write(ino.0, fh.0, offset, data) { + Ok(()) => reply.written(data.len() as u32), + Err(error) => reply.error(error), } - let new_len = { - let mut st = self.core.state(); - let Some(aw) = st - .handles - .get(&fh) - .copied() - .and_then(|i| st.active_writes.get_mut(&i)) - else { - reply.error(Errno::EBADF); - return; - }; - aw.record_write(offset, offset + data.len() as u64); - let len = aw.len; - st.set_size(ino.0, len); - len - }; - debug!( - ino = ino.0, - fh, - offset, - len = data.len(), - new_len, - "staged write" - ); - reply.written(data.len() as u32); } #[allow(clippy::too_many_arguments)] @@ -1016,20 +968,59 @@ impl Filesystem for ProtonFs { fn copy_file_range( &self, _req: &Request, - _ino_in: INodeNo, + ino_in: INodeNo, _fh_in: FileHandle, - _offset_in: u64, - _ino_out: INodeNo, - _fh_out: FileHandle, - _offset_out: u64, - _len: u64, - _flags: CopyFileRangeFlags, + offset_in: u64, + ino_out: INodeNo, + fh_out: FileHandle, + offset_out: u64, + len: u64, + flags: CopyFileRangeFlags, reply: ReplyWrite, ) { - // Also must stay ENOSYS: there is no server-side copy, and this is the - // errno that sends coreutils (and the kernel) down the read/write path - // instead of failing the copy outright. - reply.error(Errno::ENOSYS); + // Copied here when the source bytes are on this machine, as `write` + // would stage them, minus a FUSE round trip per page: `cp` of a cached + // 256 MiB file ran at about 100 MiB/s through read and write. Anything + // that would have to be downloaded gets `EOPNOTSUPP`, which makes the + // kernel copy that one call through read and write itself; `ENOSYS` + // would turn the op off for the whole mount. There is no server-side + // copy into a file `cp` has already created, so the copy still uploads. + // + // On the dispatch loop, like `write`, so it keeps its order with the + // reads and writes of the same handle. [`COPY_RANGE_MAX`] bounds how + // long one call holds the loop. + let (ino_in, ino_out) = (self.tree(ino_in), self.tree(ino_out)); + if !flags.is_empty() || ino_in == ino_out { + reply.error(Errno::EOPNOTSUPP); + return; + } + if let Err(error) = self.core.require_writable(ino_out.0) { + reply.error(error); + return; + } + let bytes = match self + .core + .read_local(ino_in.0, offset_in, len.min(COPY_RANGE_MAX)) + { + Ok(Some(bytes)) => bytes, + Ok(None) => { + debug!(ino_in = ino_in.0, offset_in, "copy range not local"); + reply.error(Errno::EOPNOTSUPP); + return; + } + Err(error) => { + reply.error(error); + return; + } + }; + if bytes.is_empty() { + reply.written(0); + return; + } + match self.stage_write(ino_out.0, fh_out.0, offset_out, &bytes) { + Ok(()) => reply.written(bytes.len() as u32), + Err(error) => reply.error(error), + } } } @@ -1057,6 +1048,11 @@ pub struct ProtonFs { /// worker busy indefinitely. const OPEN_BASE_ATTEMPTS: u32 = 3; +/// The most one `copy_file_range` call copies; the caller loops for the rest. +/// A local copy of this much takes milliseconds, which is how long it holds +/// the dispatch loop. +const COPY_RANGE_MAX: u64 = 16 * 1024 * 1024; + /// One directory's entries as `readdir` reports them: `.` and `..` first, then /// the interned children in `children` order. /// @@ -1641,6 +1637,48 @@ impl ProtonFs { } /// The body of [`Filesystem::create`], run off the dispatch loop. + /// Stage `data` at `offset` of the write handle `fh` on `ino`, straight into + /// its scratch file (no base download): only the untouched remainder is + /// pulled from the remote, and only at commit. + fn stage_write(&self, ino: u64, fh: u64, offset: u64, data: &[u8]) -> Result<(), Errno> { + let file = { + let st = self.core.state(); + match st.handles.get(&fh).and_then(|&i| st.active_writes.get(&i)) { + Some(aw) => aw.file.clone(), + None => return Err(Errno::EBADF), + } + }; + if let Err(e) = file.write_all_at(data, offset) { + error!(ino, fh, error = %e, "scratch write failed"); + // A full local disk is not a broken file: answer `ENOSPC` so the + // application can say so (and so `cp`/editors take their own + // out-of-space path), and free what the cache is holding — the + // scratch file the next write goes to shares that filesystem. + if e.raw_os_error() == Some(libc::ENOSPC) { + self.core.cache.emergency_evict(); + return Err(Errno::ENOSPC); + } + return Err(Errno::EIO); + } + let new_len = { + let mut st = self.core.state(); + let Some(aw) = st + .handles + .get(&fh) + .copied() + .and_then(|i| st.active_writes.get_mut(&i)) + else { + return Err(Errno::EBADF); + }; + aw.record_write(offset, offset + data.len() as u64); + let len = aw.len; + st.set_size(ino, len); + len + }; + debug!(ino, fh, offset, len = data.len(), new_len, "staged write"); + Ok(()) + } + fn serve_create(&self, parent: u64, name: &str, reply: ReplyCreate) { if let Err(error) = self.core.require_writable(parent) { reply.error(error); diff --git a/crates/pdfs-fuse/src/reads.rs b/crates/pdfs-fuse/src/reads.rs index 5b51a26..a785177 100644 --- a/crates/pdfs-fuse/src/reads.rs +++ b/crates/pdfs-fuse/src/reads.rs @@ -1101,6 +1101,92 @@ impl Core { }) } + /// Bytes `[offset, offset + size)` of file `ino` as `read` would serve + /// them, but only from this machine: an open write handle, a queued write, + /// or the caches. `Ok(None)` the moment any of it would have to be + /// downloaded, and for a size still provisional (B100), which only the + /// network settles. Short or empty past the end of the file. + /// + /// `copy_file_range` answers with this and leaves anything else to the + /// kernel's read/write copy. + pub(super) fn read_local( + &self, + ino: u64, + offset: u64, + size: u64, + ) -> Result>, Errno> { + let handle = self.state().active_writes.get(&ino).map(|h| { + ( + h.file.clone(), + h.len, + h.uid.clone(), + h.base_mtime, + h.base_size, + h.written.clone(), + ) + }); + if let Some((file, len, uid, base_mtime, base_size, written)) = handle { + return self.serve_open_read_local( + &file, len, &uid, base_mtime, base_size, &written, offset, size, + ); + } + let (uid, mtime, fsize, provisional) = { + let st = self.state(); + match st.entries.get(&ino) { + Some(e) if e.node.is_file() => ( + e.uid.clone(), + e.node.modification_time, + node_size(&e.node), + matches!( + &e.node.kind, + NodeKind::File { + claimed_size: None, + .. + } + ), + ), + Some(_) => return Err(Errno::EISDIR), + None => return Err(Errno::ENOENT), + } + }; + let uid = match is_local_uid(&uid) { + true => self.landed_stand_in_uid(&uid).unwrap_or(uid), + false => uid, + }; + if let Some(pending) = self.pending.lock().get(&uid).cloned() { + let m = &pending.meta; + let file = File::open(&pending.path).map_err(|e| { + error!(%uid, path = %pending.path.display(), error = %e, "open staged blob failed"); + Errno::EIO + })?; + let mut written = Intervals::default(); + for &(s, e) in &m.authored { + written.add(s, e); + } + return self.serve_open_read_local( + &Arc::new(file), + m.len, + &uid, + m.base_mtime, + m.base_size, + &written, + offset, + size, + ); + } + // Created here and never written: an empty file. + if is_local_uid(&uid) { + return Ok(Some(Vec::new())); + } + if provisional { + return Ok(None); + } + if offset >= fsize || size == 0 { + return Ok(Some(Vec::new())); + } + Ok(self.cached_range(&uid, mtime, fsize, offset, size.min(fsize - offset))) + } + /// The largest amount [`Core::fill_gaps_cached`] will copy out of the local /// caches while a `release(2)` is in progress. /// diff --git a/crates/pdfs-fuse/src/sim/daemon.rs b/crates/pdfs-fuse/src/sim/daemon.rs index 99cbbbc..5a425a3 100644 --- a/crates/pdfs-fuse/src/sim/daemon.rs +++ b/crates/pdfs-fuse/src/sim/daemon.rs @@ -2433,6 +2433,152 @@ mod tests { eprintln!("wifi: syscalls {wifi_syscalls:?}, drain {wifi_drain:?}"); } + /// `copy_file_range` inside the mount is answered from the bytes the daemon + /// holds, and left to the kernel for bytes it would have to download. Every + /// source kind has to come out byte for byte: cached, queued, open with + /// unsaved writes, and on Drive only. + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_copy_inside_the_mount_has_the_source_bytes() { + use std::os::fd::AsRawFd as _; + use std::os::unix::fs::FileExt as _; + + fn copy_range(from: &std::fs::File, at: u64, to: &std::fs::File, to_at: u64, len: usize) { + let (mut at, mut to_at) = (at as i64, to_at as i64); + let mut left = len; + while left > 0 { + // SAFETY: both descriptors are open; the offsets are ours. + let n = unsafe { + libc::copy_file_range( + from.as_raw_fd(), + &mut at, + to.as_raw_fd(), + &mut to_at, + left, + 0, + ) + }; + assert!(n > 0, "copy_file_range: {}", io::Error::last_os_error()); + left -= n as usize; + } + } + + let pattern = |len: usize, seed: u8| -> Vec { + (0..len).map(|i| (i % 253) as u8 ^ seed).collect() + }; + let drive = FakeDrive::new(); + // On Drive before the mount knows it, so nothing of it is cached. + let remote = pattern(9 << 20, 1); + drive.device().write("remote.bin", &remote); + let dir = scratch("copy-range"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + let mount = &daemon.mountpoint; + + // Downloaded through the kernel's own copy, then served from the cache. + std::fs::copy(mount.join("remote.bin"), mount.join("remote-1.bin")).unwrap(); + assert!(std::fs::read(mount.join("remote-1.bin")).unwrap() == remote); + std::fs::copy(mount.join("remote.bin"), mount.join("remote-2.bin")).unwrap(); + assert!(std::fs::read(mount.join("remote-2.bin")).unwrap() == remote); + + // Queued and not on Drive yet: the staged blob is the content. + let paused = |paused| Request::SetSyncPaused { + paused, + until: None, + }; + daemon.request(&paused(true)).unwrap(); + let queued = pattern(20 << 20, 2); + std::fs::write(mount.join("queued.bin"), &queued).unwrap(); + std::fs::copy(mount.join("queued.bin"), mount.join("queued-copy.bin")).unwrap(); + assert!(std::fs::read(mount.join("queued-copy.bin")).unwrap() == queued); + + // Open with writes not saved yet: the copy sees them, as a read would. + let open = std::fs::OpenOptions::new() + .read(true) + .write(true) + .open(mount.join("queued.bin")) + .unwrap(); + open.write_all_at(b"UNSAVED", 100).unwrap(); + let target = std::fs::File::create(mount.join("unsaved-copy.bin")).unwrap(); + copy_range(&open, 96, &target, 0, 16); + drop(target); + drop(open); + let mut expected = queued[96..112].to_vec(); + expected[4..11].copy_from_slice(b"UNSAVED"); + assert_eq!( + std::fs::read(mount.join("unsaved-copy.bin")).unwrap(), + expected + ); + + // A range into the middle of a file keeps the bytes around it. + std::fs::write(mount.join("middle.bin"), b"0123456789").unwrap(); + let source = std::fs::File::open(mount.join("remote.bin")).unwrap(); + let target = std::fs::OpenOptions::new() + .write(true) + .open(mount.join("middle.bin")) + .unwrap(); + copy_range(&source, 5, &target, 3, 4); + drop(target); + let mut expected = b"0123456789".to_vec(); + expected[3..7].copy_from_slice(&remote[5..9]); + assert_eq!(std::fs::read(mount.join("middle.bin")).unwrap(), expected); + + daemon.request(&paused(false)).unwrap(); + let mut edited = queued.clone(); + edited[100..107].copy_from_slice(b"UNSAVED"); + let file = |bytes: &[u8]| Some(Entry::File(Arc::new(bytes.to_vec()))); + assert!(wait_until(Duration::from_secs(120), || { + let tree = drive.tree(); + daemon.pending().is_ok_and(|ops| ops.is_empty()) + && tree.get("queued.bin").cloned() == file(&edited) + && tree.get("queued-copy.bin").cloned() == file(&queued) + && tree.get("remote-2.bin").cloned() == file(&remote) + && tree.get("middle.bin").cloned() == file(&expected) + })); + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } + + /// How long `cp` inside the mount takes for a file the daemon already + /// holds, cold and from the page cache. It decides whether the daemon + /// should answer `copy_file_range` itself rather than leave the kernel to + /// copy through read and write. Runs when `PDFS_SIM_MEASURE` is set. + #[test] + #[ignore = "mounts FUSE: run with `PDFS_SIM_MEASURE=1 cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_copy_inside_the_mount_measures_its_speed() { + if std::env::var_os("PDFS_SIM_MEASURE").is_none() { + eprintln!("skipped: set PDFS_SIM_MEASURE to measure the copy"); + return; + } + const SIZE: usize = 256 << 20; + let drive = FakeDrive::new(); + let dir = scratch("copy-speed"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + let mount = &daemon.mountpoint; + let bytes: Vec = (0..SIZE).map(|i| (i % 251) as u8).collect(); + std::fs::write(mount.join("big.bin"), &bytes).unwrap(); + assert!(wait_until(Duration::from_secs(120), || { + daemon.pending().is_ok_and(|ops| ops.is_empty()) + })); + for (round, name) in ["copy-1.bin", "copy-2.bin", "copy-3.bin"] + .into_iter() + .enumerate() + { + let start = Instant::now(); + let status = std::process::Command::new("cp") + .arg(mount.join("big.bin")) + .arg(mount.join(name)) + .status() + .unwrap(); + let took = start.elapsed(); + assert!(status.success()); + let mib_per_s = (SIZE >> 20) as f64 / took.as_secs_f64(); + eprintln!("cp round {round}: {took:?}, {mib_per_s:.0} MiB/s"); + assert!(std::fs::read(mount.join(name)).unwrap() == bytes); + } + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } + #[test] #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] fn half_of_a_wide_folder_unlinked_at_once_leaves_the_other_half() { diff --git a/docs/BUGS.md b/docs/BUGS.md index aad9d31..bf8a4ce 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -5877,6 +5877,13 @@ Only the three namespace ops were strictly required (the other four silence themselves once the kernel caches `ENOSYS`), but implementing all seven keeps the refusal explicit and documented at the call site rather than inherited. +`copy_file_range` has since been implemented: the daemon copies a range whose bytes are on this +machine (an open write handle, a queued write, the cache) into the destination's scratch file, +and answers `EOPNOTSUPP` for anything it would have to download. Unlike `ENOSYS`, that errno makes +the kernel copy that one call through read and write and keeps asking the daemon next time. +A warm `cp` of a 256 MiB file inside the mount went from about 100 MiB/s to about 450 MiB/s +(sim, debug build; `a_copy_inside_the_mount_measures_its_speed`). + **Verified:** full live acceptance run after the fix — 19 pass / 1 skip, the capability diff identical to the pre-fix run, and **0** `Not Implemented` lines in the journal across the whole run (was 17, 10 of them `link`). diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c296761..12d0bd0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -34,6 +34,10 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). Proton Drive counts it, including items in the trash. From a terminal: `pdfs du PATH`. ### Changed +- **Copying a file inside the mount is faster** when the computer already has the file, for + example with `cp` or a file manager: the copy is made on this computer, about four times + faster for a 256 MiB file, instead of going through the mount page by page. A file that is + only on Proton Drive is copied as before. The copy is then uploaded as usual. - **Reorganised documentation, now also on the [wiki](https://github.com/narrrl/proton-drive-linux/wiki).** A new [Getting started](https://github.com/narrrl/proton-drive-linux/wiki/Getting-Started) page and From 917e7268f9a91bebebef58d1c03dbdc978b9f981 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 26 Oct 2026 17:03:33 +0100 Subject: [PATCH 5/9] build(deps): proton-sdk and proton-drive-rs 0.10.0 0.10.0 adds copy_node, get_folder_size, update_public_link and a link's custom password. --- Cargo.lock | 8 ++++---- Cargo.toml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0bac2c3..88e9472 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3779,9 +3779,9 @@ dependencies = [ [[package]] name = "proton-drive-rs" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6b87f78711e8fc72737c8eb24ebda156079308d79ab37ca2b1b32de6812880" +checksum = "8f70318394b2815b009c52f804d75747086db93a338ceb6eae62541f2b25d5bf" dependencies = [ "async-trait", "base64 0.23.1", @@ -3806,9 +3806,9 @@ dependencies = [ [[package]] name = "proton-sdk" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f1936755c603b98de1c82a5b343c6232e9fea8adaa77139f7cb8fcddcda697" +checksum = "4196392032f56b3bbaac0bb1f24eea62fa7e2a0af72004de8d08e518d14720fb" dependencies = [ "aes-gcm 0.11.1", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 82ae7b6..e4f243a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,8 @@ keywords = ["proton", "drive", "fuse", "sync", "linux"] categories = ["filesystem", "command-line-utilities"] [workspace.dependencies] -proton-sdk = { version = "0.9.1" } -proton-drive-rs = { version = "0.9.1" } +proton-sdk = { version = "0.10.0" } +proton-drive-rs = { version = "0.10.0" } # Internal crates. pdfs-core = { path = "crates/pdfs-core" } From ea10a432166c08b816f54fc82c0dcb165e4b5ed6 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 26 Oct 2026 17:45:14 +0100 Subject: [PATCH 6/9] fix(fuse): a copy right after a save waits for the edit (B256) close(2) returns before the kernel sends release, and release takes the write handle out of the open writes a few milliseconds before the revision is in the queue. A `pdfs copy` checked in that gap found the edit nowhere and copied the version Drive had. A folder copy looked only at the queue, so it also missed files below it still open with unsaved writes. release now keeps the inode in State::releasing until the revision is queued. A copy refuses a file or folder with unsaved writes, or a release still queueing, at it or below it, and a move checks the same set. --- crates/pdfs-fuse/src/filesystem.rs | 11 +++++++++-- crates/pdfs-fuse/src/lib.rs | 10 +++++++++- crates/pdfs-fuse/src/relocate.rs | 3 ++- crates/pdfs-fuse/src/state.rs | 6 ++++++ docs/BUGS.md | 25 +++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/crates/pdfs-fuse/src/filesystem.rs b/crates/pdfs-fuse/src/filesystem.rs index ebbb6a1..5d3e443 100644 --- a/crates/pdfs-fuse/src/filesystem.rs +++ b/crates/pdfs-fuse/src/filesystem.rs @@ -671,7 +671,7 @@ impl Filesystem for ProtonFs { reply: ReplyEmpty, ) { let ino = self.tree(ino); - let (handle, unlinked_uid) = { + let (handle, unlinked_uid, releasing) = { let mut st = self.core.state(); let unlinked_uid = release_unlinked_entry(&mut st, ino.0); let ino = st.handles.remove(&fh.0); @@ -684,7 +684,11 @@ impl Filesystem for ProtonFs { None } }); - (h, unlinked_uid) + let releasing = ino.filter(|_| h.is_some()); + if let Some(ino) = releasing { + st.releasing.insert(ino); + } + (h, unlinked_uid, releasing) }; // Deliberately **not** handed to a worker, unlike the other slow // handlers here. The kernel does not wait for a `release` reply before @@ -701,6 +705,9 @@ impl Filesystem for ProtonFs { // finish it (audit F1). What is left is a rename, two fsyncs, a database // insert, and at most a bounded copy out of the local cache. self.finish_release(handle, unlinked_uid, reply); + if let Some(ino) = releasing { + self.core.state().releasing.remove(&ino); + } } fn unlink(&self, _req: &Request, parent: INodeNo, name: &OsStr, reply: ReplyEmpty) { diff --git a/crates/pdfs-fuse/src/lib.rs b/crates/pdfs-fuse/src/lib.rs index ba77d2a..4e9fdc1 100644 --- a/crates/pdfs-fuse/src/lib.rs +++ b/crates/pdfs-fuse/src/lib.rs @@ -5230,7 +5230,15 @@ impl Core { .entries .get(&ino) .ok_or_else(|| CoreError::not_found(format!("{} is gone", rel.display())))?; - let unsaved = st.active_writes.get(&ino).is_some_and(|w| w.dirty); + // Unsaved writes, or a release still queueing them, to the file or, + // for a folder, to any file below it. + let unsaved = st + .active_writes + .iter() + .filter(|(_, w)| w.dirty) + .map(|(&open, _)| open) + .chain(st.releasing.iter().copied()) + .any(|open| relocate::ino_is_under(&st, open, ino)); (entry.node.name.clone(), entry.node.is_folder(), unsaved) }; // Unlike a move, a copy cannot wait in the queue: it needs the node as diff --git a/crates/pdfs-fuse/src/relocate.rs b/crates/pdfs-fuse/src/relocate.rs index f3bfb28..945d85e 100644 --- a/crates/pdfs-fuse/src/relocate.rs +++ b/crates/pdfs-fuse/src/relocate.rs @@ -133,7 +133,7 @@ fn rename_noreplace(from: &Path, to: &Path) -> std::io::Result<()> { /// Whether inode `ino` is `root` or lies under it in the tree. Bounded, so a /// parent cycle in corrupt data cannot hang the caller. -fn ino_is_under(st: &State, mut ino: u64, root: u64) -> bool { +pub(crate) fn ino_is_under(st: &State, mut ino: u64, root: u64) -> bool { for _ in 0..MAX_TREE_DEPTH { if ino == root { return true; @@ -456,6 +456,7 @@ impl Core { writing = st .active_writes .keys() + .chain(&st.releasing) .any(|&open| ino_is_under(st, open, ino)); }); Ok(writing) diff --git a/crates/pdfs-fuse/src/state.rs b/crates/pdfs-fuse/src/state.rs index aaf7996..9a66e0a 100644 --- a/crates/pdfs-fuse/src/state.rs +++ b/crates/pdfs-fuse/src/state.rs @@ -266,6 +266,11 @@ pub(crate) struct State { pub(crate) next_ino: u64, /// Shared write state keyed by inode. Concurrent writers share the scratch file. pub(crate) active_writes: HashMap, + /// Inodes whose last write handle `release` has taken out of + /// [`State::active_writes`] and is still queueing. `close(2)` returns + /// before that, and in between the edit is in neither the handles nor the + /// queue, so a check for changes not on Drive yet looks here too. + pub(crate) releasing: HashSet, /// Maps file handle id (fh) to inode (ino). Read-only opens use fh 0 and /// have no entry here. pub(crate) handles: HashMap, @@ -428,6 +433,7 @@ impl State { roots: HashSet::new(), next_ino: FALLBACK_INO, active_writes: HashMap::new(), + releasing: HashSet::new(), handles: HashMap::new(), next_fh: 1, dir_snapshots: HashMap::new(), diff --git a/docs/BUGS.md b/docs/BUGS.md index bf8a4ce..dd2fe73 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -100,6 +100,7 @@ a live account since. | Entry | Title | |---|---| +| [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version | | [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives | | [B253](#b253--the-app-shows-the-sign-in-page-when-the-keyring-is-locked) | The app shows the sign-in page when the keyring is locked | | [B252](#b252--computers-sharing-a-device-overwrite-each-others-profile) | Computers sharing a device overwrite each other's profile | @@ -357,6 +358,30 @@ a live account since. Newest first. +### B256 — `pdfs copy` right after a save copies the old version + +**Status:** Fixed, not verified live +**Found:** 2026-10-26, the simulation `a_pdfs_copy_copies_on_drive_and_waits_for_unsynced_changes` +failing on most runs. The feature was not released yet. +**Where:** `release` in `crates/pdfs-fuse/src/filesystem.rs`; `copy_to` in +`crates/pdfs-fuse/src/lib.rs`; `has_pending_work_under` in `crates/pdfs-fuse/src/relocate.rs` + +**Repro:** Save a file in the mount and copy it, or its folder, with `pdfs copy` straight away. +The copy goes ahead and Drive copies the version before the save. + +**Cause.** `close(2)` returns before the kernel sends `release`. `release` takes the write handle +out of the open writes and then queues the revision, which takes a few milliseconds. A copy +checked in between found the edit in neither place. A folder copy looked only at the queue, so +it also missed a file still open with unsaved writes. + +**Fix.** `release` keeps the inode in `State::releasing` until the revision is queued. A copy +refuses a file or folder with unsaved writes, or a release still queueing, at it or below it. +A move checks the same set. + +**Test:** The simulation above passed 6 of 6 runs after the fix. + +--- + ### B254 — An edit in the same second as a new upload never arrives **Status:** Fixed, not verified live From a5acae41b38b6dda29f30710366c365d29afbd0e Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 26 Oct 2026 17:45:22 +0100 Subject: [PATCH 7/9] fix(sync,gui,cli): get a synced folder unstuck when its local copy is gone (#46) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A mirror folder whose files were all gone from this computer stayed in error for good. The wipe guard rightly refuses to trash the whole folder on Drive, but nothing got the folder out of that state: a queued switch to on-demand waits for a pass that ends idle, and its push pass hit the same guard. Only removing the folder from sync cleared the baseline that made the empty folder read as "delete everything". - The push pass for a switch to on-demand forgets the baseline rows of a local copy that is gone in full instead of trashing them, so the switch goes ahead and the mount shows what Drive has. - New Request::ResetSyncFolder, `pdfs sync reset ID` and "Sync From Scratch…" in a synced folder's menu clear a mirror folder's baseline (and a queued switch to on-demand, whose push pass would upload a duplicate of every file). The next pass compares both sides as on the first sync: one-sided files are copied across, files that differ keep both versions, nothing is deleted. - The wipe guards' messages name the reset; restore logs why it skipped a folder. Two simulations cover it. The on-demand one failed in exactly the reported state (mirror, pending ondemand, error) before the fix. All 8 catalogs translated. --- crates/pdfs-cli/src/main.rs | 8 ++ crates/pdfs-core/src/control.rs | 6 ++ crates/pdfs-fuse/src/control.rs | 8 ++ crates/pdfs-fuse/src/devices.rs | 44 +++++++++ crates/pdfs-fuse/src/profile.rs | 4 + crates/pdfs-fuse/src/sim/daemon.rs | 108 +++++++++++++++++++++ crates/pdfs-fuse/src/sync.rs | 36 ++++++- crates/pdfs-fuse/src/sync/planner.rs | 6 +- crates/pdfs-gui/src/app/pages/locations.rs | 52 +++++++++- docs/BUGS.md | 31 ++++++ docs/CHANGELOG.md | 11 +++ docs/CLI.md | 1 + docs/SYNCED_FOLDERS.md | 8 ++ docs/TROUBLESHOOTING.md | 16 +++ po/de.po | 82 +++++++++++----- po/en_GB.po | 81 +++++++++++----- po/es.po | 81 +++++++++++----- po/fr.po | 82 +++++++++++----- po/it.po | 82 +++++++++++----- po/nl.po | 82 +++++++++++----- po/pdfs.pot | 78 ++++++++++----- po/pl.po | 82 +++++++++++----- po/pt_BR.po | 81 +++++++++++----- 23 files changed, 832 insertions(+), 238 deletions(-) diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index 845e211..d40b616 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -709,6 +709,13 @@ enum SyncCmd { /// Optional synced-folder id; omit to reconcile every folder. id: Option, }, + /// Forget what a synced folder synced before and compare it with Proton + /// Drive afresh: what one side has alone is copied to the other, and a file + /// that differs keeps both versions. Nothing is deleted. + Reset { + /// Synced-folder id (from `sync list`). + id: i64, + }, /// Pause syncing: queued uploads and mirror folders wait, reads keep working. Pause { /// End the pause by itself after this long, e.g. `30m`, `1h`, `2d`. @@ -1165,6 +1172,7 @@ fn cmd_sync(action: SyncCmd) -> Result<()> { })?)? } SyncCmd::Now { id } => ok_or_bail(control_request(CtlRequest::SyncNow { id })?)?, + SyncCmd::Reset { id } => ok_or_bail(control_request(CtlRequest::ResetSyncFolder { id })?)?, SyncCmd::Pause { folder: Some(id), .. } => ok_or_bail(control_request(CtlRequest::SetSyncFolderPaused { diff --git a/crates/pdfs-core/src/control.rs b/crates/pdfs-core/src/control.rs index 0e17bd3..c111146 100644 --- a/crates/pdfs-core/src/control.rs +++ b/crates/pdfs-core/src/control.rs @@ -480,6 +480,11 @@ pub enum Request { /// Pause or resume one mirror folder's reconcile, independent of the /// global pause. Persisted until resumed. Replies with [`Response::Ok`]. SetSyncFolderPaused { id: i64, paused: bool }, + /// Forget what a mirror folder synced before, so its next pass compares + /// both sides afresh: what is on one side only is copied to the other, and + /// a file that differs keeps both versions. Nothing is deleted. Replies + /// with [`Response::Ok`]. + ResetSyncFolder { id: i64 }, /// Force a reconcile pass: one folder by id, or all when `id` is `None`. /// Replies with [`Response::Ok`]. SyncNow { id: Option }, @@ -3209,6 +3214,7 @@ mod tests { id: 3, paused: true, }, + Request::ResetSyncFolder { id: 3 }, Request::SetBandwidthLimits { upload: 1_000_000, download: 0, diff --git a/crates/pdfs-fuse/src/control.rs b/crates/pdfs-fuse/src/control.rs index 0d8604f..ea23938 100644 --- a/crates/pdfs-fuse/src/control.rs +++ b/crates/pdfs-fuse/src/control.rs @@ -388,6 +388,7 @@ fn touched_topics(request: &CtlRequest) -> &'static [Topic] { | R::RemoveSyncFolder { .. } | R::SetSyncFolderMode { .. } | R::SetSyncFolderPaused { .. } + | R::ResetSyncFolder { .. } | R::RestoreSyncFolders { .. } | R::RestoreDeviceFolders { .. } => &[Topic::Locations, Topic::Devices], R::RetryPendingOp { .. } => &[Topic::Queue], @@ -1432,6 +1433,13 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U Err(e) => CtlResponse::error(e), } } + Ok(CtlRequest::ResetSyncFolder { id }) => match core.reset_sync_folder(id) { + Ok(message) => { + core.log_activity(ActivityKind::Sync, &message, "", true); + CtlResponse::Ok { message } + } + Err(e) => CtlResponse::error(e), + }, Ok(CtlRequest::SyncNow { id }) => { core.sync_now(id); CtlResponse::Ok { diff --git a/crates/pdfs-fuse/src/devices.rs b/crates/pdfs-fuse/src/devices.rs index 72560b7..b278be6 100644 --- a/crates/pdfs-fuse/src/devices.rs +++ b/crates/pdfs-fuse/src/devices.rs @@ -1080,6 +1080,50 @@ impl Core { } } + /// Forget what a mirror folder synced before, so its next pass compares the + /// two sides as on the first sync: what one side has alone is copied to the + /// other, and a file that differs is kept twice as a conflict. Nothing is + /// deleted on either side. + /// + /// This is the way out for a folder whose passes refuse to run because its + /// whole local copy, or its whole copy on Drive, is gone (#46). The baseline + /// is what makes that read as "delete everything", and it is what this + /// drops. A queued switch to on-demand is dropped with it: the push pass + /// that switch runs reads an unrecorded local file as new and would upload + /// a second copy of every file Drive already has. + pub(crate) fn reset_sync_folder(&self, id: i64) -> CoreResult { + let lock = self.sync_lock(id); + let Some(_guard) = lock.try_lock() else { + return Err(CoreError::conflict( + "this folder is syncing; try again when the pass ends", + )); + }; + let folder = self + .db + .sync_folder_get(id) + .map_err(|e| CoreError::internal(format!("db: {e:?}")))? + .ok_or_else(|| CoreError::not_found(format!("no synced folder with id {id}")))?; + if folder.mode != "mirror" { + return Err(CoreError::invalid( + "an online-only folder keeps nothing on this computer to sync from scratch", + )); + } + self.db + .sync_entries_clear(id) + .map_err(|e| CoreError::internal(format!("db: {e:?}")))?; + if folder.pending_mode.as_deref() == Some("ondemand") { + self.db + .sync_folder_set_pending_mode(id, None) + .map_err(|e| CoreError::internal(format!("db: {e:?}")))?; + } + let _ = self.sync_tx.send(sync::SyncMsg::Reconcile(id)); + info!(id, path = %folder.local_path, "sync folder reset"); + Ok(format!( + "{} will sync from scratch", + base_name(&folder.local_path) + )) + } + /// Spawn a secondary FUSE session rooted at `root` over `local` from a /// [`Core::fork_state`] sibling. Clears any stale kernel mount first (a crashed run can leave /// one, which would fail the fresh mount with EBUSY). diff --git a/crates/pdfs-fuse/src/profile.rs b/crates/pdfs-fuse/src/profile.rs index b1df4bc..77f1f28 100644 --- a/crates/pdfs-fuse/src/profile.rs +++ b/crates/pdfs-fuse/src/profile.rs @@ -450,6 +450,10 @@ impl Core { } let _ = self.sync_tx.send(sync::SyncMsg::Rewatch); + // The reply is gone once the app has shown it; the log keeps why. + for reason in &skipped { + info!(reason, "restore skipped a folder"); + } let mut message = format!("restored {restored} folder(s)"); if !skipped.is_empty() { message.push_str(&format!("; skipped: {}", skipped.join(", "))); diff --git a/crates/pdfs-fuse/src/sim/daemon.rs b/crates/pdfs-fuse/src/sim/daemon.rs index 5a425a3..3b6ab15 100644 --- a/crates/pdfs-fuse/src/sim/daemon.rs +++ b/crates/pdfs-fuse/src/sim/daemon.rs @@ -2873,4 +2873,112 @@ mod tests { assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); let _ = std::fs::remove_dir_all(&dir); } + + /// The synced folder `id` as the daemon lists it. + fn listed_folder(daemon: &Daemon, id: i64) -> Option { + match daemon.request(&Request::ListSyncFolders) { + Ok(Response::SyncFolders { items }) => items.into_iter().find(|f| f.id == id), + _ => None, + } + } + + /// A mirror folder holding `a.txt` and `sub/b.txt`, synced to Drive, whose + /// local copy is then deleted in full while the folder is paused, so no + /// pass sees half of it. Waits for the pass that refuses to run (#46). + fn folder_whose_local_copy_is_gone(daemon: &Daemon, drive: &FakeDrive, local: &Path) -> i64 { + let id = sync_folder(daemon, local, "mirror"); + std::fs::write(local.join("a.txt"), b"alpha").unwrap(); + std::fs::create_dir(local.join("sub")).unwrap(); + std::fs::write(local.join("sub/b.txt"), b"beta").unwrap(); + daemon.request(&Request::SyncNow { id: Some(id) }).unwrap(); + let on_drive = |name: &str, content: &[u8]| { + drive.tree().iter().any(|(path, entry)| { + path.ends_with(name) && *entry == Entry::File(Arc::new(content.to_vec())) + }) + }; + assert!( + wait_until(Duration::from_secs(30), || on_drive("a.txt", b"alpha") + && on_drive("sub/b.txt", b"beta") + && listed_folder(daemon, id).is_some_and(|f| f.state == "idle")), + "the folder synced: {:?} {:?}", + listed_folder(daemon, id), + drive.tree().keys().collect::>() + ); + + daemon + .request(&Request::SetSyncFolderPaused { id, paused: true }) + .unwrap(); + std::fs::remove_file(local.join("a.txt")).unwrap(); + std::fs::remove_dir_all(local.join("sub")).unwrap(); + daemon + .request(&Request::SetSyncFolderPaused { id, paused: false }) + .unwrap(); + daemon.request(&Request::SyncNow { id: Some(id) }).unwrap(); + assert!( + wait_until(Duration::from_secs(30), || listed_folder(daemon, id) + .is_some_and(|f| f.state == "error")), + "the pass refused to trash everything: {:?}", + listed_folder(daemon, id) + ); + assert!( + on_drive("a.txt", b"alpha") && on_drive("sub/b.txt", b"beta"), + "nothing was trashed on Drive: {:?}", + drive.tree().keys().collect::>() + ); + id + } + + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_folder_whose_local_copy_is_gone_downloads_again_after_a_reset() { + let drive = FakeDrive::new(); + let dir = scratch("reset-gone-local-copy"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + let local = dir.join("docs"); + let id = folder_whose_local_copy_is_gone(&daemon, &drive, &local); + + daemon.request(&Request::ResetSyncFolder { id }).unwrap(); + let has = |rel: &str, content: &[u8]| { + std::fs::read(local.join(rel)).is_ok_and(|bytes| bytes == content) + }; + assert!( + wait_until(Duration::from_secs(30), || has("a.txt", b"alpha") + && has("sub/b.txt", b"beta") + && listed_folder(&daemon, id).is_some_and(|f| f.state == "idle")), + "the reset downloaded the folder again: {:?}", + listed_folder(&daemon, id) + ); + + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } + + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_folder_whose_local_copy_is_gone_still_goes_on_demand() { + let drive = FakeDrive::new(); + let dir = scratch("ondemand-gone-local-copy"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + let local = dir.join("docs"); + let id = folder_whose_local_copy_is_gone(&daemon, &drive, &local); + + daemon + .request(&Request::SetSyncFolderMode { + id, + mode: "ondemand".into(), + }) + .unwrap(); + assert!( + wait_until(Duration::from_secs(30), || listed_folder(&daemon, id) + .is_some_and(|f| f.mode == "ondemand" && f.pending_mode.is_none()) + && is_mounted(&local)), + "the queued switch landed: {:?}", + listed_folder(&daemon, id) + ); + assert_eq!(std::fs::read(local.join("a.txt")).unwrap(), b"alpha"); + assert_eq!(std::fs::read(local.join("sub/b.txt")).unwrap(), b"beta"); + + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } } diff --git a/crates/pdfs-fuse/src/sync.rs b/crates/pdfs-fuse/src/sync.rs index 12cf67d..0356bbb 100644 --- a/crates/pdfs-fuse/src/sync.rs +++ b/crates/pdfs-fuse/src/sync.rs @@ -369,7 +369,20 @@ impl Core { // guard on every pass — wedging the folder's sync permanently — the // moment a rule covers the whole tree. let tracked = tracked_baseline(&baseline, rules, &unscanned); - guard_local_wipe(&tracked, &local)?; + // A local copy that is gone in its entirety is not trashed on Drive, + // for the reason `guard_local_wipe` gives. A full pass stops there, but + // this one exists for a switch to on-demand, which needs nothing local + // and leaves Drive as it is: refusing the pass would only keep the + // folder out of `idle`, wedging the switch for good (#46). So the pass + // forgets those paths instead of trashing them, and the mount then + // shows everything Drive still has. + let local_gone = match guard_local_wipe(&tracked, &local) { + Ok(()) => false, + Err(reason) => { + warn!(id = folder_id, %reason, "sync: going on-demand without trashing anything on Drive"); + true + } + }; // The remote folder uids come from the baseline instead of a walk: every // directory this device has synced recorded its uid there when it was @@ -579,8 +592,27 @@ impl Core { // showing the folder's remote contents — otherwise everything they deleted // comes back the moment the switch lands. Shallowest first, skipping anything // under a folder already trashed (its children went with it). + let deletions = local_deletions(&tracked, &local); + if local_gone { + // Forgotten instead of trashed. A row left behind would read to + // the switch as a deletion not on Drive yet and withdraw it, and + // to a later full pass as a reason to stop again. Forgotten, a full + // pass downloads the paths again. + let mut forgotten: HashSet<&str> = HashSet::new(); + for rel in &deletions { + let mut parent = parent_rel(rel); + while !parent.is_empty() && !forgotten.contains(parent) { + parent = parent_rel(parent); + } + if parent.is_empty() { + let _ = self.db.sync_entries_remove_subtree(folder_id, rel); + forgotten.insert(rel); + } + } + return Ok(outcome); + } let mut trashed: Vec = Vec::new(); - for rel in &local_deletions(&tracked, &local) { + for rel in &deletions { if trashed .iter() .any(|dir| rel.starts_with(&format!("{dir}/"))) diff --git a/crates/pdfs-fuse/src/sync/planner.rs b/crates/pdfs-fuse/src/sync/planner.rs index 95b6f04..988bdf6 100644 --- a/crates/pdfs-fuse/src/sync/planner.rs +++ b/crates/pdfs-fuse/src/sync/planner.rs @@ -192,7 +192,8 @@ pub(super) fn guard_local_wipe( if !baseline.is_empty() && baseline.keys().all(|rel| !local.contains_key(rel)) { return Err(format!( "every one of the {} synced paths is missing locally; refusing to trash \ - them on Drive. Check that the folder is mounted and readable.", + them on Drive. Check that the folder is mounted and readable; to download \ + them again, sync the folder from scratch.", baseline.len() )); } @@ -213,7 +214,8 @@ pub(super) fn guard_remote_wipe( if !baseline.is_empty() && baseline.keys().all(|rel| !remote.contains_key(rel)) { return Err(format!( "every one of the {} synced paths is missing on Proton Drive; refusing to \ - delete them here. If they were deleted on purpose, remove the folder from sync.", + delete them here. If they were deleted on purpose, remove the folder from sync; \ + to upload them again, sync the folder from scratch.", baseline.len() )); } diff --git a/crates/pdfs-gui/src/app/pages/locations.rs b/crates/pdfs-gui/src/app/pages/locations.rs index a758c92..65963d2 100644 --- a/crates/pdfs-gui/src/app/pages/locations.rs +++ b/crates/pdfs-gui/src/app/pages/locations.rs @@ -1506,8 +1506,13 @@ fn add_device_items(ui: &Rc, menu: &mut ActionMenu, spec: &MountSpec, id: i6 } else { gettext("Pause Syncing") }; + let ui_pause = ui.clone(); + menu.item(&label, move || set_folder_paused(&ui_pause, id, !paused)); let ui = ui.clone(); - menu.item(&label, move || set_folder_paused(&ui, id, !paused)); + let path = spec.local_path.clone(); + menu.item(&gettext("Sync From Scratch…"), move || { + confirm_reset_sync_folder(&ui, id, &path) + }); menu.section(); } let ui = ui.clone(); @@ -1520,6 +1525,51 @@ fn add_device_items(ui: &Rc, menu: &mut ActionMenu, spec: &MountSpec, id: i6 }); } +/// Ask before syncing a folder from scratch. Nothing is deleted, but files +/// that differ come back as conflict copies, so it is not a click to make by +/// accident. +fn confirm_reset_sync_folder(ui: &Rc, id: i64, path: &str) { + let dialog = adw::AlertDialog::builder() + .heading(gettext("Sync From Scratch?")) + // Translators: {path} is a local folder path. + .body(gettext_f("This computer forgets what it synced in {path} before and compares the folder with Proton Drive again. Nothing is deleted: a file on one side only is copied to the other, and a file that differs keeps both versions.", &[("path", path)])) + .build(); + dialog.add_response("cancel", &gettext("Cancel")); + dialog.add_response("reset", &gettext("Sync From Scratch")); + dialog.set_response_appearance("reset", adw::ResponseAppearance::Suggested); + dialog.set_default_response(Some("cancel")); + dialog.set_close_response("cancel"); + let win = ui_window(ui); + let ui = ui.clone(); + dialog.connect_response(None, move |_, response| { + if response == "reset" { + reset_sync_folder(&ui, id); + } + }); + dialog.present(win.as_ref()); +} + +/// Forget a folder's sync records, then repaint so its row shows the new pass. +fn reset_sync_folder(ui: &Rc, id: i64) { + let rx = spawn_request(ui.dirs.control_socket(), Request::ResetSyncFolder { id }); + let ui = ui.clone(); + glib::spawn_future_local(async move { + let failed = gettext("Couldn't sync the folder from scratch"); + match rx.recv().await { + Ok(Ok(Response::Ok { .. })) => toast(&ui, &gettext("Syncing folder…")), + Ok(Ok(Response::Error { message, kind })) => { + toast_failure(&ui, &failed, &message, kind) + } + _ => toast_error( + &ui, + &failed, + &gettext("The Proton Drive service didn't respond."), + ), + } + refresh_locations(&ui); + }); +} + /// Ask before making a synced folder online only: the switch frees disk space /// by removing the local copies, which is not something to do by accident. fn confirm_online_only(ui: &Rc, id: i64, path: &str) { diff --git a/docs/BUGS.md b/docs/BUGS.md index dd2fe73..ae9e943 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -101,6 +101,7 @@ a live account since. | Entry | Title | |---|---| | [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version | +| [B255](#b255--a-synced-folder-whose-files-are-all-gone-here-is-stuck-for-good) | A synced folder whose files are all gone here is stuck for good | | [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives | | [B253](#b253--the-app-shows-the-sign-in-page-when-the-keyring-is-locked) | The app shows the sign-in page when the keyring is locked | | [B252](#b252--computers-sharing-a-device-overwrite-each-others-profile) | Computers sharing a device overwrite each other's profile | @@ -382,6 +383,36 @@ A move checks the same set. --- +### B255 — A synced folder whose files are all gone here is stuck for good + +**Status:** Fixed, not verified live +**Found:** 2026-10-26, issue #46: a folder restored from another computer never downloaded. +**Where:** `push_pass` in `crates/pdfs-fuse/src/sync.rs`; `reset_sync_folder` in +`crates/pdfs-fuse/src/devices.rs` + +**Repro:** Sync a folder in mirror mode, then delete all of its files on this computer while +the folder is paused. Resume it. Every pass stops with `every one of the N synced paths is +missing locally`, the folder stays in error, and a switch to online only waits for good. + +**Cause.** The wipe guard is right to stop a pass that would trash the whole folder on Drive. +But nothing got the folder out of that state. A switch to on-demand waits for a pass that ends +`idle`, and its push pass hit the same guard. The baseline that made the empty folder read as +"delete everything" could only be cleared by removing the folder from sync. How the reporter's +folder lost its files is not known yet. + +**Fix.** The push pass for a switch to on-demand forgets the baseline rows of a local copy that +is gone in full, instead of trashing them on Drive, so the switch goes ahead and the mount shows +what Drive has. **Sync From Scratch…** in the app and `pdfs sync reset ID` clear a mirror +folder's baseline, so the next pass compares both sides as on the first sync: one-sided files +are copied across, files that differ keep both versions, and nothing is deleted. Restore now +logs why it skipped a folder. + +**Test:** The simulations `a_folder_whose_local_copy_is_gone_still_goes_on_demand` (which +failed in exactly the reported state before the fix) and +`a_folder_whose_local_copy_is_gone_downloads_again_after_a_reset`. + +--- + ### B254 — An edit in the same second as a new upload never arrives **Status:** Fixed, not verified live diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 12d0bd0..a922ff3 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -33,6 +33,11 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). - **Folder sizes.** **Details** shows how much a folder holds and how many items are in it, as Proton Drive counts it, including items in the trash. From a terminal: `pdfs du PATH`. +- **Sync a folder from scratch.** In a synced folder's menu on **Sync → Folders**, **Sync From + Scratch…** forgets what was synced before and compares the folder with Proton Drive again. A + file on one side only is copied to the other, and a file that differs keeps both versions. + Nothing is deleted. From the terminal: `pdfs sync reset ID`. + ### Changed - **Copying a file inside the mount is faster** when the computer already has the file, for example with `cp` or a file manager: the copy is made on this computer, about four times @@ -48,6 +53,12 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). ### Fixed +- **A synced folder whose files were all gone from this computer no longer gets stuck** (#46). + The sync still refuses to delete everything on Proton Drive, but a switch to online only now + goes ahead and shows what Proton Drive has, instead of waiting for good. To download the + files again instead, sync the folder from scratch. Restoring folders also logs why it + skipped a folder. + - **Saved public links show the name of what they point at**, in the app and in `pdfs bookmarks`, instead of "Shared link". For a link with a custom password, the address no longer has the custom password stuck to its end, so it matches the link the web shows and the page asks for the diff --git a/docs/CLI.md b/docs/CLI.md index a4fa60d..ac41777 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -84,6 +84,7 @@ commands are for scripts and for cases where the mount is not available. | `pdfs sync rm ID [--delete-remote]` | Stop syncing. Local files stay; `--delete-remote` also removes the copy on Proton Drive. | | `pdfs sync mode ID mirror\|ondemand` | Switch between a full local copy (`mirror`) and online only (`ondemand`). | | `pdfs sync now [ID]` | Start a sync pass now, for all folders or one. | +| `pdfs sync reset ID` | Forget what a synced folder synced before and compare it with Proton Drive again. A file on one side only is copied to the other, and a file that differs keeps both versions. Nothing is deleted. | | `pdfs sync pause [--for 1h] [--folder ID]` | Pause uploads and synced folders. Reading files keeps working. `--for` ends the pause by itself (`30m`, `1h`, `2d`). | | `pdfs sync resume [--folder ID]` | Resume after a pause. | | `pdfs sync limit [--up RATE] [--down RATE]` | Cap bandwidth, for example `500K` or `2M` per second. `0` removes a cap. Without options, prints the current caps. | diff --git a/docs/SYNCED_FOLDERS.md b/docs/SYNCED_FOLDERS.md index aed940b..9d5a34b 100644 --- a/docs/SYNCED_FOLDERS.md +++ b/docs/SYNCED_FOLDERS.md @@ -76,6 +76,14 @@ again when they move into a synced one. Proton Drive. To delete the copy on Proton Drive as well, tick **Also delete from Proton Drive**, or add `--delete-remote`. +## Sync a folder from scratch + +**Sync From Scratch…** in the folder's menu, or `pdfs sync reset ID`, makes this computer forget +what it synced in the folder before and compare it with Proton Drive again, as on the first sync. +A file on one side only is copied to the other, and a file that differs keeps both versions. +Nothing is deleted. Use it when a folder's files went missing on this computer and the sync +refuses to go on (see [Troubleshooting](TROUBLESHOOTING.md#a-synced-folder-stays-in-error-and-nothing-downloads)). + ## Excluding files with `.pdfsignore` Synced folders skip build output, dependency folders and editor leftovers. Two sets of rules diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 539a13b..21b6eb7 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -226,6 +226,22 @@ Check that: `pdfs sync now` starts a sync pass at once. +### A synced folder stays in error and nothing downloads + +The log says `every one of the N synced paths is missing locally; refusing to trash them on +Drive`. The folder synced before, and now none of its files are on this computer. The sync +stops so that it does not delete them on Proton Drive too. Check that the folder is the right +one and that its disk is mounted. To get the files back, choose **Sync From Scratch…** in the +folder's menu on **Sync → Folders**, or run: + +```bash +pdfs sync list # find the folder's ID +pdfs sync reset 1 +``` + +This downloads what Proton Drive has and uploads what only this computer has. Nothing is deleted. +If you deleted the files on purpose, delete them on Proton Drive too, or stop syncing the folder. + ### Files named `(sync-conflict …)` appeared The file changed in two places at once. Nothing was lost. See diff --git a/po/de.po b/po/de.po index 1ad915c..b62253a 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -258,8 +258,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1285,8 +1286,9 @@ msgstr "Alben konnten nicht geladen werden" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2324,7 +2326,8 @@ msgid "Add Folder to Sync" msgstr "Ordner zur Synchronisierung hinzufügen" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Ordner wird synchronisiert …" @@ -3249,16 +3252,41 @@ msgstr "Synchronisierung fortsetzen" msgid "Pause Syncing" msgstr "Synchronisierung pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Neu synchronisieren …" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Synchronisierung beenden …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Neu synchronisieren?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Dieser Computer vergisst, was er in {path} bisher synchronisiert hat, und vergleicht den Ordner erneut mit Proton Drive. Es wird nichts gelöscht: Eine Datei, die nur auf einer Seite liegt, wird auf die andere kopiert, und von einer Datei, die sich unterscheidet, bleiben beide Versionen erhalten." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Neu synchronisieren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Der Ordner konnte nicht neu synchronisiert werden" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3267,11 +3295,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Nur online verfügbar machen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3280,62 +3308,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Ordner herunterladen?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Herunterladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Der Ordner konnte nicht pausiert werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Der Ordner konnte nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Ordner pausiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Ordner fortgesetzt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Synchronisieren fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Geteilter Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Wird auf „Nur online“ umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Wird auf synchronisiert umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "nicht verfügbar" @@ -5939,7 +5967,9 @@ msgstr "Link-Einstellungen" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Ändern, wer bearbeiten darf, das Passwort oder den Ablauf. Der Link bleibt derselbe." +msgstr "" +"Ändern, wer bearbeiten darf, das Passwort oder den Ablauf. Der Link bleibt " +"derselbe." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/en_GB.po b/po/en_GB.po index fc5ae38..6bd4006 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -254,8 +254,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1273,8 +1274,9 @@ msgstr "Couldn't load albums" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2301,7 +2303,8 @@ msgid "Add Folder to Sync" msgstr "Add Folder to Sync" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Syncing folder…" @@ -3199,16 +3202,41 @@ msgstr "Resume Syncing" msgid "Pause Syncing" msgstr "Pause Syncing" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sync From Scratch…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Stop Syncing…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Sync From Scratch?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "This computer forgets what it synced in {path} before and compares the folder with Proton Drive again. Nothing is deleted: a file on one side only is copied to the other, and a file that differs keeps both versions." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sync From Scratch" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Couldn't sync the folder from scratch" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3217,11 +3245,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Make Online Only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3230,60 +3258,60 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Download Folder?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Download" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Couldn't pause the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Couldn't resume the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Folder paused" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Folder resumed" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Couldn't sync" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Shared folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Going online only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Switching to synced" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "not available" @@ -5822,7 +5850,8 @@ msgstr "Link settings" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Change who can edit, the password or the expiry. The link stays the same." +msgstr "" +"Change who can edit, the password or the expiry. The link stays the same." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/es.po b/po/es.po index 06647ae..6eb3038 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -256,8 +256,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1279,8 +1280,9 @@ msgstr "No se pudieron cargar los álbumes" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2313,7 +2315,8 @@ msgid "Add Folder to Sync" msgstr "Añadir carpeta para sincronizar" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizando la carpeta…" @@ -3223,16 +3226,41 @@ msgstr "Reanudar la sincronización" msgid "Pause Syncing" msgstr "Pausar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sincronizar desde cero…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Dejar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "¿Sincronizar desde cero?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Este equipo olvida lo que sincronizó antes en {path} y vuelve a comparar la carpeta con Proton Drive. No se elimina nada: un archivo que solo está en un lado se copia al otro, y de un archivo que difiere se conservan ambas versiones." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sincronizar desde cero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "No se pudo sincronizar la carpeta desde cero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3241,11 +3269,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Hacer solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3254,62 +3282,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "¿Descargar la carpeta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Descargar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "No se pudo pausar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "No se pudo reanudar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Carpeta en pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Carpeta reanudada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "No se pudo sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Carpeta compartida" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Pasando a solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Pasando a sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "no disponible" @@ -5895,7 +5923,8 @@ msgstr "Ajustes del enlace" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Cambie quién puede editar, la contraseña o la caducidad. El enlace no cambia." +msgstr "" +"Cambie quién puede editar, la contraseña o la caducidad. El enlace no cambia." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/fr.po b/po/fr.po index 6e41a9b..a2c7405 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -258,8 +258,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1290,8 +1291,9 @@ msgstr "Impossible de charger les albums" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2326,7 +2328,8 @@ msgid "Add Folder to Sync" msgstr "Ajouter un dossier à synchroniser" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Synchronisation du dossier…" @@ -3248,16 +3251,41 @@ msgstr "Reprendre la synchronisation" msgid "Pause Syncing" msgstr "Mettre en pause la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Resynchroniser depuis le début…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Arrêter la synchronisation…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Resynchroniser depuis le début ?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Cet ordinateur oublie ce qu’il a synchronisé auparavant dans {path} et compare à nouveau le dossier avec Proton Drive. Rien n’est supprimé : un fichier présent d’un seul côté est copié de l’autre, et un fichier qui diffère garde ses deux versions." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Resynchroniser depuis le début" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Impossible de resynchroniser le dossier depuis le début" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3267,11 +3295,11 @@ msgstr "" "uniquement dans Proton Drive. Chaque fichier sera à nouveau téléchargé à son " "ouverture." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Garder en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3280,62 +3308,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Télécharger le dossier ?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Télécharger" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Impossible de mettre en pause le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Impossible de reprendre le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Dossier en pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Dossier repris" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Impossible de synchroniser" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Dossier partagé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Passage en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Passage en mode synchronisé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "non disponible" @@ -5941,7 +5969,9 @@ msgstr "Paramètres du lien" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Modifiez qui peut modifier, le mot de passe ou l’expiration. Le lien reste le même." +msgstr "" +"Modifiez qui peut modifier, le mot de passe ou l’expiration. Le lien reste " +"le même." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/it.po b/po/it.po index f87bb1f..070bc78 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -254,8 +254,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1284,8 +1285,9 @@ msgstr "Impossibile caricare gli album" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2320,7 +2322,8 @@ msgid "Add Folder to Sync" msgstr "Aggiungi cartella da sincronizzare" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizzazione della cartella…" @@ -3241,16 +3244,41 @@ msgstr "Riprendi sincronizzazione" msgid "Pause Syncing" msgstr "Metti in pausa sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sincronizza da zero…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Interrompi sincronizzazione…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Sincronizzare da zero?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Questo computer dimentica ciò che ha sincronizzato finora in {path} e confronta di nuovo la cartella con Proton Drive. Non viene eliminato nulla: un file presente su un solo lato viene copiato sull’altro e di un file diverso vengono mantenute entrambe le versioni." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sincronizza da zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Impossibile sincronizzare la cartella da zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3259,11 +3287,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Rendi solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3272,62 +3300,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Scaricare la cartella?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Scarica" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Impossibile mettere in pausa la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Impossibile riprendere la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Cartella in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Cartella ripresa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Impossibile sincronizzare" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Cartella condivisa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Passaggio a solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Passaggio a sincronizzata" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "non disponibile" @@ -5918,7 +5946,9 @@ msgstr "Impostazioni del collegamento" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Cambia chi può modificare, la password o la scadenza. Il collegamento resta lo stesso." +msgstr "" +"Cambia chi può modificare, la password o la scadenza. Il collegamento resta " +"lo stesso." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/nl.po b/po/nl.po index e3bad04..c5f8602 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -255,8 +255,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1280,8 +1281,9 @@ msgstr "Kon albums niet laden" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2314,7 +2316,8 @@ msgid "Add Folder to Sync" msgstr "Map toevoegen aan synchronisatie" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Map synchroniseren…" @@ -3233,16 +3236,41 @@ msgstr "Synchronisatie hervatten" msgid "Pause Syncing" msgstr "Synchronisatie pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Opnieuw synchroniseren…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Synchroniseren stoppen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Opnieuw synchroniseren?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Deze computer vergeet wat hij eerder in {path} heeft gesynchroniseerd en vergelijkt de map opnieuw met Proton Drive. Er wordt niets verwijderd: een bestand dat maar aan één kant staat, wordt naar de andere kant gekopieerd, en van een bestand dat verschilt blijven beide versies bewaard." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Opnieuw synchroniseren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Kon de map niet opnieuw synchroniseren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3251,11 +3279,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Alleen online maken" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3264,62 +3292,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Map downloaden?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Downloaden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Kon de map niet pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Kon de map niet hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Map gepauzeerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Map hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Kon niet synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Gedeelde map" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Wordt alleen online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Overschakelen naar gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "niet beschikbaar" @@ -5906,7 +5934,9 @@ msgstr "Linkinstellingen" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Wijzig wie mag bewerken, het wachtwoord of de vervaldatum. De link blijft hetzelfde." +msgstr "" +"Wijzig wie mag bewerken, het wachtwoord of de vervaldatum. De link blijft " +"hetzelfde." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/pdfs.pot b/po/pdfs.pot index 7a4ca64..ff19449 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.5.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -231,8 +231,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1238,8 +1239,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2266,7 +2268,8 @@ msgid "Add Folder to Sync" msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "" @@ -3095,87 +3098,112 @@ msgstr "" msgid "Pause Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, 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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "" diff --git a/po/pl.po b/po/pl.po index dbe0723..0569538 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\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:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -259,8 +259,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1311,8 +1312,9 @@ msgstr "Nie można wczytać albumów" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2373,7 +2375,8 @@ msgid "Add Folder to Sync" msgstr "Dodaj katalog do synchronizacji" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Synchronizowanie katalogu…" @@ -3297,16 +3300,41 @@ msgstr "Wznów synchronizację" msgid "Pause Syncing" msgstr "Wstrzymaj synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Synchronizuj od nowa…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Zatrzymaj synchronizację…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Synchronizować od nowa?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Ten komputer zapomina, co wcześniej zsynchronizował w {path}, i ponownie porównuje katalog z Proton Drive. Nic nie zostanie usunięte: plik, który jest tylko po jednej stronie, zostanie skopiowany na drugą, a z pliku, który się różni, zostaną zachowane obie wersje." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Synchronizuj od nowa" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Nie można zsynchronizować katalogu od nowa" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3315,11 +3343,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Oznacz jako tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3328,62 +3356,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Pobrać katalog?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Pobierz" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Nie można wstrzymać katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Nie można wznowić katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Wstrzymano katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Wznowiono katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Nie można zsynchronizować" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Udostępniony katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Przechodzenie w tryb tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Przełączanie na synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "niedostępne" @@ -6003,7 +6031,9 @@ msgstr "Ustawienia odnośnika" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Proszę zmienić, kto może edytować, hasło lub datę wygaśnięcia. Odnośnik pozostaje ten sam." +msgstr "" +"Proszę zmienić, kto może edytować, hasło lub datę wygaśnięcia. Odnośnik " +"pozostaje ten sam." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/pt_BR.po b/po/pt_BR.po index ebb9dca..a49aeca 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -254,8 +254,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1281,8 +1282,9 @@ msgstr "Não foi possível carregar os álbuns" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2313,7 +2315,8 @@ msgid "Add Folder to Sync" msgstr "Adicionar pasta à sincronização" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizando pasta…" @@ -3226,16 +3229,41 @@ msgstr "Retomar sincronização" msgid "Pause Syncing" msgstr "Pausar sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sincronizar do zero…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Parar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Sincronizar do zero?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Este computador esquece o que sincronizou antes em {path} e compara a pasta com o Proton Drive novamente. Nada é excluído: um arquivo que está em um lado só é copiado para o outro, e de um arquivo diferente as duas versões são mantidas." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sincronizar do zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Não foi possível sincronizar a pasta do zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 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:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3244,11 +3272,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:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Tornar somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3257,62 +3285,62 @@ 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:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, 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:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Baixar a pasta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Baixar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Não foi possível pausar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Não foi possível retomar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Pasta pausada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Pasta retomada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Não foi possível sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Pasta compartilhada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Tornando somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Passando para sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 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:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "indisponível" @@ -5893,7 +5921,8 @@ msgstr "Configurações do link" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Altere quem pode editar, a senha ou a expiração. O link continua o mesmo." +msgstr "" +"Altere quem pode editar, a senha ou a expiração. O link continua o mesmo." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" From 0e7ffe12615b9f1b113ac458fe4c9143519d990d Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 26 Oct 2026 22:28:46 +0100 Subject: [PATCH 8/9] fix(gui,cli): count what a folder's first scan has checked (#46) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first pass over a synced folder has no baseline to estimate from, so its scan showed only "checking for changes…" in the app and "scanning…" in `pdfs sync list`. For a large folder that scan reads every item on Proton Drive before anything downloads, which takes many minutes and looked stuck. Both now show how many items the scan has checked so far. --- crates/pdfs-cli/src/main.rs | 9 +- crates/pdfs-gui/src/app/pages/devices.rs | 45 ++++++- docs/CHANGELOG.md | 5 + po/de.po | 163 +++++++++++----------- po/en_GB.po | 162 +++++++++++----------- po/es.po | 163 +++++++++++----------- po/fr.po | 163 +++++++++++----------- po/it.po | 163 +++++++++++----------- po/nl.po | 163 +++++++++++----------- po/pdfs.pot | 157 +++++++++++----------- po/pl.po | 164 ++++++++++++----------- po/pt_BR.po | 163 +++++++++++----------- 12 files changed, 833 insertions(+), 687 deletions(-) diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index d40b616..1aa080b 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -1143,7 +1143,14 @@ fn cmd_sync(action: SyncCmd) -> Result<()> { // A pass in flight says what it is doing, indented under it. if let Some(p) = &f.progress { match p.phase { - SyncPhase::Scanning if p.total == 0 => println!(" scanning…"), + SyncPhase::Scanning if p.total == 0 && p.done == 0 => { + println!(" scanning…") + } + // A first pass has no estimate yet; the count alone + // shows a long first scan is moving. + SyncPhase::Scanning if p.total == 0 => { + println!(" scanning: {} checked", p.done) + } SyncPhase::Scanning => { println!( " scanning: {} of {}", diff --git a/crates/pdfs-gui/src/app/pages/devices.rs b/crates/pdfs-gui/src/app/pages/devices.rs index f8b5a6d..16635ad 100644 --- a/crates/pdfs-gui/src/app/pages/devices.rs +++ b/crates/pdfs-gui/src/app/pages/devices.rs @@ -629,9 +629,17 @@ pub(crate) fn sync_state_label(state: &str) -> String { /// — so both read "12 of 40" rather than a percentage that could go backwards. pub(crate) fn sync_progress_label(p: &SyncProgress) -> String { match p.phase { - // Before the first pass finishes there is no estimate, so the count would - // be "checked 12 of 12" — worse than saying nothing. - SyncPhase::Scanning if p.total == 0 => gettext("checking for changes…"), + SyncPhase::Scanning if p.total == 0 && p.done == 0 => gettext("checking for changes…"), + // Before the first pass finishes there is no estimate, so "12 of 12" would + // say nothing. The count alone still shows a first scan of a large folder + // moving, which can take many minutes before anything downloads. + // Translators: {n} counts the folders and files checked so far. + SyncPhase::Scanning if p.total == 0 => ngettext_f( + "checking for changes — {n} item checked", + "checking for changes — {n} items checked", + p.done as u64, + &[], + ), // Translators: {done} and {total} count folders and files checked so far. SyncPhase::Scanning => gettext_f( "checking for changes — {done} of {total}", @@ -1296,6 +1304,37 @@ mod tests { ); } + fn scanning(done: usize, total: usize) -> SyncProgress { + SyncProgress { + phase: SyncPhase::Scanning, + done, + total, + current: String::new(), + } + } + + #[test] + fn a_first_scan_counts_what_it_checked() { + // A first sync of a large folder scans for many minutes before anything + // downloads; without a count it reads as stuck (#46). + assert_eq!( + sync_progress_label(&scanning(0, 0)), + "checking for changes…" + ); + assert_eq!( + sync_progress_label(&scanning(1, 0)), + "checking for changes — 1 item checked" + ); + assert_eq!( + sync_progress_label(&scanning(1234, 0)), + "checking for changes — 1234 items checked" + ); + assert_eq!( + sync_progress_label(&scanning(12, 40)), + "checking for changes — 12 of 40" + ); + } + #[test] fn the_restore_picker_names_the_computer_it_restores_from() { assert!(restore_picker_body(Some("laptop")).contains("“laptop”")); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index a922ff3..27d6800 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -59,6 +59,11 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). files again instead, sync the folder from scratch. Restoring folders also logs why it skipped a folder. +- **The first sync of a folder shows how far its scan got** (#46). Before anything downloads, + the first pass reads every item on Proton Drive, which takes many minutes for a large folder. + The folder showed only "checking for changes…" all that time, and `pdfs sync list` only + `scanning…`, which looked stuck. Both now count the items checked so far. + - **Saved public links show the name of what they point at**, in the app and in `pdfs bookmarks`, instead of "Shared link". For a link with a custom password, the address no longer has the custom password stuck to its end, so it matches the link the web shows and the page asks for the diff --git a/po/de.po b/po/de.po index b62253a..7ac1044 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -249,13 +249,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -350,7 +350,7 @@ msgstr "Raster / Liste" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Umbenennen" @@ -682,7 +682,7 @@ msgid "Couldn't add a sync folder" msgstr "Synchronisierungsordner konnte nicht hinzugefügt werden" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Ordner konnten nicht wiederhergestellt werden" @@ -1274,12 +1274,12 @@ msgstr "Alben konnten nicht geladen werden" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1929,7 +1929,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Neuer Name" @@ -1954,7 +1954,7 @@ msgstr "Den Zielordner auswählen." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Hierher verschieben" @@ -2302,46 +2302,53 @@ msgstr "erfordert Aufmerksamkeit" msgid "up to date" msgstr "aktuell" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "wird auf Änderungen geprüft …" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "wird auf Änderungen geprüft – {n} Element geprüft" +msgstr[1] "wird auf Änderungen geprüft – {n} Elemente geprüft" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "wird auf Änderungen geprüft – {done} von {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "{done} von {total} wird synchronisiert" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "{file} wird synchronisiert – {done} von {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Ordner zur Synchronisierung hinzufügen" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Ordner wird synchronisiert …" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Ordner konnte nicht hinzugefügt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Wiederherstellbare Ordner konnten nicht aufgelistet werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2349,19 +2356,19 @@ msgstr "" "Die Ordner ankreuzen, die mit diesem Rechner synchronisiert werden sollen, " "und für jeden den Speicherort anpassen." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Ordner wiederherstellen" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Wiederherstellen" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Ordner werden wiederhergestellt …" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2370,37 +2377,37 @@ msgstr "" "Diese Ordner werden von „{name}“ gesichert. Wiederhergestellte Ordner werden " "weiterhin mit der Kopie dieses Computers synchronisiert." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "Diese Ordner werden in Proton Drive unter diesem Computer gesichert." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Nichts wiederherzustellen – alle Ordner von „{name}“ werden bereits hier " "synchronisiert." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Nichts wiederherzustellen – alle Ordner dieses Computers werden bereits hier " "synchronisiert." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "Ordner wird auf „Nur online“ umgestellt" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "Ordner wird heruntergeladen und bleibt synchronisiert" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Modus konnte nicht geändert werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2418,7 +2425,7 @@ msgstr "" "Ordner auf „Synchronisiert“ umstellen und vor dem Entfernen warten, bis der " "Download abgeschlossen ist." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2432,68 +2439,68 @@ msgstr "" "mehr synchronisiert. Es kann zusätzlich ausgewählt werden, die Kopie in " "Proton Drive zu löschen." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Synchronisierung des Ordners beenden?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Auch aus Proton Drive löschen" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Löscht die einzige Kopie dieser Dateien." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "Die lokale Kopie bleibt unverändert." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Synchronisierung beenden" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Synchronisierung des Ordners beendet" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Synchronisierung des Ordners konnte nicht beendet werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Computer umbenennen" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "„{name}“ umbenennen." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Der Computer konnte nicht umbenannt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "Ein Name ist erforderlich." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Computer umbenannt" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Zur Bestätigung „{name}“ eingeben" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Computer entfernen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2508,26 +2515,26 @@ msgstr "" "gelöscht. Die Dateien auf dem Computer selbst bleiben unberührt – dies kann " "jedoch von hier aus nicht rückgängig gemacht werden." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Entfernen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Computer entfernt" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Der Computer konnte nicht entfernt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Diese Sicherung hier fortsetzen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2546,25 +2553,25 @@ msgstr "" "werden nicht verschoben. Mit „Auf diesem Computer wiederherstellen“ lässt " "sich danach zurückholen, was „{name}“ synchronisiert hat." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Hier fortsetzen" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Sicherung jetzt als „{name}“" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Diese Sicherung konnte hier nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Mit diesem Computer synchronisieren?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2581,25 +2588,25 @@ msgstr "" "„{name}“. Bereits hier synchronisierte Ordner bleiben, wo sie sind. Als " "Nächstes wählen Sie, welche seiner Ordner hier synchronisiert werden." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Hier synchronisieren" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Jetzt synchron mit „{name}“" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Synchronisierung mit diesem Computer nicht möglich" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Sicherung auf diesen Computer verschieben?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2616,12 +2623,12 @@ msgstr "" "verschwinden." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Sicherung von „{name}“ verschoben" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Diese Sicherung konnte nicht verschoben werden" @@ -3271,7 +3278,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Dieser Computer vergisst, was er in {path} bisher synchronisiert hat, und vergleicht den Ordner erneut mit Proton Drive. Es wird nichts gelöscht: Eine Datei, die nur auf einer Seite liegt, wird auf die andere kopiert, und von einer Datei, die sich unterscheidet, bleiben beide Versionen erhalten." +msgstr "" +"Dieser Computer vergisst, was er in {path} bisher synchronisiert hat, und " +"vergleicht den Ordner erneut mit Proton Drive. Es wird nichts gelöscht: Eine " +"Datei, die nur auf einer Seite liegt, wird auf die andere kopiert, und von " +"einer Datei, die sich unterscheidet, bleiben beide Versionen erhalten." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/en_GB.po b/po/en_GB.po index 6bd4006..5a2e3c1 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -245,13 +245,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -346,7 +346,7 @@ msgstr "Grid / list" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Rename" @@ -674,7 +674,7 @@ msgid "Couldn't add a sync folder" msgstr "Couldn't add a sync folder" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Couldn't restore folders" @@ -1262,12 +1262,12 @@ msgstr "Couldn't load albums" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1910,7 +1910,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "New name" @@ -1935,7 +1935,7 @@ msgstr "Choose the folder to move into." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Move Here" @@ -2279,46 +2279,53 @@ msgstr "needs attention" msgid "up to date" msgstr "up to date" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "checking for changes…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "checking for changes — {n} item checked" +msgstr[1] "checking for changes — {n} items checked" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "checking for changes — {done} of {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "syncing {done} of {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "syncing {file} — {done} of {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Add Folder to Sync" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Syncing folder…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Couldn't add folder" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Couldn't list folders to restore" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2326,19 +2333,19 @@ msgstr "" "Tick the folders to sync to this machine, and adjust where each one should " "live." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Restore Folders" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Restore" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Restoring folders…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2347,33 +2354,33 @@ msgstr "" "These folders are backed up from “{name}”. Restored folders keep syncing " "with that computer's copy." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "These folders are backed up under this computer in Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "Nothing to restore — “{name}”'s folders are all synced here." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "Nothing to restore — this computer's folders are all synced here." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "Folder will switch to online only" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "Folder will download and stay synced" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Couldn't change mode" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2390,7 +2397,7 @@ msgstr "" "copy, cancel, switch the folder to Synced, and wait for the download to " "finish before removing it." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2403,68 +2410,68 @@ msgstr "" "The local files stay on this disk and simply stop being synced. Choose " "whether to also delete the copy in Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Stop Syncing Folder?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Also delete from Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Deletes the only copy of these files." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "The local copy is unaffected." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Stop Syncing" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Stopped syncing folder" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Couldn't stop syncing the folder" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Rename Computer" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "Rename “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Couldn't rename the computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "A name is required." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Computer renamed" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Type “{name}” to confirm" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Remove Computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2479,26 +2486,26 @@ msgstr "" "on that computer itself are not touched — but this cannot be undone from " "here." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Remove" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Computer removed" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Couldn't remove the computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Continue This Backup Here?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2517,25 +2524,25 @@ msgstr "" "“Restore to This Computer” afterwards to bring back what “{name}” was " "syncing." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Continue Here" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Now backing up as “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Couldn't continue that backup here" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Sync With This Computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2552,25 +2559,25 @@ msgstr "" "Folders already synced here stay where they are. Next you choose which of " "its folders to sync here." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Sync Here" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Now syncing with “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Couldn't sync with that computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Move Backup to This Computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2586,12 +2593,12 @@ msgstr "" "Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Moved the backup of “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Couldn't move that backup" @@ -3221,7 +3228,10 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "This computer forgets what it synced in {path} before and compares the folder with Proton Drive again. Nothing is deleted: a file on one side only is copied to the other, and a file that differs keeps both versions." +msgstr "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/es.po b/po/es.po index 6eb3038..9ecbbaf 100644 --- a/po/es.po +++ b/po/es.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -247,13 +247,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -348,7 +348,7 @@ msgstr "Cuadrícula / lista" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Renombrar" @@ -679,7 +679,7 @@ msgid "Couldn't add a sync folder" msgstr "No se pudo añadir una carpeta sincronizada" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "No se pudieron restaurar las carpetas" @@ -1268,12 +1268,12 @@ msgstr "No se pudieron cargar los álbumes" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1921,7 +1921,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Nombre nuevo" @@ -1946,7 +1946,7 @@ msgstr "Elija la carpeta de destino." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Mover aquí" @@ -2291,46 +2291,53 @@ msgstr "requiere atención" msgid "up to date" msgstr "actualizado" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "buscando cambios…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "buscando cambios: {n} elemento revisado" +msgstr[1] "buscando cambios: {n} elementos revisados" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "buscando cambios: {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "sincronizando {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "sincronizando {file}: {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Añadir carpeta para sincronizar" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizando la carpeta…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "No se pudo añadir la carpeta" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "No se pudieron listar las carpetas para restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2338,19 +2345,19 @@ msgstr "" "Marque las carpetas que sincronizar con esta máquina y ajuste dónde debe " "estar cada una." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Restaurar carpetas" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Restaurando carpetas…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2359,36 +2366,36 @@ msgstr "" "Estas carpetas tienen copia de seguridad desde “{name}”. Las carpetas " "restauradas siguen sincronizándose con la copia de ese equipo." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "" "Estas carpetas tienen copia de seguridad bajo este equipo en Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Nada que restaurar: todas las carpetas de “{name}” ya se sincronizan aquí." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Nada que restaurar: todas las carpetas de este equipo ya se sincronizan aquí." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "La carpeta pasará a solo en línea" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "La carpeta se descargará y permanecerá sincronizada" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "No se pudo cambiar el modo" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2405,7 +2412,7 @@ msgstr "" "Para conservar una copia local, cancele, cambie la carpeta a Sincronizada y " "espere a que termine la descarga antes de quitarla." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2418,68 +2425,68 @@ msgstr "" "Los archivos locales permanecen en este disco y simplemente dejan de " "sincronizarse. Elija si quiere eliminar también la copia en Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "¿Dejar de sincronizar la carpeta?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Eliminar también de Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Elimina la única copia de estos archivos." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "La copia local no se ve afectada." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Dejar de sincronizar" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Se dejó de sincronizar la carpeta" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "No se pudo dejar de sincronizar la carpeta" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Renombrar equipo" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "Renombrar “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "No se pudo renombrar el equipo" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "Se necesita un nombre." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Equipo renombrado" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Escriba “{name}” para confirmar" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "¿Quitar el equipo?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2493,26 +2500,26 @@ msgstr "" "Todo lo que respaldó en Proton Drive se eliminará con él. Los archivos de " "ese equipo no se tocan, pero esto no se puede deshacer desde aquí." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Quitar" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Equipo quitado" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "No se pudo quitar el equipo" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "¿Continuar esta copia de seguridad aquí?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2531,25 +2538,25 @@ msgstr "" "no se mueven. Después, use “Restaurar en este equipo” para recuperar lo que " "“{name}” sincronizaba." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Continuar aquí" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Ahora se hace copia de seguridad como “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "No se pudo continuar esa copia de seguridad aquí" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "¿Sincronizar con este equipo?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2566,25 +2573,25 @@ msgstr "" "Proton Drive. Las carpetas ya sincronizadas aquí se quedan donde están. A " "continuación, elija qué carpetas suyas sincronizar aquí." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Sincronizar aquí" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Ahora se sincroniza con “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "No se pudo sincronizar con ese equipo" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "¿Mover la copia de seguridad a este equipo?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2601,12 +2608,12 @@ msgstr "" "carpetas." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Se movió la copia de seguridad de “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "No se pudo mover esa copia de seguridad" @@ -3245,7 +3252,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Este equipo olvida lo que sincronizó antes en {path} y vuelve a comparar la carpeta con Proton Drive. No se elimina nada: un archivo que solo está en un lado se copia al otro, y de un archivo que difiere se conservan ambas versiones." +msgstr "" +"Este equipo olvida lo que sincronizó antes en {path} y vuelve a comparar la " +"carpeta con Proton Drive. No se elimina nada: un archivo que solo está en un " +"lado se copia al otro, y de un archivo que difiere se conservan ambas " +"versiones." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/fr.po b/po/fr.po index a2c7405..8a20308 100644 --- a/po/fr.po +++ b/po/fr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -249,13 +249,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -350,7 +350,7 @@ msgstr "Grille / liste" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Renommer" @@ -682,7 +682,7 @@ msgid "Couldn't add a sync folder" msgstr "Impossible d’ajouter un dossier synchronisé" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Impossible de restaurer les dossiers" @@ -1279,12 +1279,12 @@ msgstr "Impossible de charger les albums" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1933,7 +1933,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Nouveau nom" @@ -1958,7 +1958,7 @@ msgstr "Choisissez le dossier de destination." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Déplacer ici" @@ -2304,46 +2304,53 @@ msgstr "attention requise" msgid "up to date" msgstr "à jour" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "recherche de modifications…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "recherche de modifications — {n} élément vérifié" +msgstr[1] "recherche de modifications — {n} éléments vérifiés" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "recherche de modifications — {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "synchronisation de {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "synchronisation de {file} — {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Ajouter un dossier à synchroniser" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Synchronisation du dossier…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Impossible d’ajouter le dossier" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Impossible de lister les dossiers à restaurer" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2351,19 +2358,19 @@ msgstr "" "Cochez les dossiers à synchroniser sur cette machine et ajustez " "l’emplacement de chacun." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Restaurer les dossiers" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Restaurer" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Restauration des dossiers…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2372,35 +2379,35 @@ msgstr "" "Ces dossiers sont sauvegardés depuis « {name} ». Les dossiers restaurés " "restent synchronisés avec la copie de cet ordinateur." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "Ces dossiers sont sauvegardés sous cet ordinateur dans Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Rien à restaurer — les dossiers de « {name} » sont tous synchronisés ici." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Rien à restaurer — les dossiers de cet ordinateur sont tous synchronisés ici." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "Le dossier passera en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "Le dossier va être téléchargé et rester synchronisé" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Impossible de changer de mode" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2417,7 +2424,7 @@ msgstr "" "arrêtée. Pour conserver une copie locale, annulez, passez le dossier en " "« Synchronisé » et attendez la fin du téléchargement avant de le retirer." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2431,68 +2438,68 @@ msgstr "" "synchronisés. Choisissez s’il faut aussi supprimer la copie dans Proton " "Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Arrêter la synchronisation du dossier ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Supprimer aussi de Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Supprime l’unique copie de ces fichiers." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "La copie locale n’est pas affectée." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Arrêter la synchronisation" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Synchronisation du dossier arrêtée" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Impossible d’arrêter la synchronisation du dossier" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Renommer l’ordinateur" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "Renommer « {name} »." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Impossible de renommer l’ordinateur" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "Un nom est requis." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Ordinateur renommé" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Saisissez « {name} » pour confirmer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Retirer l’ordinateur ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2507,26 +2514,26 @@ msgstr "" "fichiers présents sur cet ordinateur ne sont pas touchés — mais cette action " "ne peut pas être annulée d’ici." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Retirer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Ordinateur retiré" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Impossible de retirer l’ordinateur" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Continuer cette sauvegarde ici ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2545,25 +2552,25 @@ msgstr "" "ne sont pas déplacés. Utilisez ensuite « Restaurer sur cet ordinateur » pour " "récupérer ce que « {name} » synchronisait." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Continuer ici" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Sauvegarde désormais en tant que « {name} »" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Impossible de continuer cette sauvegarde ici" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Synchroniser avec cet ordinateur ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2580,25 +2587,25 @@ msgstr "" "dans Proton Drive. Les dossiers déjà synchronisés ici restent où ils sont. " "Vous choisissez ensuite lesquels de ses dossiers synchroniser ici." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Synchroniser ici" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Synchronisé désormais avec « {name} »" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Impossible de synchroniser avec cet ordinateur" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Déplacer la sauvegarde vers cet ordinateur ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2615,12 +2622,12 @@ msgstr "" "disparaître." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Sauvegarde de « {name} » déplacée" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Impossible de déplacer cette sauvegarde" @@ -3270,7 +3277,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Cet ordinateur oublie ce qu’il a synchronisé auparavant dans {path} et compare à nouveau le dossier avec Proton Drive. Rien n’est supprimé : un fichier présent d’un seul côté est copié de l’autre, et un fichier qui diffère garde ses deux versions." +msgstr "" +"Cet ordinateur oublie ce qu’il a synchronisé auparavant dans {path} et " +"compare à nouveau le dossier avec Proton Drive. Rien n’est supprimé : un " +"fichier présent d’un seul côté est copié de l’autre, et un fichier qui " +"diffère garde ses deux versions." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/it.po b/po/it.po index 070bc78..c035843 100644 --- a/po/it.po +++ b/po/it.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -245,13 +245,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -346,7 +346,7 @@ msgstr "Griglia / elenco" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Rinomina" @@ -678,7 +678,7 @@ msgid "Couldn't add a sync folder" msgstr "Impossibile aggiungere una cartella sincronizzata" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Impossibile ripristinare le cartelle" @@ -1273,12 +1273,12 @@ msgstr "Impossibile caricare gli album" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1927,7 +1927,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Nuovo nome" @@ -1952,7 +1952,7 @@ msgstr "Scegli la cartella di destinazione." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Sposta qui" @@ -2298,46 +2298,53 @@ msgstr "richiede attenzione" msgid "up to date" msgstr "aggiornato" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "controllo delle modifiche…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "controllo delle modifiche: {n} elemento controllato" +msgstr[1] "controllo delle modifiche: {n} elementi controllati" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "controllo delle modifiche: {done} di {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "sincronizzazione {done} di {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "sincronizzazione di {file}: {done} di {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Aggiungi cartella da sincronizzare" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizzazione della cartella…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Impossibile aggiungere la cartella" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Impossibile elencare le cartelle da ripristinare" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2345,19 +2352,19 @@ msgstr "" "Seleziona le cartelle da sincronizzare su questa macchina e regola dove deve " "trovarsi ciascuna." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Ripristina cartelle" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Ripristina" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Ripristino delle cartelle…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2366,39 +2373,39 @@ msgstr "" "Queste cartelle sono sottoposte a backup da “{name}”. Le cartelle " "ripristinate continuano a sincronizzarsi con la copia di quel computer." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "" "Queste cartelle sono sottoposte a backup sotto questo computer in Proton " "Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Niente da ripristinare: le cartelle di “{name}” sono già tutte sincronizzate " "qui." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Niente da ripristinare: le cartelle di questo computer sono già tutte " "sincronizzate qui." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "La cartella passerà a solo online" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "La cartella verrà scaricata e resterà sincronizzata" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Impossibile cambiare modalità" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2416,7 +2423,7 @@ msgstr "" "cartella a Sincronizzata e attendi il completamento del download prima di " "rimuoverla." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2429,68 +2436,68 @@ msgstr "" "I file locali restano su questo disco e semplicemente smettono di essere " "sincronizzati. Scegli se eliminare anche la copia in Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Interrompere la sincronizzazione della cartella?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Elimina anche da Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Elimina l'unica copia di questi file." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "La copia locale non viene modificata." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Interrompi sincronizzazione" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Sincronizzazione della cartella interrotta" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Impossibile interrompere la sincronizzazione della cartella" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Rinomina computer" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "Rinomina “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Impossibile rinominare il computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "È richiesto un nome." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Computer rinominato" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Digita “{name}” per confermare" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Rimuovere il computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2505,26 +2512,26 @@ msgstr "" "insieme a esso. I file su quel computer non vengono toccati, ma questa " "operazione non può essere annullata da qui." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Rimuovi" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Computer rimosso" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Impossibile rimuovere il computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Continuare questo backup qui?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2543,25 +2550,25 @@ msgstr "" "qui non vengono spostate. Usa poi “Ripristina su questo computer” per " "recuperare ciò che “{name}” sincronizzava." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Continua qui" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Ora il backup avviene come “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Impossibile continuare quel backup qui" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Sincronizzare con questo computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2578,25 +2585,25 @@ msgstr "" "in Proton Drive. Le cartelle già sincronizzate qui restano dove sono. Poi " "scegli quali delle sue cartelle sincronizzare qui." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Sincronizza qui" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Ora sincronizzato con “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Impossibile sincronizzare con quel computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Spostare il backup su questo computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2613,12 +2620,12 @@ msgstr "" "cartelle." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Backup di “{name}” spostato" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Impossibile spostare quel backup" @@ -3263,7 +3270,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Questo computer dimentica ciò che ha sincronizzato finora in {path} e confronta di nuovo la cartella con Proton Drive. Non viene eliminato nulla: un file presente su un solo lato viene copiato sull’altro e di un file diverso vengono mantenute entrambe le versioni." +msgstr "" +"Questo computer dimentica ciò che ha sincronizzato finora in {path} e " +"confronta di nuovo la cartella con Proton Drive. Non viene eliminato nulla: " +"un file presente su un solo lato viene copiato sull’altro e di un file " +"diverso vengono mantenute entrambe le versioni." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/nl.po b/po/nl.po index c5f8602..1de0e6f 100644 --- a/po/nl.po +++ b/po/nl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -246,13 +246,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -347,7 +347,7 @@ msgstr "Raster / lijst" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Hernoemen" @@ -679,7 +679,7 @@ msgid "Couldn't add a sync folder" msgstr "Kon geen synchronisatiemap toevoegen" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Kon mappen niet terugzetten" @@ -1269,12 +1269,12 @@ msgstr "Kon albums niet laden" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1921,7 +1921,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Nieuwe naam" @@ -1946,7 +1946,7 @@ msgstr "Kies de map waarnaar je wilt verplaatsen." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Hierheen verplaatsen" @@ -2292,46 +2292,53 @@ msgstr "vereist aandacht" msgid "up to date" msgstr "bijgewerkt" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "controleren op wijzigingen…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "controleren op wijzigingen — {n} item gecontroleerd" +msgstr[1] "controleren op wijzigingen — {n} items gecontroleerd" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "controleren op wijzigingen — {done} van {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "synchroniseren: {done} van {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "{file} synchroniseren — {done} van {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Map toevoegen aan synchronisatie" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Map synchroniseren…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Kon map niet toevoegen" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Kon mappen om terug te zetten niet weergeven" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2339,19 +2346,19 @@ msgstr "" "Vink de mappen aan die je met dit apparaat wilt synchroniseren en pas aan " "waar elke map moet komen." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Mappen herstellen" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Terugzetten" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Mappen terugzetten…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2360,38 +2367,38 @@ msgstr "" "Van deze mappen is een back-up gemaakt vanaf “{name}”. Teruggezette mappen " "blijven synchroniseren met de kopie van die computer." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "" "Van deze mappen is een back-up gemaakt onder deze computer in Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Niets om terug te zetten — de mappen van “{name}” worden hier al allemaal " "gesynchroniseerd." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Niets om terug te zetten — de mappen van deze computer worden hier al " "allemaal gesynchroniseerd." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "Map wordt alleen online" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "Map wordt gedownload en blijft gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Kon modus niet wijzigen" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2408,7 +2415,7 @@ msgstr "" "kopie houden, annuleer dan, zet de map op Gesynchroniseerd en wacht tot de " "download klaar is voordat je hem verwijdert." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2421,68 +2428,68 @@ msgstr "" "De lokale bestanden blijven op deze schijf en worden gewoon niet meer " "gesynchroniseerd. Kies of je ook de kopie in Proton Drive wilt verwijderen." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Synchroniseren van map stoppen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Ook uit Proton Drive verwijderen" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Verwijdert de enige kopie van deze bestanden." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "De lokale kopie blijft ongewijzigd." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Synchroniseren stoppen" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Synchroniseren van map gestopt" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Kon het synchroniseren van de map niet stoppen" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Computer hernoemen" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "“{name}” hernoemen." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Kon de computer niet hernoemen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "Een naam is vereist." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Computer hernoemd" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Typ “{name}” om te bevestigen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Computer verwijderen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2497,26 +2504,26 @@ msgstr "" "mee verwijderd. De bestanden op die computer zelf blijven onaangeroerd — " "maar dit kan hier niet ongedaan worden gemaakt." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Verwijderen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Computer verwijderd" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Kon de computer niet verwijderen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Deze back-up hier voortzetten?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2535,25 +2542,25 @@ msgstr "" "gesynchroniseerd, worden niet verplaatst. Gebruik daarna “Terugzetten op " "deze computer” om terug te halen wat “{name}” synchroniseerde." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Hier voortzetten" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Back-up nu als “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Kon die back-up hier niet voortzetten" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Synchroniseren met deze computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2570,25 +2577,25 @@ msgstr "" "Proton Drive. Mappen die hier al worden gesynchroniseerd, blijven waar ze " "zijn. Daarna kiest u welke van zijn mappen u hier synchroniseert." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Hier synchroniseren" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Nu gesynchroniseerd met “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Kon niet synchroniseren met die computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Back-up naar deze computer verplaatsen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2604,12 +2611,12 @@ msgstr "" "Stop Proton Drive eerst op “{name}”. Anders ziet het zijn mappen verdwijnen." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Back-up van “{name}” verplaatst" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Kon die back-up niet verplaatsen" @@ -3255,7 +3262,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Deze computer vergeet wat hij eerder in {path} heeft gesynchroniseerd en vergelijkt de map opnieuw met Proton Drive. Er wordt niets verwijderd: een bestand dat maar aan één kant staat, wordt naar de andere kant gekopieerd, en van een bestand dat verschilt blijven beide versies bewaard." +msgstr "" +"Deze computer vergeet wat hij eerder in {path} heeft gesynchroniseerd en " +"vergelijkt de map opnieuw met Proton Drive. Er wordt niets verwijderd: een " +"bestand dat maar aan één kant staat, wordt naar de andere kant gekopieerd, " +"en van een bestand dat verschilt blijven beide versies bewaard." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/pdfs.pot b/po/pdfs.pot index ff19449..6f76052 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.5.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:28+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -222,13 +222,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -323,7 +323,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "" @@ -649,7 +649,7 @@ msgid "Couldn't add a sync folder" msgstr "" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "" @@ -1227,12 +1227,12 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1875,7 +1875,7 @@ msgid "{status}. {message}" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "" @@ -1900,7 +1900,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "" @@ -2244,97 +2244,104 @@ msgstr "" msgid "up to date" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " "with that computer's copy." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2345,7 +2352,7 @@ msgid "" "finish before removing it." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2354,68 +2361,68 @@ msgid "" "whether to also delete the copy in Proton Drive." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2425,26 +2432,26 @@ msgid "" "here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2456,25 +2463,25 @@ msgid "" "syncing." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2485,25 +2492,25 @@ msgid "" "its folders to sync here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2514,12 +2521,12 @@ msgid "" msgstr "" #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "" diff --git a/po/pl.po b/po/pl.po index 0569538..8acb1fb 100644 --- a/po/pl.po +++ b/po/pl.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -250,13 +250,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -351,7 +351,7 @@ msgstr "Siatka/lista" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Zmień nazwę" @@ -696,7 +696,7 @@ msgid "Couldn't add a sync folder" msgstr "Nie można dodać katalogu synchronizacji" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Nie można przywrócić katalogów" @@ -1300,12 +1300,12 @@ msgstr "Nie można wczytać albumów" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1969,7 +1969,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Nowa nazwa" @@ -1994,7 +1994,7 @@ msgstr "Proszę wybrać katalog docelowy." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Przenieś tutaj" @@ -2351,46 +2351,54 @@ msgstr "wymaga uwagi" msgid "up to date" msgstr "aktualne" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "sprawdzanie zmian…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "sprawdzanie zmian — sprawdzono {n} element" +msgstr[1] "sprawdzanie zmian — sprawdzono {n} elementy" +msgstr[2] "sprawdzanie zmian — sprawdzono {n} elementów" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "sprawdzanie zmian — {done} z {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "synchronizowanie {done} z {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "synchronizowanie {file} — {done} z {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Dodaj katalog do synchronizacji" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Synchronizowanie katalogu…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Nie można dodać katalogu" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Nie można wyświetlić listy katalogów do przywrócenia" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2398,19 +2406,19 @@ msgstr "" "Należy zaznaczyć katalogi do synchronizacji z tym komputerem i dostosować " "położenie każdego z nich." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Przywróć katalogi" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Przywróć" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Przywracanie katalogów…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2419,37 +2427,37 @@ msgstr "" "Te katalogi mają kopię zapasową z komputera „{name}”. Przywrócone katalogi " "nadal będą synchronizowane z kopią tego komputera." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "Te katalogi mają kopię zapasową w Proton Drive pod tym komputerem." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Nie ma nic do przywrócenia — wszystkie katalogi komputera „{name}” są tutaj " "synchronizowane." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Nie ma nic do przywrócenia — wszystkie katalogi tego komputera są tutaj " "synchronizowane." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "Katalog przejdzie w tryb tylko online" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "Katalog zostanie pobrany i będzie synchronizowany" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Nie można zmienić trybu" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2466,7 +2474,7 @@ msgstr "" "pusty. Aby zachować lokalną kopię, należy anulować, przełączyć katalog na " "tryb Synchronizowany i poczekać na ukończenie pobierania przed usunięciem." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2479,68 +2487,68 @@ msgstr "" "Lokalne pliki pozostaną na tym dysku i po prostu przestaną być " "synchronizowane. Można też usunąć kopię w Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Zatrzymać synchronizację katalogu?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Usuń także z Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Usuwa jedyną kopię tych plików." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "Lokalna kopia pozostanie bez zmian." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Zatrzymaj synchronizację" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "Zatrzymano synchronizację katalogu" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Nie można zatrzymać synchronizacji katalogu" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Zmiana nazwy komputera" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "Proszę podać nową nazwę komputera „{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Nie można zmienić nazwy komputera" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "Nazwa jest wymagana." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Zmieniono nazwę komputera" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Proszę wpisać „{name}”, aby potwierdzić" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Usunąć komputer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2555,26 +2563,26 @@ msgstr "" "z nim. Pliki na samym komputerze pozostaną nietknięte — ale tej operacji nie " "można tutaj cofnąć." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Usuń" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Usunięto komputer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Nie można usunąć komputera" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Kontynuować tę kopię zapasową tutaj?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2593,25 +2601,25 @@ msgstr "" "przeniesione. Aby odzyskać to, co synchronizował „{name}”, proszę potem użyć " "opcji „Przywróć na tym komputerze”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Kontynuuj tutaj" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Kopia zapasowa jest teraz tworzona jako „{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Nie można kontynuować tej kopii zapasowej tutaj" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Synchronizować z tym komputerem?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2628,25 +2636,25 @@ msgstr "" "Drive. Katalogi już tu synchronizowane zostaną tam, gdzie są. Następnie " "proszę wybrać, które z jego katalogów synchronizować tutaj." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Synchronizuj tutaj" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Teraz synchronizowane z „{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Nie można synchronizować z tym komputerem" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Przenieść kopię zapasową na ten komputer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2664,12 +2672,12 @@ msgstr "" "jego foldery znikają." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Przeniesiono kopię zapasową „{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Nie można przenieść tej kopii zapasowej" @@ -3319,7 +3327,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Ten komputer zapomina, co wcześniej zsynchronizował w {path}, i ponownie porównuje katalog z Proton Drive. Nic nie zostanie usunięte: plik, który jest tylko po jednej stronie, zostanie skopiowany na drugą, a z pliku, który się różni, zostaną zachowane obie wersje." +msgstr "" +"Ten komputer zapomina, co wcześniej zsynchronizował w {path}, i ponownie " +"porównuje katalog z Proton Drive. Nic nie zostanie usunięte: plik, który " +"jest tylko po jednej stronie, zostanie skopiowany na drugą, a z pliku, który " +"się różni, zostaną zachowane obie wersje." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" diff --git a/po/pt_BR.po b/po/pt_BR.po index a49aeca..56b0d45 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-26 17:16+0100\n" +"POT-Creation-Date: 2026-10-26 22:26+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -245,13 +245,13 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1917 #: crates/pdfs-gui/src/app/pages/browser.rs:2039 #: crates/pdfs-gui/src/app/pages/browser.rs:2540 -#: crates/pdfs-gui/src/app/pages/devices.rs:796 -#: crates/pdfs-gui/src/app/pages/devices.rs:949 -#: crates/pdfs-gui/src/app/pages/devices.rs:987 -#: crates/pdfs-gui/src/app/pages/devices.rs:1039 -#: crates/pdfs-gui/src/app/pages/devices.rs:1083 -#: crates/pdfs-gui/src/app/pages/devices.rs:1123 -#: crates/pdfs-gui/src/app/pages/devices.rs:1186 +#: crates/pdfs-gui/src/app/pages/devices.rs:804 +#: crates/pdfs-gui/src/app/pages/devices.rs:957 +#: crates/pdfs-gui/src/app/pages/devices.rs:995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 +#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1194 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 #: crates/pdfs-gui/src/app/pages/locations.rs:1537 @@ -346,7 +346,7 @@ msgstr "Grade / lista" #: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1918 -#: crates/pdfs-gui/src/app/pages/devices.rs:988 +#: crates/pdfs-gui/src/app/pages/devices.rs:996 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Renomear" @@ -678,7 +678,7 @@ msgid "Couldn't add a sync folder" msgstr "Não foi possível adicionar uma pasta sincronizada" #: crates/pdfs-gui/src/app/pages/activity_text.rs:58 -#: crates/pdfs-gui/src/app/pages/devices.rs:831 +#: crates/pdfs-gui/src/app/pages/devices.rs:839 msgid "Couldn't restore folders" msgstr "Não foi possível restaurar as pastas" @@ -1270,12 +1270,12 @@ msgstr "Não foi possível carregar os álbuns" #: crates/pdfs-gui/src/app/pages/browser.rs:1873 #: crates/pdfs-gui/src/app/pages/browser.rs:2500 #: crates/pdfs-gui/src/app/pages/browser.rs:2650 -#: crates/pdfs-gui/src/app/pages/devices.rs:699 -#: crates/pdfs-gui/src/app/pages/devices.rs:739 -#: crates/pdfs-gui/src/app/pages/devices.rs:892 -#: crates/pdfs-gui/src/app/pages/devices.rs:1162 -#: crates/pdfs-gui/src/app/pages/devices.rs:1223 -#: crates/pdfs-gui/src/app/pages/devices.rs:1252 +#: crates/pdfs-gui/src/app/pages/devices.rs:707 +#: crates/pdfs-gui/src/app/pages/devices.rs:747 +#: crates/pdfs-gui/src/app/pages/devices.rs:900 +#: crates/pdfs-gui/src/app/pages/devices.rs:1170 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +#: crates/pdfs-gui/src/app/pages/devices.rs:1260 #: crates/pdfs-gui/src/app/pages/duplicates.rs:221 #: crates/pdfs-gui/src/app/pages/locations.rs:577 #: crates/pdfs-gui/src/app/pages/locations.rs:824 @@ -1921,7 +1921,7 @@ msgid "{status}. {message}" msgstr "{status}. {message}" #: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:981 +#: crates/pdfs-gui/src/app/pages/devices.rs:989 msgid "New name" msgstr "Novo nome" @@ -1946,7 +1946,7 @@ msgstr "Escolha a pasta de destino." #: crates/pdfs-gui/src/app/pages/browser.rs:1989 #: crates/pdfs-gui/src/app/pages/browser.rs:1994 -#: crates/pdfs-gui/src/app/pages/devices.rs:1187 +#: crates/pdfs-gui/src/app/pages/devices.rs:1195 msgid "Move Here" msgstr "Mover para cá" @@ -2291,46 +2291,53 @@ msgstr "requer atenção" msgid "up to date" msgstr "atualizado" -#: crates/pdfs-gui/src/app/pages/devices.rs:634 +#: crates/pdfs-gui/src/app/pages/devices.rs:632 msgid "checking for changes…" msgstr "verificando alterações…" -#: crates/pdfs-gui/src/app/pages/devices.rs:637 +#: crates/pdfs-gui/src/app/pages/devices.rs:638 +#, rust-format +msgid "checking for changes — {n} item checked" +msgid_plural "checking for changes — {n} items checked" +msgstr[0] "verificando alterações — {n} item verificado" +msgstr[1] "verificando alterações — {n} itens verificados" + +#: crates/pdfs-gui/src/app/pages/devices.rs:645 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "verificando alterações — {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:649 +#: crates/pdfs-gui/src/app/pages/devices.rs:657 #, rust-format msgid "syncing {done} of {total}" msgstr "sincronizando {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:655 +#: crates/pdfs-gui/src/app/pages/devices.rs:663 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "sincronizando {file} — {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:675 msgid "Add Folder to Sync" msgstr "Adicionar pasta à sincronização" -#: crates/pdfs-gui/src/app/pages/devices.rs:691 +#: crates/pdfs-gui/src/app/pages/devices.rs:699 #: crates/pdfs-gui/src/app/pages/locations.rs:1559 #: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizando pasta…" -#: crates/pdfs-gui/src/app/pages/devices.rs:694 -#: crates/pdfs-gui/src/app/pages/devices.rs:698 +#: crates/pdfs-gui/src/app/pages/devices.rs:702 +#: crates/pdfs-gui/src/app/pages/devices.rs:706 msgid "Couldn't add folder" msgstr "Não foi possível adicionar a pasta" -#: crates/pdfs-gui/src/app/pages/devices.rs:732 -#: crates/pdfs-gui/src/app/pages/devices.rs:738 +#: crates/pdfs-gui/src/app/pages/devices.rs:740 +#: crates/pdfs-gui/src/app/pages/devices.rs:746 msgid "Couldn't list folders to restore" msgstr "Não foi possível listar as pastas para restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:764 +#: crates/pdfs-gui/src/app/pages/devices.rs:772 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2338,19 +2345,19 @@ msgstr "" "Marque as pastas a sincronizar com esta máquina e ajuste onde cada uma deve " "ficar." -#: crates/pdfs-gui/src/app/pages/devices.rs:790 +#: crates/pdfs-gui/src/app/pages/devices.rs:798 msgid "Restore Folders" msgstr "Restaurar pastas" -#: crates/pdfs-gui/src/app/pages/devices.rs:797 +#: crates/pdfs-gui/src/app/pages/devices.rs:805 msgid "Restore" msgstr "Restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:830 +#: crates/pdfs-gui/src/app/pages/devices.rs:838 msgid "Restoring folders…" msgstr "Restaurando pastas…" -#: crates/pdfs-gui/src/app/pages/devices.rs:842 +#: crates/pdfs-gui/src/app/pages/devices.rs:850 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2359,36 +2366,36 @@ msgstr "" "Estas pastas têm backup a partir de “{name}”. As pastas restauradas " "continuam sincronizando com a cópia daquele computador." -#: crates/pdfs-gui/src/app/pages/devices.rs:845 +#: crates/pdfs-gui/src/app/pages/devices.rs:853 msgid "These folders are backed up under this computer in Proton Drive." msgstr "Estas pastas têm backup sob este computador no Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:854 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" "Nada a restaurar — as pastas de “{name}” já estão todas sincronizadas aqui." -#: crates/pdfs-gui/src/app/pages/devices.rs:857 +#: crates/pdfs-gui/src/app/pages/devices.rs:865 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" "Nada a restaurar — as pastas deste computador já estão todas sincronizadas " "aqui." -#: crates/pdfs-gui/src/app/pages/devices.rs:881 +#: crates/pdfs-gui/src/app/pages/devices.rs:889 msgid "Folder will switch to online only" msgstr "A pasta passará a ser somente online" -#: crates/pdfs-gui/src/app/pages/devices.rs:883 +#: crates/pdfs-gui/src/app/pages/devices.rs:891 msgid "Folder will download and stay synced" msgstr "A pasta será baixada e permanecerá sincronizada" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 -#: crates/pdfs-gui/src/app/pages/devices.rs:891 +#: crates/pdfs-gui/src/app/pages/devices.rs:895 +#: crates/pdfs-gui/src/app/pages/devices.rs:899 msgid "Couldn't change mode" msgstr "Não foi possível alterar o modo" -#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:931 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2405,7 +2412,7 @@ msgstr "" "uma cópia local, cancele, mude a pasta para Sincronizada e aguarde o " "download terminar antes de removê-la." -#: crates/pdfs-gui/src/app/pages/devices.rs:929 +#: crates/pdfs-gui/src/app/pages/devices.rs:937 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2418,68 +2425,68 @@ msgstr "" "Os arquivos locais permanecem neste disco e simplesmente deixam de ser " "sincronizados. Escolha se também deseja excluir a cópia no Proton Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:934 +#: crates/pdfs-gui/src/app/pages/devices.rs:942 msgid "Stop Syncing Folder?" msgstr "Parar de sincronizar a pasta?" -#: crates/pdfs-gui/src/app/pages/devices.rs:939 +#: crates/pdfs-gui/src/app/pages/devices.rs:947 msgid "Also delete from Proton Drive" msgstr "Também excluir do Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:941 +#: crates/pdfs-gui/src/app/pages/devices.rs:949 msgid "Deletes the only copy of these files." msgstr "Exclui a única cópia destes arquivos." -#: crates/pdfs-gui/src/app/pages/devices.rs:943 +#: crates/pdfs-gui/src/app/pages/devices.rs:951 msgid "The local copy is unaffected." msgstr "A cópia local não é afetada." -#: crates/pdfs-gui/src/app/pages/devices.rs:950 +#: crates/pdfs-gui/src/app/pages/devices.rs:958 msgid "Stop Syncing" msgstr "Parar de sincronizar" -#: crates/pdfs-gui/src/app/pages/devices.rs:963 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 msgid "Stopped syncing folder" msgstr "A pasta deixou de ser sincronizada" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:972 msgid "Couldn't stop syncing the folder" msgstr "Não foi possível parar de sincronizar a pasta" -#: crates/pdfs-gui/src/app/pages/devices.rs:975 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Rename Computer" msgstr "Renomear computador" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:977 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 #, rust-format msgid "Rename “{name}”." msgstr "Renomear “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1002 -#: crates/pdfs-gui/src/app/pages/devices.rs:1014 +#: crates/pdfs-gui/src/app/pages/devices.rs:1010 +#: crates/pdfs-gui/src/app/pages/devices.rs:1022 msgid "Couldn't rename the computer" msgstr "Não foi possível renomear o computador" -#: crates/pdfs-gui/src/app/pages/devices.rs:1003 +#: crates/pdfs-gui/src/app/pages/devices.rs:1011 msgid "A name is required." msgstr "Um nome é obrigatório." -#: crates/pdfs-gui/src/app/pages/devices.rs:1013 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 msgid "Computer renamed" msgstr "Computador renomeado" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1026 +#: crates/pdfs-gui/src/app/pages/devices.rs:1034 #, rust-format msgid "Type “{name}” to confirm" msgstr "Digite “{name}” para confirmar" -#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1039 msgid "Remove Computer?" msgstr "Remover computador?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1034 +#: crates/pdfs-gui/src/app/pages/devices.rs:1042 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2494,26 +2501,26 @@ msgstr "" "naquele próprio computador não são tocados — mas isso não pode ser desfeito " "daqui." -#: crates/pdfs-gui/src/app/pages/devices.rs:1040 +#: crates/pdfs-gui/src/app/pages/devices.rs:1048 #: crates/pdfs-gui/src/app/pages/shared.rs:1025 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:634 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:876 msgid "Remove" msgstr "Remover" -#: crates/pdfs-gui/src/app/pages/devices.rs:1057 +#: crates/pdfs-gui/src/app/pages/devices.rs:1065 msgid "Computer removed" msgstr "Computador removido" -#: crates/pdfs-gui/src/app/pages/devices.rs:1058 +#: crates/pdfs-gui/src/app/pages/devices.rs:1066 msgid "Couldn't remove the computer" msgstr "Não foi possível remover o computador" -#: crates/pdfs-gui/src/app/pages/devices.rs:1076 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 msgid "Continue This Backup Here?" msgstr "Continuar este backup aqui?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1079 +#: crates/pdfs-gui/src/app/pages/devices.rs:1087 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2532,25 +2539,25 @@ msgstr "" "movidas. Depois, use “Restaurar neste computador” para recuperar o que " "“{name}” sincronizava." -#: crates/pdfs-gui/src/app/pages/devices.rs:1084 +#: crates/pdfs-gui/src/app/pages/devices.rs:1092 msgid "Continue Here" msgstr "Continuar aqui" #. Translators: {name} is the name of the computer whose backup this one took over. -#: crates/pdfs-gui/src/app/pages/devices.rs:1091 +#: crates/pdfs-gui/src/app/pages/devices.rs:1099 #, rust-format msgid "Now backing up as “{name}”" msgstr "Agora fazendo backup como “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1100 +#: crates/pdfs-gui/src/app/pages/devices.rs:1108 msgid "Couldn't continue that backup here" msgstr "Não foi possível continuar esse backup aqui" -#: crates/pdfs-gui/src/app/pages/devices.rs:1116 +#: crates/pdfs-gui/src/app/pages/devices.rs:1124 msgid "Sync With This Computer?" msgstr "Sincronizar com este computador?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1119 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2567,25 +2574,25 @@ msgstr "" "Drive. As pastas já sincronizadas aqui ficam onde estão. Em seguida, você " "escolhe quais pastas dele sincronizar aqui." -#: crates/pdfs-gui/src/app/pages/devices.rs:1124 +#: crates/pdfs-gui/src/app/pages/devices.rs:1132 msgid "Sync Here" msgstr "Sincronizar aqui" #. Translators: {name} is the name of the other computer this one now syncs with. -#: crates/pdfs-gui/src/app/pages/devices.rs:1131 +#: crates/pdfs-gui/src/app/pages/devices.rs:1139 #, rust-format msgid "Now syncing with “{name}”" msgstr "Agora sincronizando com “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1147 +#: crates/pdfs-gui/src/app/pages/devices.rs:1155 msgid "Couldn't sync with that computer" msgstr "Não foi possível sincronizar com esse computador" -#: crates/pdfs-gui/src/app/pages/devices.rs:1179 +#: crates/pdfs-gui/src/app/pages/devices.rs:1187 msgid "Move Backup to This Computer?" msgstr "Mover o backup para este computador?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1182 +#: crates/pdfs-gui/src/app/pages/devices.rs:1190 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2602,12 +2609,12 @@ msgstr "" "pastas sumirem." #. Translators: {name} is the name of the computer whose folders moved to this one. -#: crates/pdfs-gui/src/app/pages/devices.rs:1194 +#: crates/pdfs-gui/src/app/pages/devices.rs:1202 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Backup de “{name}” movido" -#: crates/pdfs-gui/src/app/pages/devices.rs:1208 +#: crates/pdfs-gui/src/app/pages/devices.rs:1216 msgid "Couldn't move that backup" msgstr "Não foi possível mover esse backup" @@ -3248,7 +3255,11 @@ msgid "" "This computer forgets what it synced in {path} before and compares the " "folder with Proton Drive again. Nothing is deleted: a file on one side only " "is copied to the other, and a file that differs keeps both versions." -msgstr "Este computador esquece o que sincronizou antes em {path} e compara a pasta com o Proton Drive novamente. Nada é excluído: um arquivo que está em um lado só é copiado para o outro, e de um arquivo diferente as duas versões são mantidas." +msgstr "" +"Este computador esquece o que sincronizou antes em {path} e compara a pasta " +"com o Proton Drive novamente. Nada é excluído: um arquivo que está em um " +"lado só é copiado para o outro, e de um arquivo diferente as duas versões " +"são mantidas." #: crates/pdfs-gui/src/app/pages/locations.rs:1538 msgid "Sync From Scratch" From 7f4f11ef1881595f102caec0f27691d2f01a20a0 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Mon, 26 Oct 2026 22:45:36 +0100 Subject: [PATCH 9/9] chore(release): 3.6.0 --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- docs/CHANGELOG.md | 4 ++++ docs/INSTALL.md | 2 +- packaging/PKGBUILD | 2 +- packaging/proton-drive-linux.spec | 2 +- po/pdfs.pot | 2 +- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 88e9472..903bfe2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3474,7 +3474,7 @@ checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" [[package]] name = "pdfs-cli" -version = "3.5.0" +version = "3.6.0" dependencies = [ "anyhow", "clap", @@ -3490,7 +3490,7 @@ dependencies = [ [[package]] name = "pdfs-core" -version = "3.5.0" +version = "3.6.0" dependencies = [ "async-trait", "base64 0.23.1", @@ -3517,7 +3517,7 @@ dependencies = [ [[package]] name = "pdfs-fuse" -version = "3.5.0" +version = "3.6.0" dependencies = [ "async-trait", "base64 0.23.1", @@ -3539,7 +3539,7 @@ dependencies = [ [[package]] name = "pdfs-gui" -version = "3.5.0" +version = "3.6.0" dependencies = [ "anyhow", "async-channel", diff --git a/Cargo.toml b/Cargo.toml index e4f243a..0911a02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"] [workspace.package] -version = "3.5.0" +version = "3.6.0" edition = "2024" license = "MIT" authors = ["Nils Pukropp "] diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d55e9e4..216a358 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -11,6 +11,10 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). ## [Unreleased] +## [3.6.0] — 2026-10-26 + +Schema: **44**, unchanged. + ### Added - **`pdfs diagnose` names the key that keeps My Files closed.** When you are signed in and the service does not answer, a new **Keys** section asks Proton which account and address keys diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 6a6f63a..a4ec509 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -102,7 +102,7 @@ That URL follows `main`. To stay on releases, pin the input to a release tag ins the tag to update: ```nix -inputs.proton-drive-linux.url = "github:narrrl/proton-drive-linux/v3.5.0"; +inputs.proton-drive-linux.url = "github:narrrl/proton-drive-linux/v3.6.0"; ``` Each release tag is built with Nix before the release is published. diff --git a/packaging/PKGBUILD b/packaging/PKGBUILD index 5560b28..7079b8d 100644 --- a/packaging/PKGBUILD +++ b/packaging/PKGBUILD @@ -9,7 +9,7 @@ # Build + install: cd packaging && makepkg -fi pkgname=proton-drive-linux -pkgver=3.5.0 +pkgver=3.6.0 pkgrel=1 pkgdesc="Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app + tray" arch=('x86_64') diff --git a/packaging/proton-drive-linux.spec b/packaging/proton-drive-linux.spec index dbb0d29..8d8ed57 100644 --- a/packaging/proton-drive-linux.spec +++ b/packaging/proton-drive-linux.spec @@ -10,7 +10,7 @@ # Match Arch PKGBUILD `!lto` — LTO has broken some GTK/Rust links in practice. %global _lto_cflags %{nil} -%{!?version: %global version 3.5.0} +%{!?version: %global version 3.6.0} %global forge https://github.com/narrrl/proton-drive-linux # Files come from the checkout, or from the unpacked tag archive. %global src %{?git_dir}%{!?git_dir:.} diff --git a/po/pdfs.pot b/po/pdfs.pot index 6f76052..90860e8 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -6,7 +6,7 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: proton-drive-linux 3.5.0\n" +"Project-Id-Version: proton-drive-linux 3.6.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "POT-Creation-Date: 2026-10-26 22:28+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"