diff --git a/crates/pdfs-core/src/control.rs b/crates/pdfs-core/src/control.rs index 14a37db..4a757d5 100644 --- a/crates/pdfs-core/src/control.rs +++ b/crates/pdfs-core/src/control.rs @@ -1851,6 +1851,34 @@ pub fn is_thumbnail_image_name(name: &str) -> bool { || RAW_THUMBNAIL_EXTENSIONS.contains(&extension.as_str()) } +/// The smallest `.ts` file taken for an MPEG transport stream. `.ts` is +/// TypeScript source as often as it is a recording, and the two sit far apart +/// in size: a source file is kilobytes, while a second of broadcast video is +/// already megabytes. Drive often stores either kind as +/// `application/octet-stream`, so the size is the only signal a listing has. +pub const TS_VIDEO_MIN_BYTES: u64 = 1024 * 1024; + +/// Whether a file named `name`, of `size` bytes when the caller knows it, is a +/// video. The extension decides, except for `.ts`, which counts as video only +/// from [`TS_VIDEO_MIN_BYTES`] up. A `.ts` of unknown size counts as video, as +/// [`PhotoKind::classify`] has it. +pub fn is_video_file_name(name: &str, size: Option) -> bool { + if PhotoKind::classify(Some(name), None) != PhotoKind::Video { + return false; + } + let transport_stream = name + .rsplit_once('.') + .is_some_and(|(_, extension)| extension.eq_ignore_ascii_case("ts")); + !transport_stream || size.is_none_or(|size| size >= TS_VIDEO_MIN_BYTES) +} + +/// Whether file listings show a thumbnail for a file named `name`, of `size` +/// bytes when known: an image [`is_thumbnail_image_name`] accepts, or a video, +/// whose thumbnail is a frame the daemon takes with ffmpeg. +pub fn is_thumbnail_media_name(name: &str, size: Option) -> bool { + is_thumbnail_image_name(name) || is_video_file_name(name, size) +} + /// Whether `name` is one of the concrete RAW formats handled by the exiftool /// embedded-preview path. Deliberately excludes generic/legacy grab-bags whose /// preview availability is not dependable. @@ -2675,6 +2703,41 @@ mod tests { assert_eq!(PhotoKind::classify(Some("x.jpg"), Some("video/mp4")), Photo); } + #[test] + fn a_ts_file_is_a_video_only_at_the_size_of_one() { + const GB: u64 = 1024 * 1024 * 1024; + assert!(!is_video_file_name("app.ts", Some(3 * 1024))); + assert!(!is_video_file_name( + "bundle.TS", + Some(TS_VIDEO_MIN_BYTES - 1) + )); + assert!(is_video_file_name("recording.ts", Some(9 * GB))); + assert!(is_video_file_name("recording.TS", Some(TS_VIDEO_MIN_BYTES))); + assert!(is_video_file_name("recording.ts", None)); + // Only `.ts` is in doubt; every other video name is one at any size. + assert!(is_video_file_name("clip.mkv", Some(10))); + assert!(is_video_file_name("clip.m2ts", Some(10))); + assert!(!is_video_file_name("notes.txt", Some(9 * GB))); + assert!(!is_video_file_name("ts", Some(9 * GB))); + } + + #[test] + fn listings_thumbnail_images_and_videos() { + assert!(is_thumbnail_media_name("photo.JPG", Some(10))); + assert!(is_thumbnail_media_name("camera.nef", None)); + assert!(is_thumbnail_media_name("clip.mp4", Some(10))); + assert!(is_thumbnail_media_name( + "recording.ts", + Some(64 * 1024 * 1024) + )); + assert!(!is_thumbnail_media_name("app.ts", Some(2048))); + assert!(!is_thumbnail_media_name( + "song.flac", + Some(64 * 1024 * 1024) + )); + assert!(!is_thumbnail_media_name("notes.txt", None)); + } + /// Keep every extension accepted by the shared classifier covered. Drive /// activation uses this classification before it knows whether opening a /// file should stream through FUSE or materialise a complete cache entry; diff --git a/crates/pdfs-core/src/opener.rs b/crates/pdfs-core/src/opener.rs index 6795f86..c21d477 100644 --- a/crates/pdfs-core/src/opener.rs +++ b/crates/pdfs-core/src/opener.rs @@ -27,6 +27,7 @@ use std::os::unix::process::CommandExt; use std::path::Path; use std::process::{Command, Stdio}; +use crate::control::is_video_file_name; use serde::{Deserialize, Serialize}; /// Environment override for the terminal used by `"terminal": true` rules. @@ -108,11 +109,12 @@ impl OpenWith { /// a Markdown file). The rules are about *what the user opened*, so the /// caller passes that name and the argv still gets the real path. pub fn command_for_named(&self, path: &Path, name: &str, is_dir: bool) -> Vec { + let kind = Kind::of(path, name, is_dir); for rule in &self.rules { if rule.command.is_empty() { continue; } - if !rule.patterns.iter().any(|p| matches(p, name, is_dir)) { + if !rule.patterns.iter().any(|p| matches(p, name, kind)) { continue; } let argv = expand(&rule.command, path); @@ -325,16 +327,46 @@ fn expand_env(token: &str) -> Option { value.filter(|v| !v.is_empty()) } +/// What is being opened, as far as the `@class` patterns care. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum Kind { + Dir, + Video, + File, +} + +impl Kind { + /// `.ts` names TypeScript and MPEG transport streams alike, so for that + /// one extension the size on disk decides (see + /// [`is_video_file_name`](crate::control::is_video_file_name)). No other + /// name costs a `stat`. + fn of(path: &Path, name: &str, is_dir: bool) -> Kind { + if is_dir { + return Kind::Dir; + } + let size = extension(name) + .eq_ignore_ascii_case("ts") + .then(|| std::fs::metadata(path).ok().map(|meta| meta.len())) + .flatten(); + if is_video_file_name(name, size) { + Kind::Video + } else { + Kind::File + } + } +} + /// Whether `pattern` — a glob or an `@class` — matches this name. -fn matches(pattern: &str, name: &str, is_dir: bool) -> bool { +fn matches(pattern: &str, name: &str, kind: Kind) -> bool { let name_lower = name.to_lowercase(); + let file = kind == Kind::File; match pattern.to_lowercase().as_str() { "@any" => true, - "@dir" => is_dir, - "@text" => !is_dir && class_text(&name_lower), - "@document" => !is_dir && class_document(&name_lower), - "@image" => !is_dir && class_image(&name_lower), - "@media" => !is_dir && class_media(&name_lower), + "@dir" => kind == Kind::Dir, + "@text" => file && class_text(&name_lower), + "@document" => file && class_document(&name_lower), + "@image" => file && class_image(&name_lower), + "@media" => kind == Kind::Video || (file && class_media(&name_lower)), other if other.starts_with('@') => false, other => glob_match(other, &name_lower), } @@ -533,6 +565,37 @@ mod tests { ); } + #[test] + fn a_ts_file_opens_as_media_or_text_by_its_size() { + let policy = OpenWith { + terminal: Some(vec!["alacritty".into(), "-e".into()]), + default: None, + rules: vec![ + rule(&["@text"], &["nvim"], true), + rule(&["@media"], &["mpv"], false), + ], + }; + let dir = std::env::temp_dir().join(format!("pdfs-opener-ts-{}", std::process::id())); + std::fs::create_dir_all(&dir).unwrap(); + let source = dir.join("blob-source"); + std::fs::write(&source, "export const answer = 42;\n").unwrap(); + let recording = dir.join("blob-recording"); + std::fs::File::create(&recording) + .unwrap() + .set_len(crate::control::TS_VIDEO_MIN_BYTES) + .unwrap(); + + let source_argv = policy.command_for_named(&source, "app.ts", false); + let recording_argv = policy.command_for_named(&recording, "recording.ts", false); + // A file that is not on this machine yet has no size to go by. + let unknown_argv = policy.command_for_named(&dir.join("missing"), "recording.ts", false); + std::fs::remove_dir_all(&dir).unwrap(); + + assert_eq!(source_argv[..3], ["alacritty", "-e", "nvim"]); + assert_eq!(recording_argv[0], "mpv"); + assert_eq!(unknown_argv[0], "mpv"); + } + #[test] fn an_empty_policy_is_xdg_open() { let policy = OpenWith::default(); diff --git a/crates/pdfs-fuse/src/drive.rs b/crates/pdfs-fuse/src/drive.rs index f1196ab..162c60e 100644 --- a/crates/pdfs-fuse/src/drive.rs +++ b/crates/pdfs-fuse/src/drive.rs @@ -29,7 +29,7 @@ use proton_drive_rs::proton_sdk::error::Result; use proton_drive_rs::proton_sdk::ids::{DriveEventId, NodeUid, ShareId}; use proton_drive_rs::{ AvailableNameTarget, Device, DeviceType, DriveEvent, DriveEventScopeId, Node, NodeMoveItem, - ProtonDriveClient, RevisionReader, Thumbnail, + ProtonDriveClient, RevisionReader, Thumbnail, ThumbnailType, }; /// One outcome per node of a batch request; see [`ProtonDriveClient::trash_nodes`]. @@ -118,6 +118,14 @@ pub(crate) trait DriveApi: Send + Sync { async fn open_revision(&self, uid: &NodeUid) -> Result>; + /// The file's thumbnail of `thumbnail_type`, or `None` when its revision + /// carries none. + async fn download_thumbnail( + &self, + uid: &NodeUid, + thumbnail_type: ThumbnailType, + ) -> Result>>; + async fn download_file_to_dyn( &self, uid: &NodeUid, @@ -445,6 +453,14 @@ impl DriveApi for ProtonDriveClient { Ok(Arc::new(reader)) } + async fn download_thumbnail( + &self, + uid: &NodeUid, + thumbnail_type: ThumbnailType, + ) -> Result>> { + ProtonDriveClient::download_thumbnail(self, uid, thumbnail_type).await + } + async fn download_file_to_dyn( &self, uid: &NodeUid, diff --git a/crates/pdfs-fuse/src/photos.rs b/crates/pdfs-fuse/src/photos.rs index d53198f..4e7b36b 100644 --- a/crates/pdfs-fuse/src/photos.rs +++ b/crates/pdfs-fuse/src/photos.rs @@ -9,7 +9,7 @@ use std::collections::{HashMap, HashSet}; use std::ffi::OsStr; use std::fs::OpenOptions; use std::io::{Read as _, Write as _}; -use std::os::unix::fs::OpenOptionsExt as _; +use std::os::unix::fs::{FileExt as _, OpenOptionsExt as _}; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; use std::sync::atomic::{AtomicU64, Ordering}; @@ -20,14 +20,17 @@ use base64::Engine as _; use pdfs_core::control::{ FileThumbRequest, MappingProgress, PhotoItem, PhotoKind, PhotoLocation, PhotoThumb, PlaceInfo, ThumbnailBuildStatus, Topic, is_raw_image_name, is_thumbnail_image_name, + is_thumbnail_media_name, }; use pdfs_core::db::{self, StoredPhoto}; use pdfs_core::{CoreError, CoreResult}; +use proton_drive_rs::proton_sdk::error::Result as DriveResult; use proton_drive_rs::proton_sdk::ids::NodeUid; use proton_drive_rs::{NodeKind, PhotoTag, PhotoTagsUpdate, Thumbnail, ThumbnailType}; use tracing::{debug, info, warn}; +use super::drive::RevisionRead; use super::{ Core, PHOTOS_AVAILABLE, PHOTOS_SYNCED_MS, TIMELINE_ENRICH_CHUNK, TIMELINE_TTL, WriteAuthority, node_size, now_ms, parse_uid, @@ -58,9 +61,18 @@ const EXIFTOOL_TIMEOUT: Duration = Duration::from_secs(20); static RAW_TEMP_NONCE: AtomicU64 = AtomicU64::new(0); static EXIFTOOL_MISSING_WARNING: Once = Once::new(); static FFMPEG_MISSING_WARNING: Once = Once::new(); -/// Largest video downloaded whole to grab one frame for its thumbnail. The -/// download lands in memory, so a long 4K recording is left without one. -const VIDEO_THUMB_MAX_BYTES: u64 = 256 * 1024 * 1024; +/// How much of a video's start a thumbnail downloads. The first frame, and +/// the one a second in, sit inside it at any common bitrate. A video is never +/// downloaded whole for one frame: a recording can be many gigabytes. +const VIDEO_HEAD_BYTES: u64 = 16 * 1024 * 1024; +/// A video no larger than this is downloaded whole: its head and tail would +/// cover most of it anyway. +const VIDEO_WHOLE_MAX_BYTES: u64 = 24 * 1024 * 1024; +/// Largest MP4/MOV index (`moov` box) fetched from past the head. An hour of +/// video indexes in a few MiB; anything larger is not worth one frame. +const VIDEO_INDEX_MAX_BYTES: u64 = 32 * 1024 * 1024; +/// Top-level boxes walked looking for the index before giving up. +const VIDEO_BOX_WALK_MAX: usize = 32; /// A single frame is seconds of work even for 4K; this only stops a wedged /// ffmpeg from holding a thumbnail permit. const FFMPEG_TIMEOUT: Duration = Duration::from_secs(30); @@ -245,8 +257,8 @@ struct RawPreviewUnavailable; /// the photo will never have a thumbnail, and only that verdict is persisted. enum ThumbAttempt { Made(GeneratedThumb), - /// Decoded nothing — a format this build has no decoder for, or a video - /// too large to fetch for one frame. Permanent. + /// Decoded nothing: a format this build has no decoder for, a video + /// ffmpeg takes no frame from, or a `.ts` that is not one. Permanent. Undecodable, /// The photo couldn't be downloaded. Transient: try again next time. Unavailable, @@ -577,21 +589,6 @@ fn warn_ffmpeg_missing() { }); } -/// A thumbnail from one frame of a downloaded video, which ffmpeg reads from a -/// staging copy. See [`video_file_thumbnail`]. -fn video_thumbnail( - bytes: &[u8], - name: &str, - staging_dir: &Path, - ffmpeg: &OsStr, - timeout: Duration, -) -> ScaleAttempt { - let Some(file) = RawTempFile::create_in(staging_dir, bytes, name) else { - return ScaleAttempt::Unavailable; - }; - video_file_thumbnail(&file.0, ffmpeg, timeout) -} - /// A thumbnail from one frame of the video at `path`. A second in, past the /// black lead-in most clips open on, and the first frame for a clip shorter than /// that. ffmpeg applies the clip's rotation, so a portrait phone video comes out @@ -624,6 +621,151 @@ fn video_file_thumbnail(path: &Path, ffmpeg: &OsStr, timeout: Duration) -> Scale ScaleAttempt::Undecodable } +/// What a thumbnail is made from. +enum Fetched { + /// The thumbnail itself, from the server. + Ready(Vec), + /// Nothing: a video with no server thumbnail, and no ffmpeg to take one. + Nothing, + /// A whole image. + Whole(Vec), + Video(VideoSample), +} + +/// The parts of a video its thumbnail needs, downloaded: the start of the +/// file, and for an MP4 or MOV whose index is further in, that index. +struct VideoSample { + /// The whole file's length. + size: u64, + head: Vec, + /// The `moov` box and its offset, when it is not inside `head`. + index: Option<(u64, Vec)>, +} + +impl VideoSample { + /// Whether this could be an MPEG transport stream: one opens on the 0x47 + /// sync byte, and repeats it every 188-byte packet. Only asked of `.ts` + /// files, which are TypeScript source as often as they are video. + fn is_transport_stream(&self) -> bool { + self.head.first() == Some(&0x47) && self.head.get(188).is_none_or(|&byte| byte == 0x47) + } +} + +/// Download what a thumbnail of the video `reader` reads needs. A file of up +/// to [`VIDEO_WHOLE_MAX_BYTES`] comes whole. A larger one brings its first +/// [`VIDEO_HEAD_BYTES`], which is all a stream format (Matroska, WebM, MPEG-TS, +/// AVI) needs for a frame, plus the index of an ISO media file (MP4, MOV, 3GP) +/// written with its index after the media data, which is how most cameras and +/// phones write it. +async fn sample_video(reader: &dyn RevisionRead) -> DriveResult { + let size = reader.size(); + if size <= VIDEO_WHOLE_MAX_BYTES { + let head = reader.read_at(0, size).await?; + return Ok(VideoSample { + size, + head, + index: None, + }); + } + let head = reader.read_at(0, VIDEO_HEAD_BYTES).await?; + let index = match iso_media_index(reader, &head, size).await? { + Some((offset, len)) if offset.saturating_add(len) > head.len() as u64 => { + Some((offset, reader.read_at(offset, len).await?)) + } + _ => None, + }; + Ok(VideoSample { size, head, index }) +} + +/// Where the `moov` box of an ISO media file sits, as `(offset, length)`. +/// `None` for a file that is not one, or whose index is missing, oversized or +/// past [`VIDEO_BOX_WALK_MAX`] boxes. Box headers past `head` are read one at a +/// time, 16 bytes each. +async fn iso_media_index( + reader: &dyn RevisionRead, + head: &[u8], + size: u64, +) -> DriveResult> { + const FIRST_BOXES: [&[u8; 4]; 6] = [b"ftyp", b"moov", b"mdat", b"wide", b"free", b"skip"]; + if !head + .get(4..8) + .is_some_and(|kind| FIRST_BOXES.iter().any(|known| kind == *known)) + { + return Ok(None); + } + let mut offset = 0u64; + for _ in 0..VIDEO_BOX_WALK_MAX { + if offset.saturating_add(8) > size { + break; + } + let header = match usize::try_from(offset) + .ok() + .and_then(|start| head.get(start..start.checked_add(16)?)) + { + Some(header) => header.to_vec(), + None => reader.read_at(offset, 16).await?, + }; + let Some((kind, len)) = iso_box_header(&header, size - offset) else { + break; + }; + if kind == *b"moov" { + return Ok((len <= VIDEO_INDEX_MAX_BYTES).then_some((offset, len))); + } + offset = offset.saturating_add(len); + } + Ok(None) +} + +/// The type and length of the ISO box whose header starts `header`, of a box +/// that may run at most `left` bytes to the end of the file. +fn iso_box_header(header: &[u8], left: u64) -> Option<([u8; 4], u64)> { + let size = u32::from_be_bytes(header.get(0..4)?.try_into().ok()?); + let kind: [u8; 4] = header.get(4..8)?.try_into().ok()?; + let len = match size { + // Runs to the end of the file. + 0 => left, + // The real length follows as 64 bits. + 1 => u64::from_be_bytes(header.get(8..16)?.try_into().ok()?), + len => u64::from(len), + }; + (8..=left).contains(&len).then_some((kind, len)) +} + +/// A thumbnail from one frame of a downloaded [`VideoSample`]. The sample is +/// laid out in a staging file at the offsets it came from, so ffmpeg finds an +/// index where the file's own boxes say it is. The gap between holds no data +/// and costs no disk. +fn video_sample_thumbnail( + sample: &VideoSample, + name: &str, + staging_dir: &Path, + ffmpeg: &OsStr, + timeout: Duration, +) -> ScaleAttempt { + let transport_stream_name = Path::new(name) + .extension() + .is_some_and(|extension| extension.eq_ignore_ascii_case("ts")); + if transport_stream_name && !sample.is_transport_stream() { + return ScaleAttempt::Undecodable; + } + let Some(file) = RawTempFile::create_in(staging_dir, &sample.head, name) else { + return ScaleAttempt::Unavailable; + }; + if let Some((offset, index)) = &sample.index { + let laid_out = OpenOptions::new() + .write(true) + .open(&file.0) + .and_then(|staged| { + staged.write_all_at(index, *offset)?; + staged.set_len(sample.size.max(offset + index.len() as u64)) + }); + if laid_out.is_err() { + return ScaleAttempt::Unavailable; + } + } + video_file_thumbnail(&file.0, ffmpeg, timeout) +} + /// The thumbnail to attach to an upload of the local file at `path`, which is /// named `name` in Drive. Without one, Drive's own apps show a generic icon and /// the gallery has to download the whole file to make its own. @@ -1406,10 +1548,10 @@ impl Core { .map(|item| (item.uid.clone(), item.name.clone())) .collect(); - // Proton only stores server-generated thumbnails for nodes in Photos. - // These requests come exclusively from ordinary Drive, Shared and Trash - // views, so downloading a remote thumbnail here would be a guaranteed - // miss. Generate directly from the full image and cache the result. + // Drive makes no thumbnails itself; a file has one only when its + // uploader attached it, as this client and Proton's apps do. The + // generation step asks for that first, and only makes one from the + // file's content without it. let mut wanted = Vec::new(); let mut seen = HashSet::new(); for (raw, uid, modified) in &parsed { @@ -1560,7 +1702,10 @@ impl Core { return (uid, ThumbAttempt::Cancelled); } let video = is_video_name(&name); - if video && !ffmpeg_available() { + // Without ffmpeg a video can still have its uploader's + // thumbnail, but Photos has asked the server already. + let can_sample = !video || ffmpeg_available(); + if !can_sample && matches!(job, ThumbJob::Photos) { return (uid, ThumbAttempt::Unavailable); } @@ -1609,21 +1754,34 @@ impl Core { return (uid, ThumbAttempt::Cancelled); } - // A video is downloaded whole for one frame, so a long - // recording is not worth it — and would not fit in memory. - if video { - match core.photos().get_node(&uid).await { - Ok(Some(node)) if node_size(&node) > VIDEO_THUMB_MAX_BYTES => { - info!(%uid, size = node_size(&node), "video too large for a local thumbnail"); - return (uid, ThumbAttempt::Undecodable); - } - Ok(Some(_)) => {} - Ok(None) | Err(_) => return (uid, ThumbAttempt::Unavailable), - } - } - let download_uid = uid.clone(); - let download = async move { client.download_file(&download_uid).await }; + let drive = core.drive.clone(); + let download = async move { + // Photos asked the server in one batch already. A + // file view's or a build's file may carry a + // thumbnail its uploader made, which costs one + // small download instead of its content. + if !matches!(job, ThumbJob::Photos) + && let Some(bytes) = drive + .download_thumbnail(&download_uid, ThumbnailType::Thumbnail) + .await? + .filter(|bytes| !bytes.is_empty()) + { + return Ok(Fetched::Ready(bytes)); + } + if !can_sample { + return Ok(Fetched::Nothing); + } + if video { + let reader = drive.open_revision(&download_uid).await?; + sample_video(reader.as_ref()).await.map(Fetched::Video) + } else { + client + .download_file(&download_uid) + .await + .map(Fetched::Whole) + } + }; tokio::pin!(download); let downloaded = match job { ThumbJob::Files(_) => loop { @@ -1661,10 +1819,10 @@ impl Core { let Some(downloaded) = downloaded else { return (uid, ThumbAttempt::Cancelled); }; - let bytes = match downloaded { - Ok(bytes) => bytes, + let fetched = match downloaded { + Ok(fetched) => fetched, Err(e) => { - warn!(%uid, error = %e, "image download for thumbnail failed"); + warn!(%uid, error = %e, "download for a thumbnail failed"); return (uid, ThumbAttempt::Unavailable); } }; @@ -1674,18 +1832,20 @@ impl Core { // Decoding + scaling a 20 MP JPEG is CPU-bound and would // stall the runtime's worker; hand it to the blocking pool. let staging_dir = core.cache.raw_thumbnail_staging_dir().to_path_buf(); - let made = tokio::task::spawn_blocking(move || { - if video { - video_thumbnail( - &bytes, - &name, - &staging_dir, - OsStr::new("ffmpeg"), - FFMPEG_TIMEOUT, - ) - } else { - scale_thumbnail(&bytes, &name, &staging_dir) - } + let made = tokio::task::spawn_blocking(move || match fetched { + Fetched::Video(sample) => video_sample_thumbnail( + &sample, + &name, + &staging_dir, + OsStr::new("ffmpeg"), + FFMPEG_TIMEOUT, + ), + Fetched::Whole(bytes) => scale_thumbnail(&bytes, &name, &staging_dir), + Fetched::Nothing => ScaleAttempt::Unavailable, + Fetched::Ready(bytes) => match ratio_of(&bytes) { + Some(ratio) => ScaleAttempt::Made(GeneratedThumb { bytes, ratio }), + None => ScaleAttempt::Undecodable, + }, }) .await .unwrap_or(ScaleAttempt::Unavailable); @@ -1869,7 +2029,7 @@ impl Core { if seen_folders.insert(entry.uid) { folders.push(folder.join(entry.name)); } - } else if is_thumbnail_image_name(&entry.name) { + } else if is_thumbnail_media_name(&entry.name, Some(entry.size)) { match parse_uid(&entry.uid) { Some(uid) if seen_images.insert(uid.clone()) => { found_here += 1; @@ -2295,15 +2455,19 @@ mod decode_budget_tests { mod thumb_tests { use super::{ RawTempFile, ScaleAttempt, THUMB_EDGE, UPLOAD_IMAGE_MAX_BYTES, UPLOAD_THUMB_MAX_BYTES, - can_make_thumbnail, exiftool_binary, ffmpeg_available, fit_upload_thumb, is_video_name, - ratio_of, scale_thumbnail, scale_thumbnail_with_exiftool, similar_hashes, - thumbnail_build_may_start, upload_thumbnails_with, video_thumbnail, + VIDEO_HEAD_BYTES, VIDEO_WHOLE_MAX_BYTES, VideoSample, can_make_thumbnail, exiftool_binary, + ffmpeg_available, fit_upload_thumb, is_video_name, ratio_of, sample_video, scale_thumbnail, + scale_thumbnail_with_exiftool, similar_hashes, thumbnail_build_may_start, + upload_thumbnails_with, video_sample_thumbnail, }; + use crate::drive::RevisionRead; use pdfs_core::control::{ThumbnailBuildStatus, is_thumbnail_image_name}; use proton_drive_rs::ThumbnailType; + use proton_drive_rs::proton_sdk::error::Result as DriveResult; use std::collections::HashMap; use std::ffi::OsStr; use std::os::unix::fs::PermissionsExt as _; + use std::sync::atomic::{AtomicU64, Ordering}; use std::time::Duration; /// A `width`×`height` JPEG, standing in for a camera photo the server never @@ -2536,6 +2700,199 @@ mod thumb_tests { std::env::temp_dir().join(format!("pdfs-{test}-{}", std::process::id())) } + /// A sample of a video small enough to come whole. + fn whole(bytes: &[u8]) -> VideoSample { + VideoSample { + size: bytes.len() as u64, + head: bytes.to_vec(), + index: None, + } + } + + fn block_on(future: F) -> F::Output { + tokio::runtime::Builder::new_current_thread() + .build() + .unwrap() + .block_on(future) + } + + /// A Drive revision of `size` bytes, zero except for the parts written in, + /// that counts the bytes read from it. Stands for a recording far larger + /// than a test should hold in memory. + struct FakeRevision { + size: u64, + parts: Vec<(u64, Vec)>, + read: AtomicU64, + } + + impl FakeRevision { + fn new(size: u64) -> Self { + Self { + size, + parts: Vec::new(), + read: AtomicU64::new(0), + } + } + + fn with(mut self, offset: u64, bytes: Vec) -> Self { + self.parts.push((offset, bytes)); + self + } + } + + #[async_trait::async_trait] + impl RevisionRead for FakeRevision { + fn size(&self) -> u64 { + self.size + } + + fn block_sizes(&self) -> &[u64] { + &[] + } + + async fn read_at(&self, offset: u64, length: u64) -> DriveResult> { + let end = offset.saturating_add(length).min(self.size); + let mut out = vec![0u8; end.saturating_sub(offset) as usize]; + for (start, bytes) in &self.parts { + let part_end = start + bytes.len() as u64; + let (from, to) = (offset.max(*start), end.min(part_end)); + if from < to { + out[(from - offset) as usize..(to - offset) as usize] + .copy_from_slice(&bytes[(from - start) as usize..(to - start) as usize]); + } + } + self.read.fetch_add(out.len() as u64, Ordering::Relaxed); + Ok(out) + } + } + + /// An ISO media box of `len` bytes, of which only the header is returned. + fn iso_box_header(kind: &[u8; 4], len: u64) -> Vec { + if let Ok(len) = u32::try_from(len) { + [&len.to_be_bytes()[..], kind].concat() + } else { + [&1u32.to_be_bytes()[..], kind, &len.to_be_bytes()[..]].concat() + } + } + + const GIB: u64 = 1024 * 1024 * 1024; + + #[test] + fn a_large_stream_video_downloads_its_head_alone() { + let mut head = vec![0u8; 188 * 2]; + head[0] = 0x47; + head[188] = 0x47; + let revision = FakeRevision::new(9 * GIB).with(0, head); + let sample = block_on(sample_video(&revision)).unwrap(); + assert_eq!(sample.size, 9 * GIB); + assert_eq!(sample.head.len() as u64, VIDEO_HEAD_BYTES); + assert!(sample.index.is_none()); + assert!(sample.is_transport_stream()); + assert_eq!(revision.read.load(Ordering::Relaxed), VIDEO_HEAD_BYTES); + } + + /// A camera MP4 keeps its index after gigabytes of media data. The sample + /// is the head, the box headers on the way, and the index itself. + #[test] + fn a_large_mp4_downloads_its_head_and_its_index() { + let ftyp = [ + iso_box_header(b"ftyp", 24), + b"isom\0\0\0\0mp41isom".to_vec(), + ] + .concat(); + let mdat_len = 6 * GIB; + let moov_at = ftyp.len() as u64 + mdat_len; + let moov = [iso_box_header(b"moov", 4096), vec![7u8; 4088]].concat(); + let size = moov_at + moov.len() as u64; + let revision = FakeRevision::new(size) + .with(0, ftyp.clone()) + .with(ftyp.len() as u64, iso_box_header(b"mdat", mdat_len)) + .with(moov_at, moov.clone()); + + let sample = block_on(sample_video(&revision)).unwrap(); + assert_eq!(sample.index, Some((moov_at, moov))); + assert!( + revision.read.load(Ordering::Relaxed) <= VIDEO_HEAD_BYTES + 4096 + 16, + "read {} bytes", + revision.read.load(Ordering::Relaxed) + ); + } + + #[test] + fn an_mp4_with_its_index_up_front_downloads_its_head_alone() { + let ftyp = [iso_box_header(b"ftyp", 16), b"isom\0\0\0\0".to_vec()].concat(); + let moov = [iso_box_header(b"moov", 64), vec![1u8; 56]].concat(); + let revision = FakeRevision::new(GIB) + .with(0, ftyp.clone()) + .with(ftyp.len() as u64, moov) + .with(80, iso_box_header(b"mdat", GIB - 80)); + let sample = block_on(sample_video(&revision)).unwrap(); + assert!(sample.index.is_none()); + assert_eq!(revision.read.load(Ordering::Relaxed), VIDEO_HEAD_BYTES); + } + + #[test] + fn a_small_video_downloads_whole() { + let revision = FakeRevision::new(VIDEO_WHOLE_MAX_BYTES).with(0, vec![3u8; 64]); + let sample = block_on(sample_video(&revision)).unwrap(); + assert_eq!(sample.head.len() as u64, VIDEO_WHOLE_MAX_BYTES); + assert!(sample.index.is_none()); + } + + /// `.ts` that is TypeScript reaches ffmpeg never: the sync byte is missing, + /// and that is a final answer, not a retry. + #[test] + fn a_ts_without_the_sync_byte_is_no_video() { + let attempt = video_sample_thumbnail( + &whole(b"export const answer = 42;"), + "bundle.ts", + &std::env::temp_dir(), + OsStr::new("pdfs-ffmpeg-deliberately-absent"), + Duration::from_millis(10), + ); + assert!(matches!(attempt, ScaleAttempt::Undecodable)); + } + + /// ffmpeg reads the index where the file's own boxes put it, so the staging + /// file has the full length and the index at its offset. + #[test] + fn the_index_is_staged_at_its_own_offset() { + let tmp = scratch("video-index"); + let frame = tmp.join("frame.jpg"); + std::fs::create_dir_all(&tmp).unwrap(); + std::fs::write(&frame, jpeg(640, 360)).unwrap(); + let size: u64 = 3 * GIB; + let at: u64 = size - 4096; + // Arguments: -nostdin -loglevel error -ss -i … + let ffmpeg = fake_ffmpeg( + &tmp, + &format!( + "[ \"$(stat -c %s \"$7\")\" = {size} ] && \ + [ \"$(tail -c +{} \"$7\" | head -c 4)\" = moov ] && cat '{}'", + // The box type, after its 4-byte length; `tail` counts from 1. + at + 5, + frame.display() + ), + ); + let sample = VideoSample { + size, + head: vec![0u8; 1024], + index: Some(( + at, + [iso_box_header(b"moov", 4096), vec![0u8; 4088]].concat(), + )), + }; + let attempt = video_sample_thumbnail( + &sample, + "clip.mp4", + &tmp, + ffmpeg.as_os_str(), + Duration::from_secs(10), + ); + std::fs::remove_dir_all(&tmp).unwrap(); + assert!(matches!(attempt, ScaleAttempt::Made(_))); + } + #[test] fn a_video_frame_becomes_a_thumbnail() { let tmp = scratch("video-frame"); @@ -2544,8 +2901,8 @@ mod thumb_tests { std::fs::write(&frame, jpeg(1080, 1920)).unwrap(); let ffmpeg = fake_ffmpeg(&tmp, &format!("cat '{}'", frame.display())); - let ScaleAttempt::Made(thumb) = video_thumbnail( - b"video bytes", + let ScaleAttempt::Made(thumb) = video_sample_thumbnail( + &whole(b"video bytes"), "clip.mp4", &tmp, ffmpeg.as_os_str(), @@ -2561,8 +2918,8 @@ mod thumb_tests { fn a_video_ffmpeg_cannot_read_is_a_permanent_miss() { let tmp = scratch("video-broken"); let ffmpeg = fake_ffmpeg(&tmp, "exit 1"); - let attempt = video_thumbnail( - b"not a video", + let attempt = video_sample_thumbnail( + &whole(b"not a video"), "clip.mp4", &tmp, ffmpeg.as_os_str(), @@ -2574,8 +2931,8 @@ mod thumb_tests { #[test] fn missing_ffmpeg_is_retryable() { - let attempt = video_thumbnail( - b"video bytes", + let attempt = video_sample_thumbnail( + &whole(b"video bytes"), "clip.mp4", &std::env::temp_dir(), OsStr::new("pdfs-ffmpeg-deliberately-absent"), @@ -2591,9 +2948,12 @@ mod thumb_tests { let path = std::env::var_os("PDFS_VIDEO_FIXTURE").expect("PDFS_VIDEO_FIXTURE"); let path = std::path::PathBuf::from(path); let name = path.file_name().unwrap().to_string_lossy(); - let bytes = std::fs::read(&path).unwrap(); - let ScaleAttempt::Made(thumb) = video_thumbnail( - &bytes, + // Through the same partial download a Drive video gets. + let revision = FakeRevision::new(std::fs::read(&path).unwrap().len() as u64) + .with(0, std::fs::read(&path).unwrap()); + let sample = block_on(sample_video(&revision)).unwrap(); + let ScaleAttempt::Made(thumb) = video_sample_thumbnail( + &sample, &name, &std::env::temp_dir(), OsStr::new("ffmpeg"), diff --git a/crates/pdfs-fuse/src/sim/daemon.rs b/crates/pdfs-fuse/src/sim/daemon.rs index d1f2d41..4e33268 100644 --- a/crates/pdfs-fuse/src/sim/daemon.rs +++ b/crates/pdfs-fuse/src/sim/daemon.rs @@ -3619,4 +3619,110 @@ mod tests { assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); let _ = std::fs::remove_dir_all(&dir); } + + /// A video in My files gets a thumbnail from a frame of its own, but a + /// recording can be gigabytes: only its start, and an MP4's index, are + /// downloaded for it. A video with a thumbnail from its uploader is not + /// downloaded at all, and a `.ts` that is TypeScript gets no thumbnail. + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_video_thumbnail_downloads_a_small_part_of_the_video() { + if std::process::Command::new("ffmpeg") + .arg("-version") + .output() + .is_err() + { + eprintln!("skipped: needs ffmpeg"); + return; + } + let dir = scratch("video-thumbs"); + std::fs::create_dir_all(&dir).unwrap(); + // Twenty seconds at 30 Mbit/s: larger than a thumbnail downloads whole. + // An MP4 written this way has its index at the end. + let encode = |name: &str| { + let path = dir.join(name); + let status = std::process::Command::new("ffmpeg") + .args(["-nostdin", "-loglevel", "error", "-y", "-f", "lavfi"]) + .args(["-i", "testsrc2=size=1280x720:rate=30", "-t", "20"]) + .args(["-c:v", "libx264", "-preset", "ultrafast"]) + .args(["-b:v", "30M", "-maxrate", "30M", "-bufsize", "30M"]) + .arg(&path) + .status() + .unwrap(); + assert!(status.success()); + let bytes = std::fs::read(&path).unwrap(); + std::fs::remove_file(&path).unwrap(); + assert!(bytes.len() > 30 << 20, "{name} is {} bytes", bytes.len()); + bytes + }; + let (recording, clip) = (encode("recording.ts"), encode("clip.mp4")); + let source = b"export const answer = 42;\n".repeat(64 * 1024); + + let drive = FakeDrive::new(); + drive.device().write("recording.ts", &recording); + drive.device().write("clip.mp4", &clip); + drive.device().write("app.ts", &source); + let phone = drive.device().write("phone.mp4", &clip); + let mut frame = Vec::new(); + image::codecs::jpeg::JpegEncoder::new(&mut frame) + .encode_image(&image::RgbImage::new(320, 180)) + .unwrap(); + let client = drive.client(1, Faults::lan()); + client.set_thumbnail(&phone, frame); + let daemon = Daemon::start(&dir.join("daemon"), client.clone()).unwrap(); + let Ok(Response::Entries { entries }) = daemon.request(&Request::ListDir { + path: String::new(), + }) else { + panic!("listing"); + }; + let items: Vec = entries + .iter() + .filter(|entry| !entry.is_dir) + .map(|entry| control::FileThumbRequest { + uid: entry.uid.clone(), + modified: entry.modified, + name: entry.name.clone(), + }) + .collect(); + let Ok(Response::FileThumbGeneration { generation }) = + daemon.request(&Request::ReserveFileThumbGeneration) + else { + panic!("generation"); + }; + let read_before = client.content_read(); + + let mut paths = std::collections::HashMap::new(); + let settled = wait_until(Duration::from_secs(120), || { + let Ok(Response::Thumbs { items: replies }) = daemon.request(&Request::FileThumbs { + items: items.clone(), + generation, + }) else { + return false; + }; + paths = replies + .iter() + .filter_map(|reply| { + let name = &items.iter().find(|item| item.uid == reply.uid)?.name; + Some((name.clone(), (reply.path.clone(), reply.pending))) + }) + .collect(); + paths.values().all(|(_, pending)| !pending) && paths.len() == 4 + }); + assert!(settled, "{paths:?}"); + let read = client.content_read() - read_before; + + for name in ["recording.ts", "clip.mp4", "phone.mp4"] { + assert!(paths[name].0.is_some(), "{name} has a thumbnail: {paths:?}"); + } + assert_eq!(paths["app.ts"].0, None, "TypeScript is no video"); + // Two 16 MiB heads, one MP4 index and the TypeScript file, and nothing + // of the video that came with a thumbnail. + assert!( + read < 34 << 20, + "downloaded {} MiB for three thumbnails", + read >> 20 + ); + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } } diff --git a/crates/pdfs-fuse/src/sim/fake_drive.rs b/crates/pdfs-fuse/src/sim/fake_drive.rs index cbfc18e..a9869e8 100644 --- a/crates/pdfs-fuse/src/sim/fake_drive.rs +++ b/crates/pdfs-fuse/src/sim/fake_drive.rs @@ -62,7 +62,7 @@ use proton_drive_rs::proton_sdk::ids::{ }; use proton_drive_rs::{ AvailableNameTarget, Device as Computer, DeviceType, DriveEvent, DriveEventScopeId, Node, - NodeKind, NodeMoveItem, RevisionState, Thumbnail, + NodeKind, NodeMoveItem, RevisionState, Thumbnail, ThumbnailType, }; use sha1::{Digest as _, Sha1}; @@ -396,6 +396,8 @@ impl FakeDrive { hold_answer: Mutex::new(None), hold_trash: Mutex::new(None), hold_download: Mutex::new(None), + thumbnails: Mutex::new(HashMap::new()), + content_read: AtomicU64::new(0), hold_any_landing: AtomicBool::new(false), hold_landing: Mutex::new(None), drop_after_create: AtomicBool::new(false), @@ -677,6 +679,10 @@ struct ClientInner { hold_trash: Mutex>>, /// The download [`FakeClient::hold_next_download`] is waiting for. hold_download: Mutex>>, + /// Thumbnails set by [`FakeClient::set_thumbnail`]. + thumbnails: Mutex>>, + /// File content bytes served, by downloads and ranged reads alike. + content_read: AtomicU64, /// The landing [`FakeClient::hold_next_landing`] is waiting for. hold_landing: Mutex>>, /// Set by [`FakeClient::hold_next_landing_of_any`]: hold whichever node @@ -821,6 +827,16 @@ impl FakeClient { /// Hold the next download of `uid`'s content once Drive has answered it, /// before the bytes reach the daemon, until the answer is dropped. + /// Give `uid` a server thumbnail, as an upload that carried one would. + pub(crate) fn set_thumbnail(&self, uid: &NodeUid, bytes: Vec) { + self.0.thumbnails.lock().insert(uid.clone(), bytes); + } + + /// File content bytes served so far, by whole downloads and ranged reads. + pub(crate) fn content_read(&self) -> u64 { + self.0.content_read.load(Ordering::SeqCst) + } + pub(crate) fn hold_next_download(&self, uid: &NodeUid) -> Held { let state = Arc::new(HoldState { uid: uid.clone(), @@ -1475,6 +1491,21 @@ impl DriveApi for FakeClient { })) } + async fn download_thumbnail( + &self, + uid: &NodeUid, + _thumbnail_type: ThumbnailType, + ) -> Result>> { + self.request(false, |server| { + server + .current(uid) + .map(|_| ()) + .ok_or_else(|| api(ResponseCode::DoesNotExist, "file not found")) + }) + .await?; + Ok(self.0.thumbnails.lock().get(uid).cloned()) + } + async fn download_file_to_dyn( &self, uid: &NodeUid, @@ -1490,6 +1521,9 @@ impl DriveApi for FakeClient { .await?; self.wait_if_held(&self.0.hold_download, std::slice::from_ref(uid)) .await; + self.0 + .content_read + .fetch_add(content.len() as u64, Ordering::SeqCst); output.write_all(&content).map_err(io_error) } @@ -1733,13 +1767,19 @@ impl RevisionRead for FakeRevision { async fn read_at(&self, offset: u64, length: u64) -> Result> { let content = self.content.clone(); - self.client + let read = self + .client .request(false, move |_| { let start = (offset as usize).min(content.len()); let end = (offset.saturating_add(length) as usize).min(content.len()); Ok(content[start..end].to_vec()) }) - .await + .await?; + self.client + .0 + .content_read + .fetch_add(read.len() as u64, Ordering::SeqCst); + Ok(read) } } diff --git a/crates/pdfs-gui/src/app/pages/browser.rs b/crates/pdfs-gui/src/app/pages/browser.rs index b24130e..59ded50 100644 --- a/crates/pdfs-gui/src/app/pages/browser.rs +++ b/crates/pdfs-gui/src/app/pages/browser.rs @@ -1728,8 +1728,9 @@ fn repaint_thumbnail_build(ui: &Rc, status: &ThumbnailBuildStatus) { let text = if status.scanning { ui.browser.thumbnail_progress.pulse(); let folders = ngettext_f("{n} folder", "{n} folders", status.folders_scanned, &[]); - let images = ngettext_f("{n} image", "{n} images", status.images_found, &[]); - // Translators: {root} is a folder path or "Proton Drive"; {folders} and {images} are counts such as "3 folders" and "12 images". + // Translators: a count of images and videos that can have a thumbnail. + let images = ngettext_f("{n} file", "{n} files", status.images_found, &[]); + // Translators: {root} is a folder path or "Proton Drive"; {folders} and {images} are counts such as "3 folders" and "12 files". gettext_f( "Scanning {root}… {folders}, {images}", &[("root", root), ("folders", &folders), ("images", &images)], @@ -1743,7 +1744,7 @@ fn repaint_thumbnail_build(ui: &Rc, status: &ThumbnailBuildStatus) { ui.browser .thumbnail_progress .set_fraction(fraction.clamp(0.0, 1.0)); - // Translators: {root} is a folder path or "Proton Drive"; {done} and {total} are image counts. + // Translators: {root} is a folder path or "Proton Drive"; {done} and {total} are counts of images and videos. gettext_f( "Building thumbnails in {root}… {done} of {total}", &[ @@ -1756,17 +1757,17 @@ fn repaint_thumbnail_build(ui: &Rc, status: &ThumbnailBuildStatus) { ui.browser.thumbnail_progress.set_fraction(1.0); let available = status.completed.saturating_sub(status.failed); match status.failed { - // Translators: {root} is a folder path or "Proton Drive". + // Translators: {root} is a folder path or "Proton Drive"; {n} counts images and videos. 0 => ngettext_f( - "Thumbnails ready for {n} image in {root}", - "Thumbnails ready for {n} images in {root}", + "Thumbnails ready for {n} file in {root}", + "Thumbnails ready for {n} files in {root}", available, &[("root", root)], ), - // Translators: {root} is a folder path or "Proton Drive"; {failed} is how many images could not get a thumbnail. + // Translators: {root} is a folder path or "Proton Drive"; {failed} is how many images and videos could not get a thumbnail. failed => ngettext_f( - "Thumbnails ready for {n} image in {root}; {failed} unavailable", - "Thumbnails ready for {n} images in {root}; {failed} unavailable", + "Thumbnails ready for {n} file in {root}; {failed} unavailable", + "Thumbnails ready for {n} files in {root}; {failed} unavailable", available, &[("root", root), ("failed", &failed.to_string())], ), @@ -2765,6 +2766,11 @@ pub(crate) fn icon_base_for(entry: &DirEntry) -> &'static str { if entry.is_dir { return "folder"; } + // Every video type, including a `.ts` recording, which by its name alone + // is TypeScript. + if pdfs_core::control::is_video_file_name(&entry.name, Some(entry.size)) { + return "video-x-generic"; + } let ext = entry .name .rsplit('.') @@ -2775,7 +2781,6 @@ pub(crate) fn icon_base_for(entry: &DirEntry) -> &'static str { "png" | "jpg" | "jpeg" | "gif" | "webp" | "bmp" | "svg" | "heic" | "tiff" => { "image-x-generic" } - "mp4" | "mkv" | "mov" | "avi" | "webm" | "m4v" => "video-x-generic", "mp3" | "flac" | "wav" | "ogg" | "opus" | "m4a" => "audio-x-generic", "pdf" | "doc" | "docx" | "odt" => "x-office-document", "xls" | "xlsx" | "ods" | "csv" => "x-office-spreadsheet", @@ -3122,7 +3127,7 @@ fn listing_summary(files: usize, folders: usize, file_bytes: u64) -> String { #[cfg(test)] mod tests { use super::{ - MoveTarget, badge_for, copy_target_allowed, hit_location, listing_summary, + MoveTarget, badge_for, copy_target_allowed, hit_location, icon_base_for, listing_summary, move_target_allowed, show_thumbnail_build_progress, sort_entries, }; use pdfs_core::config::{FileSort, FilesView}; @@ -3149,6 +3154,32 @@ mod tests { } } + #[test] + fn every_video_type_gets_the_video_icon() { + const MIB: u64 = 1024 * 1024; + for name in [ + "clip.mp4", + "clip.MKV", + "broadcast.m2ts", + "camera.mts", + "old.flv", + ] { + assert_eq!( + icon_base_for(&entry(name, false, 10, 0)), + "video-x-generic", + "{name}" + ); + } + assert_eq!( + icon_base_for(&entry("recording.ts", false, 900 * MIB, 0)), + "video-x-generic" + ); + assert_eq!( + icon_base_for(&entry("app.ts", false, 4096, 0)), + "text-x-generic" + ); + } + fn names(entries: &[DirEntry]) -> Vec<&str> { entries.iter().map(|e| e.name.as_str()).collect() } diff --git a/crates/pdfs-gui/src/app/widgets/thumbnails.rs b/crates/pdfs-gui/src/app/widgets/thumbnails.rs index d874940..ad9abd4 100644 --- a/crates/pdfs-gui/src/app/widgets/thumbnails.rs +++ b/crates/pdfs-gui/src/app/widgets/thumbnails.rs @@ -1,4 +1,4 @@ -//! Shared thumbnails for ordinary Drive image files. +//! Shared thumbnails for ordinary Drive image and video files. //! //! The Photos gallery has timeline-specific batching and aspect-ratio state. //! File listings need a smaller, reusable surface: one loader backs My files, @@ -6,7 +6,7 @@ //! so a replaced image never flashes its previous contents. use crate::*; -use pdfs_core::control::{FileThumbRequest, is_thumbnail_image_name}; +use pdfs_core::control::{FileThumbRequest, is_thumbnail_media_name, is_video_file_name}; const THUMB_BATCH: usize = 32; const THUMB_CACHE_MAX: usize = 256; @@ -125,6 +125,18 @@ pub(crate) fn file_thumbnail_widget(size: i32, fallback_size: i32) -> gtk4::Over .build(); picture.add_css_class("file-thumbnail"); + // Over a video's frame, so it does not pass for a photo. + let play = gtk4::Image::builder() + .icon_name("media-playback-start-symbolic") + .pixel_size(16) + .halign(gtk4::Align::Center) + .valign(gtk4::Align::Center) + .can_target(false) + .visible(false) + .build(); + play.add_css_class("photo-video-badge"); + play.add_css_class("photo-video-badge-small"); + let overlay = gtk4::Overlay::new(); overlay.set_width_request(size); overlay.set_height_request(size); @@ -133,9 +145,21 @@ pub(crate) fn file_thumbnail_widget(size: i32, fallback_size: i32) -> gtk4::Over overlay.set_overflow(gtk4::Overflow::Hidden); overlay.set_child(Some(&fallback)); overlay.add_overlay(&picture); + overlay.add_overlay(&play); overlay } +/// The play badge [`file_thumbnail_widget`] puts after `picture`. +fn play_badge(picture: >k4::Picture) -> Option { + picture + .next_sibling() + .and_downcast::() + .filter(|image| image.has_css_class("photo-video-badge")) +} + +/// Marks a play badge to show once its video's frame is painted. +const VIDEO_BADGE: &str = "video"; + /// Resize an existing thumbnail surface. Grid rows are recycled, so changing /// these requests in place and rebinding the model is enough to implement the /// status-bar zoom without downloading or decoding an image again. @@ -179,6 +203,16 @@ pub(crate) fn bind_file_thumbnail( fallback.set_visible(true); picture.set_visible(false); picture.set_paintable(gtk4::gdk::Paintable::NONE); + // List rows are too small for a badge; their icon says video already. + let video = !entry.is_dir && is_video_file_name(&entry.name, Some(entry.size)); + if let Some(play) = play_badge(&picture) { + play.set_visible(false); + play.set_widget_name(if video && !symbolic_fallback { + VIDEO_BADGE + } else { + "" + }); + } // The widget name is a cheap binding token. List factories recycle their // children; a reply for the previous entry must not paint into the new one. @@ -186,7 +220,10 @@ pub(crate) fn bind_file_thumbnail( picture.set_widget_name(&key); remove_waiter(ui, &picture); - if entry.is_dir || !is_image_name(&entry.name) || entry.uid.is_empty() { + if entry.is_dir + || !is_thumbnail_media_name(&entry.name, Some(entry.size)) + || entry.uid.is_empty() + { return; } if let Some(texture) = ui.file_thumbs.textures.borrow().get(&key) { @@ -214,12 +251,6 @@ pub(crate) fn bind_file_thumbnail( schedule_file_thumbs(ui); } -/// Whether the file name denotes an image format for which Proton or the local -/// decoder can reasonably provide a thumbnail. -pub(crate) fn is_image_name(name: &str) -> bool { - is_thumbnail_image_name(name) -} - fn thumbnail_key(uid: &str, modified: i64) -> String { format!("{uid}:{modified}") } @@ -238,6 +269,9 @@ fn paint(picture: >k4::Picture, key: &str, texture: >k4::gdk::Texture) { } picture.set_paintable(Some(texture)); picture.set_visible(true); + if let Some(play) = play_badge(picture) { + play.set_visible(play.widget_name() == VIDEO_BADGE); + } if let Some(overlay) = picture.parent().and_downcast::() && let Some(fallback) = overlay.child().and_downcast::() { @@ -413,7 +447,11 @@ fn retry_file_thumbs(ui: &Rc, items: Vec) { #[cfg(test)] mod tests { - use super::{ReplyDisposition, is_image_name, reply_disposition}; + use super::{ReplyDisposition, reply_disposition}; + + fn is_image_name(name: &str) -> bool { + pdfs_core::control::is_thumbnail_image_name(name) + } #[test] fn image_extensions_are_case_insensitive_and_specific() { diff --git a/crates/pdfs-gui/src/hud/preview.rs b/crates/pdfs-gui/src/hud/preview.rs index 7314dad..e14677a 100644 --- a/crates/pdfs-gui/src/hud/preview.rs +++ b/crates/pdfs-gui/src/hud/preview.rs @@ -10,7 +10,7 @@ use std::time::Duration; use adw::prelude::*; use gtk4::{gio, glib}; -use super::row::{fill_slot, thumb_slot}; +use super::row::{content_type_for, fill_slot, thumb_slot}; use super::thumbs::Thumbs; use crate::{Hit, dates, gettext, human_bytes, pgettext}; @@ -235,7 +235,7 @@ impl Preview { let content_type = if hit.is_dir() { glib::GString::from("inode/directory") } else { - gio::functions::content_type_guess(Some(hit.name()), None).0 + content_type_for(hit.name(), hit.size()) }; self.kind .set_label(&gio::functions::content_type_get_description(&content_type)); diff --git a/crates/pdfs-gui/src/hud/row.rs b/crates/pdfs-gui/src/hud/row.rs index 719d64a..e1c26dd 100644 --- a/crates/pdfs-gui/src/hud/row.rs +++ b/crates/pdfs-gui/src/hud/row.rs @@ -6,7 +6,7 @@ use std::path::{Path, PathBuf}; use std::rc::Rc; use adw::prelude::*; -use gtk4::{gdk, gio}; +use gtk4::{gdk, gio, glib}; use super::highlight; use super::thumbs::Thumbs; @@ -53,7 +53,7 @@ pub(crate) fn fill_slot(slot: >k4::Overlay, hit: &Hit, thumbs: &Rc, mo let Some(picture) = fallback.next_sibling().and_downcast::() else { return; }; - fallback.set_from_gicon(&icon_for(hit.name(), hit.is_dir())); + fallback.set_from_gicon(&icon_for(hit.name(), hit.is_dir(), hit.size())); fallback.set_visible(true); picture.set_visible(false); picture.set_paintable(gdk::Paintable::NONE); @@ -63,7 +63,7 @@ pub(crate) fn fill_slot(slot: >k4::Overlay, hit: &Hit, thumbs: &Rc, mo /// The desktop's own full-colour icon for a file name, so results look like /// the user's file manager. Folders are Proton's purple ones while the Proton /// theme is on, as in the app's browser. -pub(crate) fn icon_for(name: &str, is_dir: bool) -> gio::Icon { +pub(crate) fn icon_for(name: &str, is_dir: bool, size: u64) -> gio::Icon { if is_dir { let folder = if proton_theme_active() { "pdfs-proton-folder" @@ -72,8 +72,21 @@ pub(crate) fn icon_for(name: &str, is_dir: bool) -> gio::Icon { }; return gio::ThemedIcon::new(folder).upcast(); } - let (content_type, _uncertain) = gio::functions::content_type_guess(Some(name), None); - gio::functions::content_type_get_icon(&content_type) + gio::functions::content_type_get_icon(&content_type_for(name, size)) +} + +/// The content type of a file named `name` of `size` bytes, guessed from the +/// name. GIO takes every `.ts` for TypeScript (or Qt translations); a +/// recording's size says otherwise (see +/// [`is_video_file_name`](pdfs_core::control::is_video_file_name)). +pub(crate) fn content_type_for(name: &str, size: u64) -> glib::GString { + let transport_stream = std::path::Path::new(name) + .extension() + .is_some_and(|extension| extension.eq_ignore_ascii_case("ts")); + if transport_stream && pdfs_core::control::is_video_file_name(name, Some(size)) { + return glib::GString::from("video/mp2t"); + } + gio::functions::content_type_guess(Some(name), None).0 } /// The sync badge of a Drive file, as in the app's browser: pinned, cached, diff --git a/crates/pdfs-gui/src/hud/thumbs.rs b/crates/pdfs-gui/src/hud/thumbs.rs index 1e66df4..93bcbe1 100644 --- a/crates/pdfs-gui/src/hud/thumbs.rs +++ b/crates/pdfs-gui/src/hud/thumbs.rs @@ -9,8 +9,8 @@ //! matches the file's; //! 2. for local images, decoding the file itself, and writing the result back //! to that cache for the next time and for every other application; -//! 3. for Drive images, the daemon's `FileThumbs`, batched after a short quiet -//! period. +//! 3. for Drive images and videos, the daemon's `FileThumbs`, batched after a +//! short quiet period. //! //! Workers hand back `gdk::Texture`s, never a `Pixbuf`, which may not cross //! threads. Each job carries the render epoch it was queued in, and workers @@ -30,7 +30,9 @@ use gtk4::gdk_pixbuf::Pixbuf; use gtk4::prelude::*; use gtk4::{gdk, glib}; -use pdfs_core::control::{FileThumbRequest, Request, Response, is_thumbnail_image_name}; +use pdfs_core::control::{ + FileThumbRequest, Request, Response, is_thumbnail_image_name, is_thumbnail_media_name, +}; use crate::{Hit, spawn_request}; @@ -165,7 +167,13 @@ impl Thumbs { // The widget name binds the picture to one key: a late reply for // another hit must not paint into it. picture.set_widget_name(&key); - if hit.is_dir() || !is_thumbnail_image_name(hit.name()) { + // A video's frame comes from the daemon, which has ffmpeg's help; a + // local video has only what another application cached. + let thumbnailed = match hit { + Hit::Drive(drive) => is_thumbnail_media_name(&drive.name, Some(drive.size)), + Hit::Local(_) => is_thumbnail_image_name(hit.name()), + }; + if hit.is_dir() || !thumbnailed { return; } if matches!(hit, Hit::Drive(drive) if drive.uid.is_empty()) { diff --git a/crates/pdfs-gui/src/query.rs b/crates/pdfs-gui/src/query.rs index e91e85a..5e6696e 100644 --- a/crates/pdfs-gui/src/query.rs +++ b/crates/pdfs-gui/src/query.rs @@ -94,7 +94,7 @@ pub(crate) fn icon_name(hit: &Hit) -> String { let name = hit.name(); if is_image(name) { "image-x-generic" - } else if is_media(name) { + } else if is_media(name) || pdfs_core::control::is_video_file_name(name, Some(hit.size())) { "video-x-generic" } else if is_document(name) { "text-x-generic" diff --git a/docs/BUGS.md b/docs/BUGS.md index 9b2155e..2338590 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -109,6 +109,7 @@ a live account since. | Entry | Title | |---|---| +| [B283](#b283--videos-have-no-thumbnail-outside-photos-and-a-ts-recording-looks-like-source-code) | Videos have no thumbnail outside Photos, and a `.ts` recording looks like source code | | [B280](#b280--uploading-a-batch-of-large-photos-swaps-the-machine-until-the-daemon-is-killed) | Uploading a batch of large photos swaps the machine until the daemon is killed | | [B279](#b279--after-a-watchdog-kill-the-mount-never-comes-back) | After a watchdog kill the mount never comes back | | [B278](#b278--sync-list-and-devices-list-show-the-last-sync-as-epoch-seconds) | `sync list` and `devices list` show the last sync as epoch seconds | @@ -383,6 +384,51 @@ a live account since. Newest first. +### B283 — Videos have no thumbnail outside Photos, and a `.ts` recording looks like source code + +**Status:** Fixed, not verified live +**Found:** 2026-11-14, from a user report: large `.ts` video recordings in My files showed a text +icon, and no video in My files had a thumbnail although the same videos had one in Photos. +**Where:** `is_video_file_name` in `crates/pdfs-core/src/control.rs`; `generate_thumbs` and +`sample_video` in `crates/pdfs-fuse/src/photos.rs`; `bind_file_thumbnail` in +`crates/pdfs-gui/src/app/widgets/thumbnails.rs` + +**Repro:** Put an `.mp4` and a recorded `.ts` of a few GB in My files and open the folder in the +app's grid view. Both show a generic icon, and the `.ts` shows a text one. + +**Cause.** Four things: +- File views asked the daemon for thumbnails of images only (`is_thumbnail_image_name`), so a + video was never asked for. +- `.ts` is TypeScript as often as it is an MPEG transport stream. Drive stores both as + `application/octet-stream`, and every place that names a file's type went by the extension: + the browser's icon list had no `.ts`, GIO guesses text, and the opener's `@text` class listed + `.ts`. +- The daemon downloaded a video whole into memory for one frame, so it refused anything over + 256 MiB, and the size check behind that refusal asked the Photos client, which knows nothing + of a My files node. +- `file_thumbs` never asked for the thumbnail an uploader attached, on the belief that only + Photos nodes have one. This client attaches one to every upload it can make one for. + +**Fix.** `is_video_file_name(name, size)` is the one rule: a video extension, and for `.ts` a +size of at least 1 MiB. The browser icon, the thumbnail gate, the launcher's icon and type, and +the opener's classes use it. For a file view, the daemon first asks Drive for the file's own +thumbnail. Without one, a video of up to 24 MiB is downloaded whole. A larger one brings its first +16 MiB, and for an MP4 or MOV whose `moov` box lies further in, the box headers on the way and +that box. The parts are laid out at their offsets in a sparse staging file, which ffmpeg reads. +A `.ts` whose head lacks the 0x47 sync byte is recorded as having no thumbnail. + +**Test:** `a_ts_file_is_a_video_only_at_the_size_of_one` and +`listings_thumbnail_images_and_videos` in `crates/pdfs-core/src/control.rs`; +`a_ts_file_opens_as_media_or_text_by_its_size` in `crates/pdfs-core/src/opener.rs`; +`a_large_mp4_downloads_its_head_and_its_index` and the other `sample_video` tests in +`crates/pdfs-fuse/src/photos.rs`; the simulation +`a_video_thumbnail_downloads_a_small_part_of_the_video`, which reads under 34 MiB for two +videos of over 70 MiB and takes nothing from a video with an uploader's thumbnail. +`real_video_fixture_yields_a_frame` passed on 2026-11-14 with ffmpeg 9.0 for a 46 MB MP4 with its +index at the end, an MPEG-TS and an MKV. + +--- + ### B280 — Uploading a batch of large photos swaps the machine until the daemon is killed **Status:** Fixed, not verified live diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 9d3637e..9a10662 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -32,6 +32,20 @@ Existing folders remain device backups; older builds cannot open the upgraded da My files folder. The first sync preserves one-sided files and differing versions (#67). Attachments stay in mirror mode, are excluded from device profiles, and cannot delete the remote root when syncing is stopped. +- **Video thumbnails in My files, Shared, Trash and the launcher**, as in Photos, with a play + badge in the grid. A video's thumbnail is the one its uploader attached when it has one. + Otherwise the daemon takes a frame with ffmpeg from the start of the file, plus an MP4's + index, and never downloads more than about 16 MiB of a video for it, however large the + video is. **Build Thumbnails** covers videos too (B283). + +### Fixed + +- Large `.ts` recordings (MPEG transport streams) show and open as videos: the video icon, a + thumbnail, and the `@media` open rule rather than `@text`. A `.ts` of 1 MiB or more counts + as a video, a smaller one stays TypeScript source, and the daemon checks the stream's sync + byte before it takes a frame (B283). +- A video over 256 MiB never got a thumbnail, and a smaller one was downloaded whole into + memory for one frame (B283). ## [3.7.0] — 2026-11-02 diff --git a/po/de.po b/po/de.po index bf0a2c0..1fd9f3c 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -62,9 +62,9 @@ msgstr "%A, %-d. %B %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -246,21 +246,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -338,7 +338,7 @@ msgid "Back / forward" msgstr "Zurück / Vor" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Übergeordneter Ordner" @@ -348,9 +348,9 @@ msgstr "Raster / Liste" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Umbenennen" @@ -569,9 +569,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -592,8 +592,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -744,7 +744,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Ordner konnten nicht wiederhergestellt werden" @@ -1333,24 +1333,24 @@ msgstr "Alben konnten nicht geladen werden" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1402,7 +1402,7 @@ msgid "Album name" msgstr "Albumname" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Erstellen" @@ -1529,7 +1529,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Neuer Ordner" @@ -1622,7 +1622,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Nur diesen Ordner durchsuchen" @@ -1678,10 +1678,10 @@ msgstr "Verschieben in den Papierkorb fehlgeschlagen" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1945,293 +1945,16 @@ msgstr "" "Der Proton-Drive-Dienst meldet keinen Fortschritt der Vorschaubilder mehr." #: crates/pdfs-gui/src/app/pages/browser.rs:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "{root} wird durchsucht … {folders}, {images}" - -#: 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: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: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] "" -"Vorschaubilder für {n} Bild in {root} bereit; {failed} nicht verfügbar" -msgstr[1] "" -"Vorschaubilder für {n} Bilder in {root} bereit; {failed} nicht verfügbar" - -#: 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:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Neuer Name" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Umbenennen fehlgeschlagen" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "„{name}“ kopieren" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "Dieser Ordner konnte nicht gelesen werden." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Nach {place} verschoben" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Ordnername" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Ordner konnte nicht erstellt werden" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "Dateien hochladen" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "Ordner hochladen" - -#: 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:2635 -msgid "Uploading…" -msgstr "Wird hochgeladen …" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "Anzeigen" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Ordner nicht verfügbar" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Überall suchen" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Suche nach „{query}“." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary} – Suchergebnisse" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Keine Treffer" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2239,17 +1962,287 @@ msgid_plural "{n} files" msgstr[0] "{n} Datei" msgstr[1] "{n} Dateien" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "{root} wird durchsucht … {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Vorschaubilder für {n} Datei in {root} bereit" +msgstr[1] "Vorschaubilder für {n} Dateien in {root} bereit" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Vorschaubilder für {n} Datei in {root} bereit; {failed} nicht verfügbar" +msgstr[1] "Vorschaubilder für {n} Dateien in {root} bereit; {failed} nicht verfügbar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Neuer Name" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Umbenannt in „{name}“" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Umbenennen fehlgeschlagen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "„{name}“ verschieben" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Den Zielordner auswählen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Hierher verschieben" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "„{name}“ kopieren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Den Zielordner für die Kopie auswählen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Hierher kopieren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Speicherorte" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Dieser Ordner konnte nicht gelesen werden." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "Hier gibt es keine Ordner." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Verschieben fehlgeschlagen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Nach {place} verschoben" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Kopieren fehlgeschlagen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Nach {place} kopiert" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "„{name}“" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Einen Ordner im aktuellen Verzeichnis erstellen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Ordnername" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "„{name}“ erstellt" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Ordner konnte nicht erstellt werden" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Dateien hochladen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Ordner hochladen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Hochladen fehlgeschlagen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Wird hochgeladen …" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Anzeigen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Nach „{name}“ verschoben" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Ordner nicht verfügbar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Dieser Ordner konnte nicht geöffnet werden" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Überall suchen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Suche läuft …" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Suche nach „{query}“." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary} – Suchergebnisse" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Keine Treffer" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +msgid "No files or folders match that search." +msgstr "Keine Dateien oder Ordner entsprechen dieser Suche." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2330,98 +2323,98 @@ msgstr "{platform} · letzte Sicherung {time}" msgid "{platform} · no backups yet" msgstr "{platform} · noch keine Sicherungen" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Noch keine Ordner gesichert" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} Ordner gesichert" msgstr[1] "{n} Ordner gesichert" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} wartet auf die erste Synchronisierung" msgstr[1] "{folders} · {n} warten auf die erste Synchronisierung" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} erfordert Aufmerksamkeit" msgstr[1] "{folders} · {n} erfordern Aufmerksamkeit" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "wird synchronisiert …" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "Synchronisierungsfehler" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "erfordert Aufmerksamkeit" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "wartet auf erste Synchronisierung" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "aktuell" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "wird auf Änderungen geprüft …" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, 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:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "{done} von {total} wird synchronisiert" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "{file} wird synchronisiert – {done} von {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Ordner zur Synchronisierung hinzufügen" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Ordner wird synchronisiert …" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Ordner konnte nicht hinzugefügt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "Wiederherstellbare Ordner konnten nicht aufgelistet werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2429,19 +2422,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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Ordner wiederherstellen" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Wiederherstellen" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Ordner werden wiederhergestellt …" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2450,37 +2443,44 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "Ordner wird auf „Nur online“ umgestellt" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "Ordner wird heruntergeladen und bleibt synchronisiert" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Modus konnte nicht geändert werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Synchronisierung von „{path}“ beenden? Die lokalen Dateien und der Ordner in Meine Dateien bleiben erhalten." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2498,7 +2498,7 @@ msgstr "" "Ordner auf „Synchronisiert“ umstellen und vor dem Entfernen warten, bis der " "Download abgeschlossen ist." -#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2512,68 +2512,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Synchronisierung des Ordners beenden?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Auch aus Proton Drive löschen" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Löscht die einzige Kopie dieser Dateien." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "Die lokale Kopie bleibt unverändert." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Synchronisierung beenden" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Synchronisierung des Ordners beendet" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "Synchronisierung des Ordners konnte nicht beendet werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Computer umbenennen" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "„{name}“ umbenennen." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Der Computer konnte nicht umbenannt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "Ein Name ist erforderlich." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Zur Bestätigung „{name}“ eingeben" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Computer entfernen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2588,26 +2588,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Computer entfernt" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Der Computer konnte nicht entfernt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Diese Sicherung hier fortsetzen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2626,25 +2626,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:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Sicherung jetzt als „{name}“" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "Diese Sicherung konnte hier nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Mit diesem Computer synchronisieren?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2661,25 +2661,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Jetzt synchron mit „{name}“" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "Synchronisierung mit diesem Computer nicht möglich" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Sicherung auf diesen Computer verschieben?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2696,12 +2696,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Sicherung von „{name}“ verschoben" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Diese Sicherung konnte nicht verschoben werden" @@ -3293,59 +3293,59 @@ msgstr "In Dateien öffnen" msgid "Change Location…" msgstr "Ort ändern …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "" "Auswählen, ob dieser Ordner eine vollständige Kopie auf diesem Computer " "behält" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Jede Datei auf diesem Computer und in Proton Drive behalten." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Dateien in Proton Drive behalten und jede erst beim Öffnen herunterladen." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Nur online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Synchronisiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Jetzt synchronisieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Synchronisierung fortsetzen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Synchronisierung pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Neu synchronisieren …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Synchronisierung beenden …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "Neu synchronisieren?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3357,20 +3357,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Neu synchronisieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3379,11 +3379,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Nur online verfügbar machen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3392,62 +3392,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Ordner herunterladen?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Herunterladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Der Ordner konnte nicht pausiert werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Der Ordner konnte nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Ordner pausiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Ordner fortgesetzt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Synchronisieren fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Geteilter Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Spiegel von Meine Dateien" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Wird auf „Nur online“ umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Wird auf synchronisiert umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "nicht verfügbar" @@ -6657,6 +6661,12 @@ msgstr "{count} J." msgid "cannot reach the Proton Drive daemon: {error}" msgstr "Proton-Drive-Hintergrunddienst nicht erreichbar: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} Bild" +#~ msgstr[1] "{n} Bilder" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/en_GB.po b/po/en_GB.po index 214a015..3ca356b 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+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" @@ -62,9 +62,9 @@ msgstr "%A %-d %B %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -242,21 +242,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -334,7 +334,7 @@ msgid "Back / forward" msgstr "Back / forward" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Parent folder" @@ -344,9 +344,9 @@ msgstr "Grid / list" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Rename" @@ -562,9 +562,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -585,8 +585,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -735,7 +735,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Couldn't restore folders" @@ -1320,24 +1320,24 @@ msgstr "Couldn't load albums" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1389,7 +1389,7 @@ msgid "Album name" msgstr "Album name" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Create" @@ -1516,7 +1516,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "New Folder" @@ -1609,7 +1609,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Search this folder only" @@ -1665,10 +1665,10 @@ msgstr "Couldn't move to Trash" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1927,289 +1927,16 @@ 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:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "Scanning {root}… {folders}, {images}" - -#: 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: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: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:1778 -#, rust-format -msgid "{status}. {message}" -msgstr "{status}. {message}" - -#: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "New name" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Couldn't rename" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "Copy “{name}”" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "Couldn't read this folder." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Moved to {place}" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Folder name" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Couldn't create folder" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "Upload Files" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "Upload Folder" - -#: 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:2635 -msgid "Uploading…" -msgstr "Uploading…" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "View" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Folder unavailable" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Search everywhere" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Looking for “{query}”." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary} — search results" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "No matches" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2217,17 +1944,285 @@ msgid_plural "{n} files" msgstr[0] "{n} file" msgstr[1] "{n} files" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "Scanning {root}… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Thumbnails ready for {n} file in {root}" +msgstr[1] "Thumbnails ready for {n} files in {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgstr[1] "Thumbnails ready for {n} files in {root}; {failed} unavailable" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "New name" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Renamed to “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Couldn't rename" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "Move “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Choose the folder to move into." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Move Here" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copy “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Choose the folder to copy into." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Copy Here" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Locations" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Couldn't read this folder." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "No folders here." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Couldn't move" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Moved to {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Couldn't copy" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Copied to {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Create a folder in the current directory." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Folder name" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "Created “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Couldn't create folder" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Upload Files" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Upload Folder" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Couldn't upload" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Uploading…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "View" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Moved into “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Folder unavailable" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Couldn't open this folder" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Search everywhere" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Searching…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Looking for “{query}”." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary} — search results" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "No matches" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +msgid "No files or folders match that search." +msgstr "No files or folders match that search." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2306,98 +2301,98 @@ msgstr "{platform} · last backup {time}" msgid "{platform} · no backups yet" msgstr "{platform} · no backups yet" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "No folders backed up yet" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} folder backed up" msgstr[1] "{n} folders backed up" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} waiting for its first sync" msgstr[1] "{folders} · {n} waiting for their first sync" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} needs attention" msgstr[1] "{folders} · {n} need attention" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "syncing…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "sync error" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "needs attention" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "waiting for first sync" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "up to date" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "checking for changes…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "checking for changes — {done} of {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "syncing {done} of {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "syncing {file} — {done} of {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Add Folder to Sync" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Syncing folder…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Couldn't add folder" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "Couldn't list folders to restore" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2405,19 +2400,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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Restore Folders" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Restore" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Restoring folders…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2426,52 +2421,59 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "Folder will switch to online only" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "Folder will download and stay synced" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Couldn't change mode" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 -#, rust-format -msgid "" -"Stop syncing “{path}”?\n" -"\n" -"This folder is online only: its files live in Proton Drive, not on this " -"disk, so the folder will be empty once it stops syncing. To keep a local " -"copy, cancel, switch the folder to Synced, and wait for the download to " -"finish before removing it." -msgstr "" -"Stop syncing “{path}”?\n" -"\n" -"This folder is online only: its files live in Proton Drive, not on this " -"disk, so the folder will be empty once it stops syncing. To keep a local " -"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:959 #, rust-format msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Stop syncing “{path}”? Both the local files and the folder in My files are kept." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 +#, rust-format +msgid "" +"Stop syncing “{path}”?\n" +"\n" +"This folder is online only: its files live in Proton Drive, not on this " +"disk, so the folder will be empty once it stops syncing. To keep a local " +"copy, cancel, switch the folder to Synced, and wait for the download to " +"finish before removing it." +msgstr "" +"Stop syncing “{path}”?\n" +"\n" +"This folder is online only: its files live in Proton Drive, not on this " +"disk, so the folder will be empty once it stops syncing. To keep a local " +"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:971 +#, rust-format +msgid "" "Stop syncing “{path}”?\n" "\n" "The local files stay on this disk and simply stop being synced. Choose " @@ -2482,68 +2484,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Stop Syncing Folder?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Also delete from Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Deletes the only copy of these files." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "The local copy is unaffected." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Stop Syncing" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Stopped syncing folder" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "Couldn't stop syncing the folder" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Rename Computer" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "Rename “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Couldn't rename the computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "A name is required." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Type “{name}” to confirm" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Remove Computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2558,26 +2560,26 @@ msgstr "" "on that computer itself are not touched — but this cannot be undone from " "here." -#: crates/pdfs-gui/src/app/pages/devices.rs:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Computer removed" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Couldn't remove the computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Continue This Backup Here?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2596,25 +2598,25 @@ msgstr "" "“Restore to This Computer” afterwards to bring back what “{name}” was " "syncing." -#: crates/pdfs-gui/src/app/pages/devices.rs:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Now backing up as “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "Couldn't continue that backup here" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Sync With This Computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2631,25 +2633,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Now syncing with “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "Couldn't sync with that computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Move Backup to This Computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2665,12 +2667,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Moved the backup of “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Couldn't move that backup" @@ -3245,56 +3247,56 @@ msgstr "Open in Files" msgid "Change Location…" msgstr "Change Location…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Choose whether this folder keeps a full copy on this computer" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Keep every file on this computer and in Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "Keep the files in Proton Drive and download each one when you open it." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Online only" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Synced" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Sync Now" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Resume Syncing" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Pause Syncing" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Sync From Scratch…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Stop Syncing…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "Sync From Scratch?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3305,20 +3307,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Sync From Scratch" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3327,11 +3329,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Make Online Only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3340,60 +3342,64 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Download Folder?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Download" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Couldn't pause the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Couldn't resume the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Folder paused" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Folder resumed" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Couldn't sync" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Shared folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "My files mirror" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Going online only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Switching to synced" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "not available" @@ -6531,6 +6537,12 @@ msgstr "{count}y" msgid "cannot reach the Proton Drive daemon: {error}" msgstr "cannot reach the Proton Drive daemon: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} image" +#~ msgstr[1] "{n} images" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/es.po b/po/es.po index f9ef66f..57192b0 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -62,9 +62,9 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" @@ -244,21 +244,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -336,7 +336,7 @@ msgid "Back / forward" msgstr "Atrás / adelante" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Carpeta superior" @@ -346,9 +346,9 @@ msgstr "Cuadrícula / lista" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Renombrar" @@ -565,9 +565,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -588,8 +588,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -740,7 +740,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "No se pudieron restaurar las carpetas" @@ -1326,24 +1326,24 @@ msgstr "No se pudieron cargar los álbumes" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1395,7 +1395,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:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Crear" @@ -1522,7 +1522,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Carpeta nueva" @@ -1615,7 +1615,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Buscar solo en esta carpeta" @@ -1671,10 +1671,10 @@ 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: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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1936,292 +1936,16 @@ msgstr "" "El servicio de Proton Drive dejó de informar del progreso de las miniaturas." #: crates/pdfs-gui/src/app/pages/browser.rs:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "Analizando {root}… {folders}, {images}" - -#: 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: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: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] "" -"Miniaturas listas para {n} imagen en {root}; {failed} no disponibles" -msgstr[1] "" -"Miniaturas listas para {n} imágenes en {root}; {failed} no disponibles" - -#: 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:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Nombre nuevo" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "No se pudo renombrar" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "Copiar “{name}”" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "No se pudo leer esta carpeta." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Movido a {place}" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Nombre de la carpeta" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "No se pudo crear la carpeta" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "Subir archivos" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "Subir carpeta" - -#: 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:2635 -msgid "Uploading…" -msgstr "Subiendo…" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "Ver" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Carpeta no disponible" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Buscar en todas partes" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Buscando “{query}”." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary}: resultados de búsqueda" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Sin coincidencias" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2229,17 +1953,286 @@ msgid_plural "{n} files" msgstr[0] "{n} archivo" msgstr[1] "{n} archivos" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "Analizando {root}… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Miniaturas listas para {n} archivo en {root}" +msgstr[1] "Miniaturas listas para {n} archivos en {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Miniaturas listas para {n} archivo en {root}; {failed} no disponibles" +msgstr[1] "Miniaturas listas para {n} archivos en {root}; {failed} no disponibles" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Nombre nuevo" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Renombrado a “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "No se pudo renombrar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "Mover “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Elija la carpeta de destino." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Mover aquí" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copiar “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Elija la carpeta donde copiar." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Copiar aquí" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Ubicaciones" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "No se pudo leer esta carpeta." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "No hay carpetas aquí." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "No se pudo mover" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Movido a {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "No se pudo copiar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Copiado a {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Crear una carpeta en la carpeta actual." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Nombre de la carpeta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "Se creó “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "No se pudo crear la carpeta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Subir archivos" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Subir carpeta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "No se pudo subir" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Subiendo…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Ver" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Movido a “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Carpeta no disponible" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "No se pudo abrir esta carpeta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Buscar en todas partes" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Buscando…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Buscando “{query}”." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary}: resultados de búsqueda" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Sin coincidencias" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +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:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2318,98 +2311,98 @@ msgstr "{platform} · última copia de seguridad {time}" msgid "{platform} · no backups yet" msgstr "{platform} · aún no hay copias de seguridad" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Aún no hay carpetas con copia de seguridad" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} carpeta con copia de seguridad" msgstr[1] "{n} carpetas con copia de seguridad" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} espera su primera sincronización" msgstr[1] "{folders} · {n} esperan su primera sincronización" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} requiere atención" msgstr[1] "{folders} · {n} requieren atención" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "sincronizando…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "error de sincronización" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "requiere atención" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "esperando la primera sincronización" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "actualizado" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "buscando cambios…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "buscando cambios: {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "sincronizando {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "sincronizando {file}: {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Añadir carpeta para sincronizar" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Sincronizando la carpeta…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "No se pudo añadir la carpeta" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "No se pudieron listar las carpetas para restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2417,19 +2410,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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Restaurar carpetas" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Restaurando carpetas…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2438,36 +2431,43 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "La carpeta pasará a solo en línea" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "La carpeta se descargará y permanecerá sincronizada" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "No se pudo cambiar el modo" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "¿Dejar de sincronizar “{path}”? Se conservan tanto los archivos locales como la carpeta en Mis archivos." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2484,7 +2484,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:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2497,68 +2497,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "¿Dejar de sincronizar la carpeta?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Eliminar también de Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Elimina la única copia de estos archivos." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "La copia local no se ve afectada." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Dejar de sincronizar" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Se dejó de sincronizar la carpeta" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "No se pudo dejar de sincronizar la carpeta" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Renombrar equipo" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "Renombrar “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "No se pudo renombrar el equipo" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "Se necesita un nombre." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Escriba “{name}” para confirmar" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "¿Quitar el equipo?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2572,26 +2572,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Equipo quitado" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "No se pudo quitar el equipo" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "¿Continuar esta copia de seguridad aquí?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2610,25 +2610,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:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, 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:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 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:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "¿Sincronizar con este equipo?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2645,25 +2645,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Ahora se sincroniza con “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "No se pudo sincronizar con ese equipo" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "¿Mover la copia de seguridad a este equipo?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2680,12 +2680,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, 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:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "No se pudo mover esa copia de seguridad" @@ -3268,57 +3268,57 @@ msgstr "Abrir en Archivos" msgid "Change Location…" msgstr "Cambiar ubicación…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Elegir si esta carpeta guarda una copia completa en este equipo" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Conservar todos los archivos en este equipo y en Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Conservar los archivos en Proton Drive y descargar cada uno al abrirlo." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Solo en línea" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Sincronizar ahora" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Reanudar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Pausar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Sincronizar desde cero…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Dejar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "¿Sincronizar desde cero?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3330,20 +3330,20 @@ msgstr "" "lado se copia al otro, y de un archivo que difiere se conservan ambas " "versiones." -#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Sincronizar desde cero" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3352,11 +3352,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Hacer solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3365,62 +3365,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "¿Descargar la carpeta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Descargar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "No se pudo pausar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "No se pudo reanudar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Carpeta en pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Carpeta reanudada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "No se pudo sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Carpeta compartida" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Réplica de Mis archivos" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Pasando a solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Pasando a sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "no disponible" @@ -6612,6 +6616,12 @@ msgstr "{count} a" msgid "cannot reach the Proton Drive daemon: {error}" msgstr "no se puede contactar con el demonio de Proton Drive: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} imagen" +#~ msgstr[1] "{n} imágenes" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/fr.po b/po/fr.po index 25f4120..2867ed4 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -62,9 +62,9 @@ msgstr "%A %-d %B %Y à %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -246,21 +246,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -338,7 +338,7 @@ msgid "Back / forward" msgstr "Précédent / suivant" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Dossier parent" @@ -348,9 +348,9 @@ msgstr "Grille / liste" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Renommer" @@ -568,9 +568,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -591,8 +591,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -743,7 +743,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Impossible de restaurer les dossiers" @@ -1337,24 +1337,24 @@ msgstr "Impossible de charger les albums" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1406,7 +1406,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:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Créer" @@ -1533,7 +1533,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Nouveau dossier" @@ -1626,7 +1626,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Rechercher uniquement dans ce dossier" @@ -1682,10 +1682,10 @@ msgstr "Impossible de mettre à la corbeille" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1948,293 +1948,16 @@ 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:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "Analyse de {root}… {folders}, {images}" - -#: 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: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: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] "" -"Miniatures prêtes pour {n} image dans {root} ; indisponibles : {failed}" -msgstr[1] "" -"Miniatures prêtes pour {n} images dans {root} ; indisponibles : {failed}" - -#: 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:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Nouveau nom" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Impossible de renommer" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "Copier « {name} »" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "Impossible de lire ce dossier." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Déplacé vers {place}" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Nom du dossier" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Impossible de créer le dossier" - -#: 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:2596 -msgid "Upload Folder" -msgstr "Téléverser un dossier" - -#: 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:2635 -msgid "Uploading…" -msgstr "Téléversement…" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "Afficher" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Dossier indisponible" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Rechercher partout" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Recherche de « {query} »." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary} — résultats de recherche" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Aucun résultat" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2242,17 +1965,287 @@ msgid_plural "{n} files" msgstr[0] "{n} fichier" msgstr[1] "{n} fichiers" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "Analyse de {root}… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Miniatures prêtes pour {n} fichier dans {root}" +msgstr[1] "Miniatures prêtes pour {n} fichiers dans {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Miniatures prêtes pour {n} fichier dans {root} ; indisponibles : {failed}" +msgstr[1] "Miniatures prêtes pour {n} fichiers dans {root} ; indisponibles : {failed}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Nouveau nom" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Renommé en « {name} »" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Impossible de renommer" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "Déplacer « {name} »" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Choisissez le dossier de destination." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Déplacer ici" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copier « {name} »" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Choisissez le dossier où copier." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Copier ici" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Emplacements" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Impossible de lire ce dossier." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "Aucun dossier ici." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Impossible de déplacer" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Déplacé vers {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Impossible de copier" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Copié vers {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "« {name} »" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +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:2536 +msgid "Folder name" +msgstr "Nom du dossier" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "« {name} » créé" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Impossible de créer le dossier" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Téléverser des fichiers" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Téléverser un dossier" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Impossible de téléverser" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Téléversement…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Afficher" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Déplacé dans « {name} »" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Dossier indisponible" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Impossible d’ouvrir ce dossier" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Rechercher partout" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Recherche…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Recherche de « {query} »." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary} — résultats de recherche" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Aucun résultat" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +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:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2331,98 +2324,98 @@ msgstr "{platform} · dernière sauvegarde {time}" msgid "{platform} · no backups yet" msgstr "{platform} · aucune sauvegarde pour l’instant" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Aucun dossier sauvegardé pour l’instant" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} dossier sauvegardé" msgstr[1] "{n} dossiers sauvegardés" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} attend sa première synchronisation" msgstr[1] "{folders} · {n} attendent leur première synchronisation" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} requiert votre attention" msgstr[1] "{folders} · {n} requièrent votre attention" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "synchronisation…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "erreur de synchronisation" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "attention requise" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "en attente de la première synchronisation" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "à jour" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "recherche de modifications…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "recherche de modifications — {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "synchronisation de {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "synchronisation de {file} — {done} sur {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Ajouter un dossier à synchroniser" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Synchronisation du dossier…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Impossible d’ajouter le dossier" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "Impossible de lister les dossiers à restaurer" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2430,19 +2423,19 @@ msgstr "" "Cochez les dossiers à synchroniser sur cette machine et ajustez " "l’emplacement de chacun." -#: crates/pdfs-gui/src/app/pages/devices.rs:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Restaurer les dossiers" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Restaurer" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Restauration des dossiers…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2451,35 +2444,42 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "Le dossier passera en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 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:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Impossible de changer de mode" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Arrêter la synchronisation de « {path} » ? Les fichiers locaux et le dossier dans Mes fichiers sont conservés." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2496,7 +2496,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:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2510,68 +2510,68 @@ msgstr "" "synchronisés. Choisissez s’il faut aussi supprimer la copie dans Proton " "Drive." -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Arrêter la synchronisation du dossier ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Supprimer aussi de Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Supprime l’unique copie de ces fichiers." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "La copie locale n’est pas affectée." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Arrêter la synchronisation" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Synchronisation du dossier arrêtée" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "Impossible d’arrêter la synchronisation du dossier" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Renommer l’ordinateur" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "Renommer « {name} »." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Impossible de renommer l’ordinateur" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "Un nom est requis." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Saisissez « {name} » pour confirmer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Retirer l’ordinateur ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2586,26 +2586,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Ordinateur retiré" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Impossible de retirer l’ordinateur" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Continuer cette sauvegarde ici ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2624,25 +2624,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:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Sauvegarde désormais en tant que « {name} »" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "Impossible de continuer cette sauvegarde ici" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Synchroniser avec cet ordinateur ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2659,25 +2659,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Synchronisé désormais avec « {name} »" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "Impossible de synchroniser avec cet ordinateur" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Déplacer la sauvegarde vers cet ordinateur ?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2694,12 +2694,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Sauvegarde de « {name} » déplacée" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Impossible de déplacer cette sauvegarde" @@ -3293,57 +3293,57 @@ msgstr "Ouvrir dans Fichiers" msgid "Change Location…" msgstr "Changer l’emplacement…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Choisir si ce dossier garde une copie complète sur cet ordinateur" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Conserver chaque fichier sur cet ordinateur et dans Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Garder les fichiers dans Proton Drive et télécharger chacun à son ouverture." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "En ligne uniquement" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Synchronisé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Synchroniser maintenant" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Reprendre la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Mettre en pause la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Resynchroniser depuis le début…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Arrêter la synchronisation…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3355,20 +3355,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Resynchroniser depuis le début" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3378,11 +3378,11 @@ msgstr "" "uniquement dans Proton Drive. Chaque fichier sera à nouveau téléchargé à son " "ouverture." -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Garder en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3391,62 +3391,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Télécharger le dossier ?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Télécharger" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Impossible de mettre en pause le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Impossible de reprendre le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Dossier en pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Dossier repris" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Impossible de synchroniser" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Dossier partagé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Miroir de Mes fichiers" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Passage en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Passage en mode synchronisé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "non disponible" @@ -6660,6 +6664,12 @@ msgstr "{count} a" msgid "cannot reach the Proton Drive daemon: {error}" msgstr "impossible de joindre le démon Proton Drive : {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} image" +#~ msgstr[1] "{n} images" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/it.po b/po/it.po index edbaa24..b22bd23 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -62,9 +62,9 @@ msgstr "%A %-d %B %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -242,21 +242,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -334,7 +334,7 @@ msgid "Back / forward" msgstr "Indietro / avanti" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Cartella superiore" @@ -344,9 +344,9 @@ msgstr "Griglia / elenco" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Rinomina" @@ -564,9 +564,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -587,8 +587,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -739,7 +739,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Impossibile ripristinare le cartelle" @@ -1331,24 +1331,24 @@ msgstr "Impossibile caricare gli album" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1400,7 +1400,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:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Crea" @@ -1527,7 +1527,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Nuova cartella" @@ -1620,7 +1620,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Cerca solo in questa cartella" @@ -1676,10 +1676,10 @@ msgstr "Impossibile spostare nel cestino" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1942,293 +1942,16 @@ msgstr "" "miniature." #: crates/pdfs-gui/src/app/pages/browser.rs:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "Analisi di {root}… {folders}, {images}" - -#: 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: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: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] "" -"Miniature pronte per {n} immagine in {root}; {failed} non disponibili" -msgstr[1] "" -"Miniature pronte per {n} immagini in {root}; {failed} non disponibili" - -#: 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:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Nuovo nome" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Impossibile rinominare" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "Copia “{name}”" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "Impossibile leggere questa cartella." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Spostato in {place}" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Nome della cartella" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Impossibile creare la cartella" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "Carica file" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "Carica cartella" - -#: 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:2635 -msgid "Uploading…" -msgstr "Caricamento…" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "Visualizza" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Cartella non disponibile" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Cerca ovunque" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Ricerca di “{query}”." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary}: risultati della ricerca" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Nessuna corrispondenza" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2236,17 +1959,287 @@ msgid_plural "{n} files" msgstr[0] "{n} file" msgstr[1] "{n} file" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "Analisi di {root}… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Miniature pronte per {n} file in {root}" +msgstr[1] "Miniature pronte per {n} file in {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Miniature pronte per {n} file in {root}; {failed} non disponibili" +msgstr[1] "Miniature pronte per {n} file in {root}; {failed} non disponibili" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Nuovo nome" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Rinominato in “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Impossibile rinominare" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "Sposta “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Scegli la cartella di destinazione." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Sposta qui" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copia “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Scegli la cartella in cui copiare." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Copia qui" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Posizioni" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Impossibile leggere questa cartella." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "Nessuna cartella qui." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Impossibile spostare" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Spostato in {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Impossibile copiare" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Copiato in {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Crea una cartella nella directory corrente." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Nome della cartella" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "“{name}” creata" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Impossibile creare la cartella" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Carica file" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Carica cartella" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Impossibile caricare" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Caricamento…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Visualizza" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Spostato in “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Cartella non disponibile" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Impossibile aprire questa cartella" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Cerca ovunque" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Ricerca…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Ricerca di “{query}”." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary}: risultati della ricerca" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Nessuna corrispondenza" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +msgid "No files or folders match that search." +msgstr "Nessun file o cartella corrisponde alla ricerca." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2325,98 +2318,98 @@ msgstr "{platform} · ultimo backup {time}" msgid "{platform} · no backups yet" msgstr "{platform} · ancora nessun backup" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Ancora nessuna cartella sottoposta a backup" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} cartella sottoposta a backup" msgstr[1] "{n} cartelle sottoposte a backup" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} attende la prima sincronizzazione" msgstr[1] "{folders} · {n} attendono la prima sincronizzazione" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} richiede attenzione" msgstr[1] "{folders} · {n} richiedono attenzione" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "sincronizzazione…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "errore di sincronizzazione" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "richiede attenzione" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "in attesa della prima sincronizzazione" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "aggiornato" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "controllo delle modifiche…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "controllo delle modifiche: {done} di {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "sincronizzazione {done} di {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "sincronizzazione di {file}: {done} di {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Aggiungi cartella da sincronizzare" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Sincronizzazione della cartella…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Impossibile aggiungere la cartella" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "Impossibile elencare le cartelle da ripristinare" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2424,19 +2417,19 @@ msgstr "" "Seleziona le cartelle da sincronizzare su questa macchina e regola dove deve " "trovarsi ciascuna." -#: crates/pdfs-gui/src/app/pages/devices.rs:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Ripristina cartelle" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Ripristina" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Ripristino delle cartelle…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2445,39 +2438,46 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "La cartella passerà a solo online" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "La cartella verrà scaricata e resterà sincronizzata" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Impossibile cambiare modalità" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Interrompere la sincronizzazione di “{path}”? Sia i file locali sia la cartella in I miei file vengono mantenuti." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2495,7 +2495,7 @@ msgstr "" "cartella a Sincronizzata e attendi il completamento del download prima di " "rimuoverla." -#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2508,68 +2508,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Interrompere la sincronizzazione della cartella?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Elimina anche da Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Elimina l'unica copia di questi file." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "La copia locale non viene modificata." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Interrompi sincronizzazione" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Sincronizzazione della cartella interrotta" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "Impossibile interrompere la sincronizzazione della cartella" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Rinomina computer" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "Rinomina “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Impossibile rinominare il computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "È richiesto un nome." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Digita “{name}” per confermare" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Rimuovere il computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2584,26 +2584,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Computer rimosso" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Impossibile rimuovere il computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Continuare questo backup qui?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2622,25 +2622,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:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Ora il backup avviene come “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "Impossibile continuare quel backup qui" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Sincronizzare con questo computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2657,25 +2657,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Ora sincronizzato con “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "Impossibile sincronizzare con quel computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Spostare il backup su questo computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2692,12 +2692,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Backup di “{name}” spostato" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Impossibile spostare quel backup" @@ -3286,57 +3286,57 @@ msgstr "Apri in File" msgid "Change Location…" msgstr "Cambia posizione…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "" "Scegli se questa cartella conserva una copia completa su questo computer" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Conserva ogni file su questo computer e in Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "Conserva i file in Proton Drive e scarica ciascuno quando lo apri." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Solo online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Sincronizzata" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Sincronizza ora" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Riprendi sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Metti in pausa sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Sincronizza da zero…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Interrompi sincronizzazione…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "Sincronizzare da zero?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3348,20 +3348,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Sincronizza da zero" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 msgid "Couldn't sync the folder from scratch" msgstr "Impossibile sincronizzare la cartella da zero" -#: crates/pdfs-gui/src/app/pages/locations.rs:1577 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3370,11 +3370,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Rendi solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3383,62 +3383,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Scaricare la cartella?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Scarica" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Impossibile mettere in pausa la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Impossibile riprendere la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Cartella in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Cartella ripresa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Impossibile sincronizzare" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Cartella condivisa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Copia speculare di I miei file" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Passaggio a solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Passaggio a sincronizzata" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "non disponibile" @@ -6636,6 +6640,12 @@ msgstr "{count} a" msgid "cannot reach the Proton Drive daemon: {error}" msgstr "impossibile raggiungere il demone di Proton Drive: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} immagine" +#~ msgstr[1] "{n} immagini" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/nl.po b/po/nl.po index b90b987..9d40789 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -62,9 +62,9 @@ msgstr "%A %-d %B %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -243,21 +243,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -335,7 +335,7 @@ msgid "Back / forward" msgstr "Terug / vooruit" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Bovenliggende map" @@ -345,9 +345,9 @@ msgstr "Raster / lijst" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Hernoemen" @@ -565,9 +565,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -588,8 +588,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -740,7 +740,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Kon mappen niet terugzetten" @@ -1327,24 +1327,24 @@ msgstr "Kon albums niet laden" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1396,7 +1396,7 @@ msgid "Album name" msgstr "Albumnaam" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Aanmaken" @@ -1523,7 +1523,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Nieuwe map" @@ -1616,7 +1616,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Alleen in deze map zoeken" @@ -1672,10 +1672,10 @@ msgstr "Kon niet naar prullenbak verplaatsen" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1936,293 +1936,16 @@ 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:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "{root} scannen… {folders}, {images}" - -#: 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: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: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] "" -"Miniaturen klaar voor {n} afbeelding in {root}; {failed} niet beschikbaar" -msgstr[1] "" -"Miniaturen klaar voor {n} afbeeldingen in {root}; {failed} niet beschikbaar" - -#: 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:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Nieuwe naam" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Kon niet hernoemen" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "“{name}” kopiëren" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "Kon deze map niet lezen." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Verplaatst naar {place}" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Mapnaam" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Kon map niet aanmaken" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "Bestanden uploaden" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "Map uploaden" - -#: 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:2635 -msgid "Uploading…" -msgstr "Uploaden…" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "Bekijken" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Map niet beschikbaar" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Overal zoeken" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Zoeken naar “{query}”." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary} — zoekresultaten" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Geen overeenkomsten" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2230,17 +1953,287 @@ msgid_plural "{n} files" msgstr[0] "{n} bestand" msgstr[1] "{n} bestanden" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "{root} scannen… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Miniaturen klaar voor {n} bestand in {root}" +msgstr[1] "Miniaturen klaar voor {n} bestanden in {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Miniaturen klaar voor {n} bestand in {root}; {failed} niet beschikbaar" +msgstr[1] "Miniaturen klaar voor {n} bestanden in {root}; {failed} niet beschikbaar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Nieuwe naam" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Hernoemd naar “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Kon niet hernoemen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "“{name}” verplaatsen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Kies de map waarnaar je wilt verplaatsen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Hierheen verplaatsen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "“{name}” kopiëren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Kies de map waarnaar je wilt kopiëren." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Hierheen kopiëren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Locaties" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Kon deze map niet lezen." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "Geen mappen hier." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Kon niet verplaatsen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Verplaatst naar {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Kon niet kopiëren" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Gekopieerd naar {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Een map aanmaken in de huidige map." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Mapnaam" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "“{name}” aangemaakt" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Kon map niet aanmaken" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Bestanden uploaden" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Map uploaden" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Kon niet uploaden" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Uploaden…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Bekijken" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Verplaatst naar “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Map niet beschikbaar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Kon deze map niet openen" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Overal zoeken" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Zoeken…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Zoeken naar “{query}”." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary} — zoekresultaten" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Geen overeenkomsten" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +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:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2319,98 +2312,98 @@ msgstr "{platform} · laatste back-up {time}" msgid "{platform} · no backups yet" msgstr "{platform} · nog geen back-ups" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Nog geen mappen geback-upt" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} map in back-up" msgstr[1] "{n} mappen in back-up" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} wacht op de eerste synchronisatie" msgstr[1] "{folders} · {n} wachten op de eerste synchronisatie" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} vereist aandacht" msgstr[1] "{folders} · {n} vereisen aandacht" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "synchroniseren…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "synchronisatiefout" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "vereist aandacht" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "wacht op eerste synchronisatie" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "bijgewerkt" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "controleren op wijzigingen…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "controleren op wijzigingen — {done} van {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "synchroniseren: {done} van {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "{file} synchroniseren — {done} van {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Map toevoegen aan synchronisatie" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Map synchroniseren…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Kon map niet toevoegen" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "Kon mappen om terug te zetten niet weergeven" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2418,19 +2411,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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Mappen herstellen" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Terugzetten" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Mappen terugzetten…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2439,38 +2432,45 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "Map wordt alleen online" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "Map wordt gedownload en blijft gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Kon modus niet wijzigen" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Synchroniseren van “{path}” stoppen? Zowel de lokale bestanden als de map in Mijn bestanden blijven behouden." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2487,7 +2487,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:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2500,68 +2500,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Synchroniseren van map stoppen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Ook uit Proton Drive verwijderen" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Verwijdert de enige kopie van deze bestanden." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "De lokale kopie blijft ongewijzigd." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Synchroniseren stoppen" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Synchroniseren van map gestopt" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "Kon het synchroniseren van de map niet stoppen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Computer hernoemen" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "“{name}” hernoemen." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Kon de computer niet hernoemen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "Een naam is vereist." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Typ “{name}” om te bevestigen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Computer verwijderen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2576,26 +2576,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Computer verwijderd" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Kon de computer niet verwijderen" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Deze back-up hier voortzetten?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2614,25 +2614,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:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Back-up nu als “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "Kon die back-up hier niet voortzetten" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Synchroniseren met deze computer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2649,25 +2649,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Nu gesynchroniseerd met “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "Kon niet synchroniseren met die computer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Back-up naar deze computer verplaatsen?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2683,12 +2683,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Back-up van “{name}” verplaatst" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Kon die back-up niet verplaatsen" @@ -3277,58 +3277,58 @@ msgstr "Openen in Bestanden" msgid "Change Location…" msgstr "Locatie wijzigen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Kiezen of deze map een volledige kopie op deze computer houdt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Elk bestand op deze computer en in Proton Drive bewaren." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "De bestanden in Proton Drive bewaren en elk bestand downloaden zodra je het " "opent." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Alleen online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Nu synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Synchronisatie hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Synchronisatie pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Opnieuw synchroniseren…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Synchroniseren stoppen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "Opnieuw synchroniseren?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3340,20 +3340,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Opnieuw synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 msgid "Couldn't sync the folder from scratch" msgstr "Kon de map niet opnieuw synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1577 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3362,11 +3362,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Alleen online maken" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3375,62 +3375,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Map downloaden?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Downloaden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Kon de map niet pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Kon de map niet hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Map gepauzeerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Map hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Kon niet synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Gedeelde map" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Spiegel van Mijn bestanden" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Wordt alleen online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Overschakelen naar gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "niet beschikbaar" @@ -6622,6 +6626,12 @@ msgstr "{count}j" msgid "cannot reach the Proton Drive daemon: {error}" msgstr "kan de achtergronddienst van Proton Drive niet bereiken: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} afbeelding" +#~ msgstr[1] "{n} afbeeldingen" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/pdfs.pot b/po/pdfs.pot index ebeac28..ef6e2a0 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.7.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -65,9 +65,9 @@ msgstr "" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -219,21 +219,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -311,7 +311,7 @@ msgid "Back / forward" msgstr "" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "" @@ -321,9 +321,9 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "" @@ -526,9 +526,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -549,8 +549,8 @@ msgid "Couldn't read activity" msgstr "" #: crates/pdfs-gui/src/app/pages/activity.rs:472 -#: crates/pdfs-gui/src/app/pages/browser.rs:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -699,7 +699,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "" @@ -1274,24 +1274,24 @@ msgstr "" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1343,7 +1343,7 @@ msgid "Album name" msgstr "" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "" @@ -1470,7 +1470,7 @@ msgid "Forward (Alt+Right)" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:176 -#: crates/pdfs-gui/src/app/pages/browser.rs:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "" @@ -1563,7 +1563,7 @@ msgid "Cancel thumbnail build" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:255 -#: crates/pdfs-gui/src/app/pages/browser.rs:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "" @@ -1619,10 +1619,10 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1881,289 +1881,16 @@ msgid "The Proton Drive service stopped reporting thumbnail progress." msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" msgstr[0] "" msgstr[1] "" -#: 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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "" - -#: 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: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: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:1778 -#, rust-format -msgid "{status}. {message}" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:1932 -#, rust-format -msgid "Renamed to “{name}”" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:1940 -msgid "Couldn't rename" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:1987 -#, rust-format -msgid "Move “{name}”" -msgstr "" - -#: 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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2239 -msgid "No folders here." -msgstr "" - -#: 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 "" - -#: 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" -msgstr[0] "" -msgstr[1] "" - -#. Translators: {place} is a quoted folder name or "Proton Drive". -#: crates/pdfs-gui/src/app/pages/browser.rs:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "" - -#: 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: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:2535 -msgid "Folder name" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2555 -#, rust-format -msgid "Created “{name}”" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2563 -msgid "Couldn't create folder" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "" - -#: 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:2635 -msgid "Uploading…" -msgstr "" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2738 -#, rust-format -msgid "Moved into “{name}”" -msgstr "" - -#: 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:2853 -msgid "Folder unavailable" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2857 -msgid "Couldn't open this folder" -msgstr "" - -#: 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: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:2950 -msgid "Search everywhere" -msgstr "" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "" - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2171,18 +1898,286 @@ msgid_plural "{n} files" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 #, rust-format -msgid "{files} ({size})" +msgid "Scanning {root}… {folders}, {images}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, rust-format +msgid "Building thumbnails in {root}… {done} of {total}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, rust-format +msgid "Move {n} item" +msgid_plural "Move {n} items" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, rust-format +msgid "Copy {n} item" +msgid_plural "Copy {n} items" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2167 +msgid "Locations" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, rust-format +msgid "Uploading {n} item…" +msgid_plural "Uploading {n} items…" +msgstr[0] "" +msgstr[1] "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: crates/pdfs-gui/src/app/pages/devices.rs:263 +msgid "Reading this folder." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2858 +msgid "Folder unavailable" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +msgid "Drop files here, or upload a file or create a folder to get started." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2955 +msgid "Search everywhere" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +msgid "No files or folders match that search." msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:3107 #, rust-format -msgid "{folders}, {files}" +msgid "{files} ({size})" msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format +msgid "{folders}, {files}" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 +#, rust-format msgid "{folders}, {files} ({size})" msgstr "" @@ -2260,149 +2255,156 @@ msgstr "" msgid "{platform} · no backups yet" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "" msgstr[1] "" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 msgid "Couldn't list folders to restore" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 msgid "These folders are backed up under this computer in Proton Drive." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, rust-format msgid "Nothing to restore — “{name}”'s folders are all synced here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 msgid "Nothing to restore — this computer's folders are all synced here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2413,7 +2415,7 @@ msgid "" "finish before removing it." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2422,68 +2424,68 @@ msgid "" "whether to also delete the copy in Proton Drive." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 msgid "Computer renamed" msgstr "" #. Translators: {name} is the computer's name, which the user must type. -#: crates/pdfs-gui/src/app/pages/devices.rs:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2493,26 +2495,26 @@ msgid "" "here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2524,25 +2526,25 @@ msgid "" "syncing." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2553,25 +2555,25 @@ msgid "" "its folders to sync here." msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2582,12 +2584,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "" @@ -3130,56 +3132,56 @@ msgstr "" msgid "Change Location…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3187,91 +3189,95 @@ msgid "" "is copied to the other, and a file that differs keeps both versions." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 msgid "Couldn't sync the folder from scratch" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1577 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 msgid "Make Folder Online Only?" msgstr "" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, 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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 msgctxt "state" msgid "paused" msgstr "" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "" diff --git a/po/pl.po b/po/pl.po index df3a2e9..219e573 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -64,9 +64,9 @@ msgstr "%A, %-d %B %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -247,21 +247,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -339,7 +339,7 @@ msgid "Back / forward" msgstr "Wstecz/dalej" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Katalog nadrzędny" @@ -349,9 +349,9 @@ msgstr "Siatka/lista" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Zmień nazwę" @@ -576,9 +576,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -599,8 +599,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -761,7 +761,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Nie można przywrócić katalogów" @@ -1362,24 +1362,24 @@ msgstr "Nie można wczytać albumów" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1431,7 +1431,7 @@ msgid "Album name" msgstr "Nazwa albumu" #: crates/pdfs-gui/src/app/pages/albums.rs:265 -#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Utwórz" @@ -1563,7 +1563,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Nowy katalog" @@ -1656,7 +1656,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Przeszukaj tylko ten katalog" @@ -1714,10 +1714,10 @@ msgstr "Nie można przenieść do kosza" #: crates/pdfs-gui/src/app/pages/browser.rs:572 #: 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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1986,7 +1986,7 @@ 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:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, rust-format msgid "{n} folder" msgid_plural "{n} folders" @@ -1994,294 +1994,9 @@ msgstr[0] "{n} katalog" msgstr[1] "{n} katalogi" msgstr[2] "{n} katalogów" -#: crates/pdfs-gui/src/app/pages/browser.rs:1731 -#, rust-format -msgid "{n} image" -msgid_plural "{n} images" -msgstr[0] "{n} obraz" -msgstr[1] "{n} obrazy" -msgstr[2] "{n} obrazów" - -#: 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: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:1761 -#, rust-format -msgid "Thumbnails ready for {n} image in {root}" -msgid_plural "Thumbnails ready for {n} images in {root}" -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: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] "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:1778 -#, rust-format -msgid "{status}. {message}" -msgstr "{status}. {message}" - -#: crates/pdfs-gui/src/app/pages/browser.rs:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Nowa nazwa" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Nie można zmienić nazwy" - -#: 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: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:1217 -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" -msgstr[0] "Przenieś {n} element" -msgstr[1] "Przenieś {n} elementy" -msgstr[2] "Przenieś {n} elementów" - -#: 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: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: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:2211 -msgid "Couldn't read this folder." -msgstr "Nie można odczytać tego katalogu." - -#: 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: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ść" - -#: 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" -msgstr[0] "Przeniesiono {n} element do {place}, ale nie wszystkie" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Przeniesiono do {place}" - -#: 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] "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: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:2535 -msgid "Folder name" -msgstr "Nazwa katalogu" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Nie można utworzyć katalogu" - -#: 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:2596 -msgid "Upload Folder" -msgstr "Wysyłanie katalogu" - -#: 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:2635 -msgid "Uploading…" -msgstr "Wysyłanie…" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2637 -#, rust-format -msgid "Uploading {n} item…" -msgid_plural "Uploading {n} items…" -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: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:2738 -#, rust-format -msgid "Moved into “{name}”" -msgstr "Przeniesiono do „{name}”" - -#: 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:2853 -msgid "Folder unavailable" -msgstr "Katalog jest niedostępny" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Szukaj wszędzie" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Wyszukiwanie „{query}”." - -#: 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" -msgstr[0] "{summary} — wyświetlanie pierwszego {n} wyniku wyszukiwania" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary} — wyniki wyszukiwania" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Brak wyników" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2290,17 +2005,296 @@ msgstr[0] "{n} plik" msgstr[1] "{n} pliki" msgstr[2] "{n} plików" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "Skanowanie {root}… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Miniatury gotowe dla {n} pliku w {root}" +msgstr[1] "Miniatury gotowe dla {n} plików w {root}" +msgstr[2] "Miniatury gotowe dla {n} plików w {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Miniatury gotowe dla {n} pliku w {root}; niedostępne: {failed}" +msgstr[1] "Miniatury gotowe dla {n} plików w {root}; niedostępne: {failed}" +msgstr[2] "Miniatury gotowe dla {n} plików w {root}; niedostępne: {failed}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Nowa nazwa" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Zmieniono nazwę na „{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Nie można zmienić nazwy" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "Przenieś „{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Proszę wybrać katalog docelowy." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Przenieś tutaj" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, rust-format +msgid "Move {n} item" +msgid_plural "Move {n} items" +msgstr[0] "Przenieś {n} element" +msgstr[1] "Przenieś {n} elementy" +msgstr[2] "Przenieś {n} elementów" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "Skopiuj „{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Proszę wybrać katalog, do którego skopiować." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Skopiuj tutaj" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Lokalizacje" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Nie można odczytać tego katalogu." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "Brak katalogów." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Nie można przenieść" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +msgstr[0] "Przeniesiono {n} element do {place}, ale nie wszystkie" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Przeniesiono do {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, rust-format +msgid "Moved {n} item to {place}" +msgid_plural "Moved {n} items to {place}" +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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Nie można skopiować" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Skopiowano do {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "„{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Utwórz katalog w bieżącym katalogu." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Nazwa katalogu" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "Utworzono „{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Nie można utworzyć katalogu" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Wysyłanie plików" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Wysyłanie katalogu" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Nie można wysłać" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Wysyłanie…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, rust-format +msgid "Uploading {n} item…" +msgid_plural "Uploading {n} items…" +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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Wyświetl" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Przeniesiono do „{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Katalog jest niedostępny" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Nie można otworzyć tego katalogu" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Szukaj wszędzie" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Wyszukiwanie…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Wyszukiwanie „{query}”." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +msgstr[0] "{summary} — wyświetlanie pierwszego {n} wyniku wyszukiwania" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary} — wyniki wyszukiwania" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Brak wyników" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +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:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2380,11 +2374,11 @@ msgstr "{platform} · ostatnia kopia zapasowa: {time}" msgid "{platform} · no backups yet" msgstr "{platform} · brak kopii zapasowych" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Brak zarchiwizowanych katalogów" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" @@ -2392,7 +2386,7 @@ msgstr[0] "{n} katalog z kopią zapasową" msgstr[1] "{n} katalogi z kopią zapasową" msgstr[2] "{n} katalogów z kopią zapasową" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" @@ -2400,7 +2394,7 @@ msgstr[0] "{folders} · {n} czeka na pierwszą synchronizację" msgstr[1] "{folders} · {n} czekają na pierwszą synchronizację" msgstr[2] "{folders} · {n} czeka na pierwszą synchronizację" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" @@ -2408,31 +2402,31 @@ msgstr[0] "{folders} · {n} wymaga uwagi" msgstr[1] "{folders} · {n} wymagają uwagi" msgstr[2] "{folders} · {n} wymaga uwagi" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "synchronizowanie…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "błąd synchronizacji" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "wymaga uwagi" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "oczekiwanie na pierwszą synchronizację" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "aktualne" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "sprawdzanie zmian…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, rust-format msgid "checking for changes — {n} item checked" msgid_plural "checking for changes — {n} items checked" @@ -2440,42 +2434,42 @@ 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "sprawdzanie zmian — {done} z {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "synchronizowanie {done} z {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "synchronizowanie {file} — {done} z {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Dodaj katalog do synchronizacji" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Synchronizowanie katalogu…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Nie można dodać katalogu" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 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:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2483,19 +2477,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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Przywróć katalogi" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Przywróć" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Przywracanie katalogów…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2504,37 +2498,44 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "Katalog przejdzie w tryb tylko online" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "Katalog zostanie pobrany i będzie synchronizowany" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Nie można zmienić trybu" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Zatrzymać synchronizację „{path}”? Zarówno pliki lokalne, jak i katalog w Moich plikach zostaną zachowane." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2551,7 +2552,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:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2564,68 +2565,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Zatrzymać synchronizację katalogu?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Usuń także z Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Usuwa jedyną kopię tych plików." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "Lokalna kopia pozostanie bez zmian." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Zatrzymaj synchronizację" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "Zatrzymano synchronizację katalogu" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 msgid "Couldn't stop syncing the folder" msgstr "Nie można zatrzymać synchronizacji katalogu" -#: crates/pdfs-gui/src/app/pages/devices.rs:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Zmiana nazwy komputera" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "Proszę podać nową nazwę komputera „{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Nie można zmienić nazwy komputera" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "Nazwa jest wymagana." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Proszę wpisać „{name}”, aby potwierdzić" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Usunąć komputer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2640,26 +2641,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Usunięto komputer" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Nie można usunąć komputera" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Kontynuować tę kopię zapasową tutaj?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2678,25 +2679,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:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Kopia zapasowa jest teraz tworzona jako „{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 msgid "Couldn't continue that backup here" msgstr "Nie można kontynuować tej kopii zapasowej tutaj" -#: crates/pdfs-gui/src/app/pages/devices.rs:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Synchronizować z tym komputerem?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2713,25 +2714,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Teraz synchronizowane z „{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 msgid "Couldn't sync with that computer" msgstr "Nie można synchronizować z tym komputerem" -#: crates/pdfs-gui/src/app/pages/devices.rs:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Przenieść kopię zapasową na ten komputer?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2749,12 +2750,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Przeniesiono kopię zapasową „{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Nie można przenieść tej kopii zapasowej" @@ -3349,56 +3350,56 @@ msgstr "Otwórz w Plikach" msgid "Change Location…" msgstr "Zmień położenie…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Wybierz, czy ten katalog przechowuje pełną kopię na tym komputerze" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Przechowuj każdy plik na tym komputerze i w Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "Przechowuj pliki w Proton Drive i pobieraj każdy przy jego otwarciu." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Tylko online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Synchronizowany" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Synchronizuj teraz" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Wznów synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Wstrzymaj synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Synchronizuj od nowa…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Zatrzymaj synchronizację…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "Synchronizować od nowa?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3410,20 +3411,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Synchronizuj od nowa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3432,11 +3433,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Oznacz jako tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3445,62 +3446,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Pobrać katalog?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Pobierz" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Nie można wstrzymać katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Nie można wznowić katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Wstrzymano katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Wznowiono katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Nie można zsynchronizować" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Udostępniony katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Kopia lustrzana Moich plików" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Przechodzenie w tryb tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Przełączanie na synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "niedostępne" @@ -6736,6 +6741,13 @@ msgstr "{count} r." msgid "cannot reach the Proton Drive daemon: {error}" msgstr "nie można połączyć się z usługą Proton Drive: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} obraz" +#~ msgstr[1] "{n} obrazy" +#~ msgstr[2] "{n} obrazów" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the " diff --git a/po/pt_BR.po b/po/pt_BR.po index 2789e0b..f575cd9 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-11-01 17:51+0100\n" +"POT-Creation-Date: 2026-11-14 01:56+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" @@ -62,9 +62,9 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: 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: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:1717 +#: crates/pdfs-gui/src/app/pages/browser.rs:2168 +#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: 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" @@ -242,21 +242,21 @@ msgstr "" #: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1730 #: 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: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:826 -#: crates/pdfs-gui/src/app/pages/devices.rs:979 -#: crates/pdfs-gui/src/app/pages/devices.rs:1017 -#: crates/pdfs-gui/src/app/pages/devices.rs:1069 -#: crates/pdfs-gui/src/app/pages/devices.rs:1113 -#: crates/pdfs-gui/src/app/pages/devices.rs:1153 -#: crates/pdfs-gui/src/app/pages/devices.rs:1216 +#: crates/pdfs-gui/src/app/pages/browser.rs:1918 +#: crates/pdfs-gui/src/app/pages/browser.rs:2040 +#: crates/pdfs-gui/src/app/pages/browser.rs:2541 +#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1031 +#: crates/pdfs-gui/src/app/pages/devices.rs:1083 +#: crates/pdfs-gui/src/app/pages/devices.rs:1127 +#: crates/pdfs-gui/src/app/pages/devices.rs:1167 +#: crates/pdfs-gui/src/app/pages/devices.rs:1230 #: 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 -#: crates/pdfs-gui/src/app/pages/locations.rs:1581 -#: crates/pdfs-gui/src/app/pages/locations.rs:1631 +#: crates/pdfs-gui/src/app/pages/locations.rs:1541 +#: crates/pdfs-gui/src/app/pages/locations.rs:1585 +#: crates/pdfs-gui/src/app/pages/locations.rs:1635 #: 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 @@ -334,7 +334,7 @@ msgid "Back / forward" msgstr "Voltar / avançar" #: crates/pdfs-gui/src/app/main.rs:1524 -#: crates/pdfs-gui/src/app/pages/browser.rs:2014 +#: crates/pdfs-gui/src/app/pages/browser.rs:2015 msgid "Parent folder" msgstr "Pasta superior" @@ -344,9 +344,9 @@ msgstr "Grade / lista" #: crates/pdfs-gui/src/app/main.rs:1526 #: 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:1018 +#: crates/pdfs-gui/src/app/pages/browser.rs:1897 +#: crates/pdfs-gui/src/app/pages/browser.rs:1919 +#: crates/pdfs-gui/src/app/pages/devices.rs:1032 #: crates/pdfs-gui/src/app/widgets/details.rs:161 msgid "Rename" msgstr "Renomear" @@ -564,9 +564,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: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/browser.rs:2189 +#: crates/pdfs-gui/src/app/pages/browser.rs:2808 +#: crates/pdfs-gui/src/app/pages/browser.rs:2812 #: 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 @@ -587,8 +587,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:2839 -#: crates/pdfs-gui/src/app/pages/browser.rs:3021 +#: crates/pdfs-gui/src/app/pages/browser.rs:2844 +#: crates/pdfs-gui/src/app/pages/browser.rs:3026 #: 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 @@ -739,7 +739,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:861 +#: crates/pdfs-gui/src/app/pages/devices.rs:862 msgid "Couldn't restore folders" msgstr "Não foi possível restaurar as pastas" @@ -1328,24 +1328,24 @@ msgstr "Não foi possível carregar os álbuns" #: 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:729 -#: crates/pdfs-gui/src/app/pages/devices.rs:769 -#: crates/pdfs-gui/src/app/pages/devices.rs:922 -#: crates/pdfs-gui/src/app/pages/devices.rs:1192 -#: crates/pdfs-gui/src/app/pages/devices.rs:1253 -#: crates/pdfs-gui/src/app/pages/devices.rs:1282 +#: crates/pdfs-gui/src/app/pages/browser.rs:1874 +#: crates/pdfs-gui/src/app/pages/browser.rs:2501 +#: crates/pdfs-gui/src/app/pages/browser.rs:2651 +#: crates/pdfs-gui/src/app/pages/devices.rs:730 +#: crates/pdfs-gui/src/app/pages/devices.rs:770 +#: crates/pdfs-gui/src/app/pages/devices.rs:923 +#: crates/pdfs-gui/src/app/pages/devices.rs:1206 +#: crates/pdfs-gui/src/app/pages/devices.rs:1267 +#: crates/pdfs-gui/src/app/pages/devices.rs:1296 #: 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 #: 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: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/locations.rs:1570 +#: crates/pdfs-gui/src/app/pages/locations.rs:1677 +#: crates/pdfs-gui/src/app/pages/locations.rs:1697 #: 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 @@ -1397,7 +1397,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:2541 +#: crates/pdfs-gui/src/app/pages/browser.rs:2542 msgid "Create" msgstr "Criar" @@ -1524,7 +1524,7 @@ 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:2530 +#: crates/pdfs-gui/src/app/pages/browser.rs:2531 msgid "New Folder" msgstr "Nova pasta" @@ -1617,7 +1617,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:2952 +#: crates/pdfs-gui/src/app/pages/browser.rs:2957 msgid "Search this folder only" msgstr "Pesquisar somente nesta pasta" @@ -1673,10 +1673,10 @@ 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: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/pages/browser.rs:1852 +#: crates/pdfs-gui/src/app/pages/browser.rs:2377 +#: crates/pdfs-gui/src/app/pages/browser.rs:2433 +#: crates/pdfs-gui/src/app/pages/browser.rs:2621 #: 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." @@ -1936,292 +1936,16 @@ msgstr "" "O serviço do Proton Drive parou de informar o progresso das miniaturas." #: crates/pdfs-gui/src/app/pages/browser.rs:1730 -#: crates/pdfs-gui/src/app/pages/browser.rs:3095 +#: crates/pdfs-gui/src/app/pages/browser.rs:3100 #, 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: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:1734 -#, rust-format -msgid "Scanning {root}… {folders}, {images}" -msgstr "Examinando {root}… {folders}, {images}" - -#: 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: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: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] "" -"Miniaturas prontas para {n} imagem em {root}; {failed} indisponíveis" -msgstr[1] "" -"Miniaturas prontas para {n} imagens em {root}; {failed} indisponíveis" - -#: 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:1900 -#: crates/pdfs-gui/src/app/pages/devices.rs:1011 -msgid "New name" -msgstr "Novo nome" - -#: 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:1940 -msgid "Couldn't rename" -msgstr "Não foi possível renomear" - -#: 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: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:1217 -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:1997 -#, rust-format -msgid "Copy “{name}”" -msgstr "Copiar “{name}”" - -#: 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: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:2211 -msgid "Couldn't read this folder." -msgstr "Não foi possível ler esta pasta." - -#: 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: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" - -#: 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" -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:2410 -#, rust-format -msgid "Moved to {place}" -msgstr "Movido para {place}" - -#: 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: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:2535 -msgid "Folder name" -msgstr "Nome da pasta" - -#: 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:2563 -msgid "Couldn't create folder" -msgstr "Não foi possível criar a pasta" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2575 -msgid "Upload Files" -msgstr "Enviar arquivos" - -#: crates/pdfs-gui/src/app/pages/browser.rs:2596 -msgid "Upload Folder" -msgstr "Enviar pasta" - -#: 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:2635 -msgid "Uploading…" -msgstr "Enviando…" - -#: 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:2640 -#: crates/pdfs-gui/src/app/pages/photos.rs:829 -msgctxt "verb" -msgid "View" -msgstr "Ver" - -#: 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: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:2853 -msgid "Folder unavailable" -msgstr "Pasta indisponível" - -#: 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: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: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:2950 -msgid "Search everywhere" -msgstr "Pesquisar em todos os lugares" - -#: 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:2991 -#, rust-format -msgid "Looking for “{query}”." -msgstr "Procurando por “{query}”." - -#: 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" -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:3054 -#, rust-format -msgid "{summary} — search results" -msgstr "{summary} — resultados da pesquisa" - -#: crates/pdfs-gui/src/app/pages/browser.rs:3060 -msgid "No matches" -msgstr "Nenhuma correspondência" - -#: 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:3096 +#. Translators: a count of images and videos that can have a thumbnail. +#: crates/pdfs-gui/src/app/pages/browser.rs:1732 +#: crates/pdfs-gui/src/app/pages/browser.rs:3101 #: crates/pdfs-gui/src/i18n.rs:252 #, rust-format msgid "{n} file" @@ -2229,17 +1953,286 @@ msgid_plural "{n} files" msgstr[0] "{n} arquivo" msgstr[1] "{n} arquivos" -#: crates/pdfs-gui/src/app/pages/browser.rs:3102 +#: crates/pdfs-gui/src/app/pages/browser.rs:1735 +#, rust-format +msgid "Scanning {root}… {folders}, {images}" +msgstr "Examinando {root}… {folders}, {images}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1749 +#, 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:1762 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}" +msgid_plural "Thumbnails ready for {n} files in {root}" +msgstr[0] "Miniaturas prontas para {n} arquivo em {root}" +msgstr[1] "Miniaturas prontas para {n} arquivos em {root}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1769 +#, rust-format +msgid "Thumbnails ready for {n} file in {root}; {failed} unavailable" +msgid_plural "Thumbnails ready for {n} files in {root}; {failed} unavailable" +msgstr[0] "Miniaturas prontas para {n} arquivo em {root}; {failed} indisponíveis" +msgstr[1] "Miniaturas prontas para {n} arquivos em {root}; {failed} indisponíveis" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1779 +#, rust-format +msgid "{status}. {message}" +msgstr "{status}. {message}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1901 +#: crates/pdfs-gui/src/app/pages/devices.rs:1025 +msgid "New name" +msgstr "Novo nome" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1933 +#, rust-format +msgid "Renamed to “{name}”" +msgstr "Renomeado para “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1941 +msgid "Couldn't rename" +msgstr "Não foi possível renomear" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1988 +#, rust-format +msgid "Move “{name}”" +msgstr "Mover “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1989 +#: crates/pdfs-gui/src/app/pages/browser.rs:1994 +msgid "Choose the folder to move into." +msgstr "Escolha a pasta de destino." + +#: crates/pdfs-gui/src/app/pages/browser.rs:1990 +#: crates/pdfs-gui/src/app/pages/browser.rs:1995 +#: crates/pdfs-gui/src/app/pages/devices.rs:1231 +msgid "Move Here" +msgstr "Mover para cá" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1993 +#, 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:1998 +#, rust-format +msgid "Copy “{name}”" +msgstr "Copiar “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:1999 +#: crates/pdfs-gui/src/app/pages/browser.rs:2004 +msgid "Choose the folder to copy into." +msgstr "Escolha a pasta onde copiar." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2000 +#: crates/pdfs-gui/src/app/pages/browser.rs:2005 +msgid "Copy Here" +msgstr "Copiar para cá" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2003 +#, 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:2167 +msgid "Locations" +msgstr "Locais" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2212 +msgid "Couldn't read this folder." +msgstr "Não foi possível ler esta pasta." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2240 +msgid "No folders here." +msgstr "Nenhuma pasta aqui." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2376 +#: crates/pdfs-gui/src/app/pages/browser.rs:2396 +#: crates/pdfs-gui/src/app/pages/browser.rs:2747 +msgid "Couldn't move" +msgstr "Não foi possível mover" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2403 +#, rust-format +msgid "Moved {n} item to {place}, but not all" +msgid_plural "Moved {n} items to {place}, but not all" +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:2411 +#, rust-format +msgid "Moved to {place}" +msgstr "Movido para {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2416 +#, 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:2432 +#: crates/pdfs-gui/src/app/pages/browser.rs:2452 +msgid "Couldn't copy" +msgstr "Não foi possível copiar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2459 +#, 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:2467 +#, rust-format +msgid "Copied to {place}" +msgstr "Copiado para {place}" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2472 +#, 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:2516 +#, rust-format +msgid "“{name}”" +msgstr "“{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2532 +msgid "Create a folder in the current directory." +msgstr "Crie uma pasta no diretório atual." + +#: crates/pdfs-gui/src/app/pages/browser.rs:2536 +msgid "Folder name" +msgstr "Nome da pasta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2556 +#, rust-format +msgid "Created “{name}”" +msgstr "“{name}” criada" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2564 +msgid "Couldn't create folder" +msgstr "Não foi possível criar a pasta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2576 +msgid "Upload Files" +msgstr "Enviar arquivos" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2597 +msgid "Upload Folder" +msgstr "Enviar pasta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2620 +#: crates/pdfs-gui/src/app/pages/browser.rs:2646 +#: crates/pdfs-gui/src/app/pages/browser.rs:2650 +msgid "Couldn't upload" +msgstr "Não foi possível enviar" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2636 +msgid "Uploading…" +msgstr "Enviando…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2638 +#, 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:2641 +#: crates/pdfs-gui/src/app/pages/photos.rs:829 +msgctxt "verb" +msgid "View" +msgstr "Ver" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2739 +#, rust-format +msgid "Moved into “{name}”" +msgstr "Movido para “{name}”" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2813 +#: 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:2858 +msgid "Folder unavailable" +msgstr "Pasta indisponível" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2862 +msgid "Couldn't open this folder" +msgstr "Não foi possível abrir esta pasta" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2904 +#: 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:2905 +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:2955 +msgid "Search everywhere" +msgstr "Pesquisar em todos os lugares" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2991 +#: crates/pdfs-gui/src/app/pages/browser.rs:2995 +msgid "Searching…" +msgstr "Pesquisando…" + +#: crates/pdfs-gui/src/app/pages/browser.rs:2996 +#, rust-format +msgid "Looking for “{query}”." +msgstr "Procurando por “{query}”." + +#: crates/pdfs-gui/src/app/pages/browser.rs:3052 +#, rust-format +msgid "{summary} — showing the first {n} search result" +msgid_plural "{summary} — showing the first {n} search results" +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:3059 +#, rust-format +msgid "{summary} — search results" +msgstr "{summary} — resultados da pesquisa" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3065 +msgid "No matches" +msgstr "Nenhuma correspondência" + +#: crates/pdfs-gui/src/app/pages/browser.rs:3066 +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:3107 #, rust-format msgid "{files} ({size})" msgstr "{files} ({size})" -#: crates/pdfs-gui/src/app/pages/browser.rs:3107 +#: crates/pdfs-gui/src/app/pages/browser.rs:3112 #, rust-format msgid "{folders}, {files}" msgstr "{folders}, {files}" -#: crates/pdfs-gui/src/app/pages/browser.rs:3112 +#: crates/pdfs-gui/src/app/pages/browser.rs:3117 #, rust-format msgid "{folders}, {files} ({size})" msgstr "{folders}, {files} ({size})" @@ -2318,98 +2311,98 @@ msgstr "{platform} · último backup {time}" msgid "{platform} · no backups yet" msgstr "{platform} · nenhum backup ainda" -#: crates/pdfs-gui/src/app/pages/devices.rs:592 +#: crates/pdfs-gui/src/app/pages/devices.rs:593 msgid "No folders backed up yet" msgstr "Nenhuma pasta com backup ainda" -#: crates/pdfs-gui/src/app/pages/devices.rs:595 +#: crates/pdfs-gui/src/app/pages/devices.rs:596 #, rust-format msgid "{n} folder backed up" msgid_plural "{n} folders backed up" msgstr[0] "{n} pasta com backup" msgstr[1] "{n} pastas com backup" -#: crates/pdfs-gui/src/app/pages/devices.rs:607 +#: crates/pdfs-gui/src/app/pages/devices.rs:608 #, rust-format msgid "{folders} · {n} waiting for its first sync" msgid_plural "{folders} · {n} waiting for their first sync" msgstr[0] "{folders} · {n} aguarda a primeira sincronização" msgstr[1] "{folders} · {n} aguardam a primeira sincronização" -#: crates/pdfs-gui/src/app/pages/devices.rs:621 +#: crates/pdfs-gui/src/app/pages/devices.rs:622 #, rust-format msgid "{folders} · {n} needs attention" msgid_plural "{folders} · {n} need attention" msgstr[0] "{folders} · {n} requer atenção" msgstr[1] "{folders} · {n} requerem atenção" -#: crates/pdfs-gui/src/app/pages/devices.rs:640 +#: crates/pdfs-gui/src/app/pages/devices.rs:641 msgid "syncing…" msgstr "sincronizando…" -#: crates/pdfs-gui/src/app/pages/devices.rs:641 +#: crates/pdfs-gui/src/app/pages/devices.rs:642 msgid "sync error" msgstr "erro de sincronização" -#: crates/pdfs-gui/src/app/pages/devices.rs:642 +#: crates/pdfs-gui/src/app/pages/devices.rs:643 msgid "needs attention" msgstr "requer atenção" -#: crates/pdfs-gui/src/app/pages/devices.rs:643 +#: crates/pdfs-gui/src/app/pages/devices.rs:644 msgid "waiting for first sync" msgstr "aguardando a primeira sincronização" -#: crates/pdfs-gui/src/app/pages/devices.rs:644 +#: crates/pdfs-gui/src/app/pages/devices.rs:645 msgid "up to date" msgstr "atualizado" -#: crates/pdfs-gui/src/app/pages/devices.rs:654 +#: crates/pdfs-gui/src/app/pages/devices.rs:655 msgid "checking for changes…" msgstr "verificando alterações…" -#: crates/pdfs-gui/src/app/pages/devices.rs:660 +#: crates/pdfs-gui/src/app/pages/devices.rs:661 #, 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:667 +#: crates/pdfs-gui/src/app/pages/devices.rs:668 #, rust-format msgid "checking for changes — {done} of {total}" msgstr "verificando alterações — {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:679 +#: crates/pdfs-gui/src/app/pages/devices.rs:680 #, rust-format msgid "syncing {done} of {total}" msgstr "sincronizando {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:685 +#: crates/pdfs-gui/src/app/pages/devices.rs:686 #, rust-format msgid "syncing {file} — {done} of {total}" msgstr "sincronizando {file} — {done} de {total}" -#: crates/pdfs-gui/src/app/pages/devices.rs:697 +#: crates/pdfs-gui/src/app/pages/devices.rs:698 msgid "Add Folder to Sync" msgstr "Adicionar pasta à sincronização" -#: crates/pdfs-gui/src/app/pages/devices.rs:721 -#: crates/pdfs-gui/src/app/pages/locations.rs:1559 -#: crates/pdfs-gui/src/app/pages/locations.rs:1686 +#: crates/pdfs-gui/src/app/pages/devices.rs:722 +#: crates/pdfs-gui/src/app/pages/locations.rs:1563 +#: crates/pdfs-gui/src/app/pages/locations.rs:1690 msgid "Syncing folder…" msgstr "Sincronizando pasta…" -#: crates/pdfs-gui/src/app/pages/devices.rs:724 -#: crates/pdfs-gui/src/app/pages/devices.rs:728 +#: crates/pdfs-gui/src/app/pages/devices.rs:725 +#: crates/pdfs-gui/src/app/pages/devices.rs:729 msgid "Couldn't add folder" msgstr "Não foi possível adicionar a pasta" -#: crates/pdfs-gui/src/app/pages/devices.rs:762 -#: crates/pdfs-gui/src/app/pages/devices.rs:768 +#: crates/pdfs-gui/src/app/pages/devices.rs:763 +#: crates/pdfs-gui/src/app/pages/devices.rs:769 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:794 +#: crates/pdfs-gui/src/app/pages/devices.rs:795 msgid "" "Tick the folders to sync to this machine, and adjust where each one should " "live." @@ -2417,19 +2410,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:820 +#: crates/pdfs-gui/src/app/pages/devices.rs:821 msgid "Restore Folders" msgstr "Restaurar pastas" -#: crates/pdfs-gui/src/app/pages/devices.rs:827 +#: crates/pdfs-gui/src/app/pages/devices.rs:828 msgid "Restore" msgstr "Restaurar" -#: crates/pdfs-gui/src/app/pages/devices.rs:860 +#: crates/pdfs-gui/src/app/pages/devices.rs:861 msgid "Restoring folders…" msgstr "Restaurando pastas…" -#: crates/pdfs-gui/src/app/pages/devices.rs:872 +#: crates/pdfs-gui/src/app/pages/devices.rs:873 #, rust-format msgid "" "These folders are backed up from “{name}”. Restored folders keep syncing " @@ -2438,36 +2431,43 @@ 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:875 +#: crates/pdfs-gui/src/app/pages/devices.rs:876 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:884 +#: crates/pdfs-gui/src/app/pages/devices.rs:885 #, 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:887 +#: crates/pdfs-gui/src/app/pages/devices.rs:888 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:911 +#: crates/pdfs-gui/src/app/pages/devices.rs:912 msgid "Folder will switch to online only" msgstr "A pasta passará a ser somente online" -#: crates/pdfs-gui/src/app/pages/devices.rs:913 +#: crates/pdfs-gui/src/app/pages/devices.rs:914 msgid "Folder will download and stay synced" msgstr "A pasta será baixada e permanecerá sincronizada" -#: crates/pdfs-gui/src/app/pages/devices.rs:917 -#: crates/pdfs-gui/src/app/pages/devices.rs:921 +#: crates/pdfs-gui/src/app/pages/devices.rs:918 +#: crates/pdfs-gui/src/app/pages/devices.rs:922 msgid "Couldn't change mode" msgstr "Não foi possível alterar o modo" -#: crates/pdfs-gui/src/app/pages/devices.rs:953 +#: crates/pdfs-gui/src/app/pages/devices.rs:959 +#, rust-format +msgid "" +"Stop syncing “{path}”? Both the local files and the folder in My files are " +"kept." +msgstr "Parar de sincronizar “{path}”? Tanto os arquivos locais quanto a pasta em Meus arquivos são mantidos." + +#: crates/pdfs-gui/src/app/pages/devices.rs:965 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2484,7 +2484,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:959 +#: crates/pdfs-gui/src/app/pages/devices.rs:971 #, rust-format msgid "" "Stop syncing “{path}”?\n" @@ -2497,68 +2497,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:964 +#: crates/pdfs-gui/src/app/pages/devices.rs:976 msgid "Stop Syncing Folder?" msgstr "Parar de sincronizar a pasta?" -#: crates/pdfs-gui/src/app/pages/devices.rs:969 +#: crates/pdfs-gui/src/app/pages/devices.rs:981 msgid "Also delete from Proton Drive" msgstr "Também excluir do Proton Drive" -#: crates/pdfs-gui/src/app/pages/devices.rs:971 +#: crates/pdfs-gui/src/app/pages/devices.rs:983 msgid "Deletes the only copy of these files." msgstr "Exclui a única cópia destes arquivos." -#: crates/pdfs-gui/src/app/pages/devices.rs:973 +#: crates/pdfs-gui/src/app/pages/devices.rs:985 msgid "The local copy is unaffected." msgstr "A cópia local não é afetada." -#: crates/pdfs-gui/src/app/pages/devices.rs:980 +#: crates/pdfs-gui/src/app/pages/devices.rs:994 msgid "Stop Syncing" msgstr "Parar de sincronizar" -#: crates/pdfs-gui/src/app/pages/devices.rs:993 +#: crates/pdfs-gui/src/app/pages/devices.rs:1007 msgid "Stopped syncing folder" msgstr "A pasta deixou de ser sincronizada" -#: crates/pdfs-gui/src/app/pages/devices.rs:994 +#: crates/pdfs-gui/src/app/pages/devices.rs:1008 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:1005 +#: crates/pdfs-gui/src/app/pages/devices.rs:1019 msgid "Rename Computer" msgstr "Renomear computador" #. Translators: {name} is the computer's current name. -#: crates/pdfs-gui/src/app/pages/devices.rs:1007 +#: crates/pdfs-gui/src/app/pages/devices.rs:1021 #, rust-format msgid "Rename “{name}”." msgstr "Renomear “{name}”." -#: crates/pdfs-gui/src/app/pages/devices.rs:1032 -#: crates/pdfs-gui/src/app/pages/devices.rs:1044 +#: crates/pdfs-gui/src/app/pages/devices.rs:1046 +#: crates/pdfs-gui/src/app/pages/devices.rs:1058 msgid "Couldn't rename the computer" msgstr "Não foi possível renomear o computador" -#: crates/pdfs-gui/src/app/pages/devices.rs:1033 +#: crates/pdfs-gui/src/app/pages/devices.rs:1047 msgid "A name is required." msgstr "Um nome é obrigatório." -#: crates/pdfs-gui/src/app/pages/devices.rs:1043 +#: crates/pdfs-gui/src/app/pages/devices.rs:1057 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:1056 +#: crates/pdfs-gui/src/app/pages/devices.rs:1070 #, rust-format msgid "Type “{name}” to confirm" msgstr "Digite “{name}” para confirmar" -#: crates/pdfs-gui/src/app/pages/devices.rs:1061 +#: crates/pdfs-gui/src/app/pages/devices.rs:1075 msgid "Remove Computer?" msgstr "Remover computador?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1064 +#: crates/pdfs-gui/src/app/pages/devices.rs:1078 #, rust-format msgid "" "Remove “{name}” from this account?\n" @@ -2573,26 +2573,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:1070 +#: crates/pdfs-gui/src/app/pages/devices.rs:1084 #: 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:1087 +#: crates/pdfs-gui/src/app/pages/devices.rs:1101 msgid "Computer removed" msgstr "Computador removido" -#: crates/pdfs-gui/src/app/pages/devices.rs:1088 +#: crates/pdfs-gui/src/app/pages/devices.rs:1102 msgid "Couldn't remove the computer" msgstr "Não foi possível remover o computador" -#: crates/pdfs-gui/src/app/pages/devices.rs:1106 +#: crates/pdfs-gui/src/app/pages/devices.rs:1120 msgid "Continue This Backup Here?" msgstr "Continuar este backup aqui?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1109 +#: crates/pdfs-gui/src/app/pages/devices.rs:1123 #, rust-format msgid "" "This computer takes over the backup of “{name}”, for example after a " @@ -2611,25 +2611,25 @@ msgstr "" "movidas. Depois, use “Restaurar neste computador” para recuperar o que " "“{name}” sincronizava." -#: crates/pdfs-gui/src/app/pages/devices.rs:1114 +#: crates/pdfs-gui/src/app/pages/devices.rs:1128 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:1121 +#: crates/pdfs-gui/src/app/pages/devices.rs:1135 #, rust-format msgid "Now backing up as “{name}”" msgstr "Agora fazendo backup como “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1130 +#: crates/pdfs-gui/src/app/pages/devices.rs:1144 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:1146 +#: crates/pdfs-gui/src/app/pages/devices.rs:1160 msgid "Sync With This Computer?" msgstr "Sincronizar com este computador?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1149 +#: crates/pdfs-gui/src/app/pages/devices.rs:1163 #, rust-format msgid "" "This computer and “{name}” keep the same folders in step. A change or a " @@ -2646,25 +2646,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:1154 +#: crates/pdfs-gui/src/app/pages/devices.rs:1168 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:1161 +#: crates/pdfs-gui/src/app/pages/devices.rs:1175 #, rust-format msgid "Now syncing with “{name}”" msgstr "Agora sincronizando com “{name}”" -#: crates/pdfs-gui/src/app/pages/devices.rs:1177 +#: crates/pdfs-gui/src/app/pages/devices.rs:1191 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:1209 +#: crates/pdfs-gui/src/app/pages/devices.rs:1223 msgid "Move Backup to This Computer?" msgstr "Mover o backup para este computador?" -#: crates/pdfs-gui/src/app/pages/devices.rs:1212 +#: crates/pdfs-gui/src/app/pages/devices.rs:1226 #, rust-format msgid "" "The folders backed up by “{name}” move into this computer's backup in Proton " @@ -2681,12 +2681,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:1224 +#: crates/pdfs-gui/src/app/pages/devices.rs:1238 #, rust-format msgid "Moved the backup of “{name}”" msgstr "Backup de “{name}” movido" -#: crates/pdfs-gui/src/app/pages/devices.rs:1238 +#: crates/pdfs-gui/src/app/pages/devices.rs:1252 msgid "Couldn't move that backup" msgstr "Não foi possível mover esse backup" @@ -3271,57 +3271,57 @@ msgstr "Abrir em Arquivos" msgid "Change Location…" msgstr "Alterar local…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1412 +#: crates/pdfs-gui/src/app/pages/locations.rs:1415 msgid "Choose whether this folder keeps a full copy on this computer" msgstr "Escolher se esta pasta mantém uma cópia completa neste computador" -#: crates/pdfs-gui/src/app/pages/locations.rs:1428 +#: crates/pdfs-gui/src/app/pages/locations.rs:1431 msgid "Keep every file on this computer and in Proton Drive." msgstr "Manter todos os arquivos neste computador e no Proton Drive." -#: crates/pdfs-gui/src/app/pages/locations.rs:1433 +#: crates/pdfs-gui/src/app/pages/locations.rs:1436 msgid "Keep the files in Proton Drive and download each one when you open it." msgstr "" "Manter os arquivos no Proton Drive e baixar cada um quando você o abrir." #. Translators: a folder mode: files are kept in Proton Drive and fetched when opened. -#: crates/pdfs-gui/src/app/pages/locations.rs:1487 +#: crates/pdfs-gui/src/app/pages/locations.rs:1490 msgctxt "folder mode" msgid "Online only" msgstr "Somente online" #. Translators: a folder mode: a full copy is kept on this computer. -#: crates/pdfs-gui/src/app/pages/locations.rs:1490 +#: crates/pdfs-gui/src/app/pages/locations.rs:1493 msgctxt "folder mode" msgid "Synced" msgstr "Sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1501 +#: crates/pdfs-gui/src/app/pages/locations.rs:1504 msgid "Sync Now" msgstr "Sincronizar agora" -#: crates/pdfs-gui/src/app/pages/locations.rs:1505 +#: crates/pdfs-gui/src/app/pages/locations.rs:1508 msgid "Resume Syncing" msgstr "Retomar sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:1507 +#: crates/pdfs-gui/src/app/pages/locations.rs:1510 msgid "Pause Syncing" msgstr "Pausar sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +#: crates/pdfs-gui/src/app/pages/locations.rs:1516 msgid "Sync From Scratch…" msgstr "Sincronizar do zero…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1523 +#: crates/pdfs-gui/src/app/pages/locations.rs:1527 msgid "Stop Syncing…" msgstr "Parar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 msgid "Sync From Scratch?" msgstr "Sincronizar do zero?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#: crates/pdfs-gui/src/app/pages/locations.rs:1539 #, rust-format msgid "" "This computer forgets what it synced in {path} before and compares the " @@ -3333,20 +3333,20 @@ msgstr "" "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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1542 msgid "Sync From Scratch" msgstr "Sincronizar do zero" -#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +#: crates/pdfs-gui/src/app/pages/locations.rs:1561 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 +#: crates/pdfs-gui/src/app/pages/locations.rs:1581 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:1579 +#: crates/pdfs-gui/src/app/pages/locations.rs:1583 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3355,11 +3355,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:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1586 msgid "Make Online Only" msgstr "Tornar somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1618 +#: crates/pdfs-gui/src/app/pages/locations.rs:1622 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3368,62 +3368,66 @@ 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:1623 +#: crates/pdfs-gui/src/app/pages/locations.rs:1627 #, 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:1628 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 msgid "Download Folder?" msgstr "Baixar a pasta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1632 +#: crates/pdfs-gui/src/app/pages/locations.rs:1636 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Baixar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1656 +#: crates/pdfs-gui/src/app/pages/locations.rs:1660 msgid "Couldn't pause the folder" msgstr "Não foi possível pausar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1657 +#: crates/pdfs-gui/src/app/pages/locations.rs:1661 msgid "Couldn't resume the folder" msgstr "Não foi possível retomar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1663 +#: crates/pdfs-gui/src/app/pages/locations.rs:1667 msgid "Folder paused" msgstr "Pasta pausada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1664 +#: crates/pdfs-gui/src/app/pages/locations.rs:1668 msgid "Folder resumed" msgstr "Pasta retomada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1688 #: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1696 msgid "Couldn't sync" msgstr "Não foi possível sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1718 +#: crates/pdfs-gui/src/app/pages/locations.rs:1722 msgid "Shared folder" msgstr "Pasta compartilhada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1720 +#: crates/pdfs-gui/src/app/pages/locations.rs:1723 +msgid "My files mirror" +msgstr "Espelho de Meus arquivos" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1725 msgid "Going online only" msgstr "Tornando somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1721 +#: crates/pdfs-gui/src/app/pages/locations.rs:1726 msgid "Switching to synced" msgstr "Passando para sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1731 +#: crates/pdfs-gui/src/app/pages/locations.rs:1739 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:1745 +#: crates/pdfs-gui/src/app/pages/locations.rs:1755 msgid "not available" msgstr "indisponível" @@ -6609,6 +6613,12 @@ msgstr "{count} a" msgid "cannot reach the Proton Drive daemon: {error}" msgstr "não foi possível acessar o daemon do Proton Drive: {error}" +#, rust-format +#~ msgid "{n} image" +#~ msgid_plural "{n} images" +#~ msgstr[0] "{n} imagem" +#~ msgstr[1] "{n} imagens" + #~ msgid "" #~ "The verification page couldn't be opened, so the sign-in was cancelled. " #~ "Your system may keep the web view's sandbox from starting; the "