Compare commits

...
Author SHA1 Message Date
Nils Pukropp 800705ccb0 chore(aur): update packages to 3.7.0 2026-11-02 15:16:31 +00:00
nvrl 7ab14bb8f7 Merge pull request #76 from narrrl/chore/release-3.7.0
chore(release): 3.7.0
2026-11-02 15:34:08 +01:00
nvrl 9c8b6680a7 chore(release): 3.7.0 2026-11-02 15:18:39 +01:00
nvrl bbd913b87d fix(cli): show the last sync as a time in sync list and devices list
`pdfs sync list` and `pdfs devices list` printed the last sync as epoch
seconds, such as `synced: 1793570850` in issue #46. Both columns now go
through `last_synced`, which formats it like `pdfs activity` and prints
`never` for a folder that never synced. `--json` output is unchanged
(B278).
2026-11-02 15:18:31 +01:00
nvrl 04f4610e4d Merge pull request #75 from narrrl/fix/footer-cant-open
fix(gui): say "Can't open your Drive" in the sidebar while a mount keeps failing
2026-11-01 18:09:25 +01:00
nvrl 0a5afd0b6a Merge pull request #74 from narrrl/docs/verify-3.7.0-run
docs(bugs): mark B276 and B258 checked by the 3.7.0 account run
2026-11-01 18:01:43 +01:00
nvrl 163c54a1e9 fix(gui): say "Can't open your Drive" in the sidebar while a mount keeps failing
The service can run while its mount fails on every try, for example over
a folder with files in it (B277). The page then said "Can't open your
Drive", but the sidebar status read "Not connected / Proton Drive isn't
running", which was wrong. paint_disconnected now reads the same failure
record the pages read, once the service is known to be running, and
shows "Can't open your Drive" with the reason. A reply from the daemon
that lands while it looks wins.
2026-11-01 17:55:52 +01:00
nvrl 0d7c6e7bae docs(bugs): mark B276 and B258 checked by the 3.7.0 account run
The account run of `scripts/fuse-acceptance.sh --journal-check --durability`
on 2026-11-01, against a build of main, passed 464 cases with 103 skipped.
Its eight daemon restarts left no panic in the journal (B276), and
`journalctl -p warning` listed every WARN line the run logged (B258).
2026-11-01 17:47:23 +01:00
nvrl 10252fa84b Merge pull request #73 from narrrl/docs/changelog-3.7.0
docs(changelog): record the changes merged since 3.6.0
2026-11-01 16:33:55 +01:00
nvrl bf9ec0862a docs(changelog): record the changes merged since 3.6.0
Entries for #55 to #65 and #70, which merged without one.
2026-11-01 16:20:18 +01:00
nvrl d0d0c73a51 Merge pull request #72 from narrrl/fix/wipe-guard-majority
fix(fuse): stop a sync pass when nearly all of a large folder vanishes
2026-11-01 16:19:54 +01:00
nvrl 129ad1a50d fix(fuse): stop a sync pass when nearly all of a large folder vanishes
The wipe guards refused a pass only when every synced path was missing
on one side. One surviving file cleared them, so a half-mounted disk,
a restored backup that brought back one file, or a script that emptied
the folder and wrote one back made the next pass trash everything else
on Drive, and on every computer syncing the folder (B270).

Both guards now also refuse when nine in ten or more of the tracked
paths of a folder with at least 20 are missing at once. A smaller
folder still stops only on a total loss, since an ordinary cleanup can
delete most of it. The reason now gives the count.

B270 stays partly fixed: a smaller loss still goes through, and the
app does not yet offer to confirm the deletions.
2026-11-01 16:06:08 +01:00
nvrl 506a610273 Merge pull request #71 from narrrl/fix/refuse-non-empty-mountpoint
fix(core,fuse,cli,gui): refuse to mount My files over a folder with files in it
2026-11-01 16:05:38 +01:00
nvrl 5048492a83 fix(core,fuse,cli,gui): refuse to mount My files over a folder with files in it
FUSE mounts over a non-empty folder without complaint, so files already
in the My files folder were hidden under the mount: not uploaded, and
back only once the service stopped, so they looked deleted (#67, B277).

- pdfs-core: new `mountpoint` module. `not_empty` lists what is in a
  folder (hidden entries count); `mounted_fs_type` moves here from the
  CLI so the daemon can use it. `MountFailure` gains an optional
  `not_empty` field, which older readers ignore.
- pdfs-fuse: `mount_with` checks the folder before the root fetch and
  before any worker starts. A dead mount is cleared first; one of our
  own live mounts is left to `spawn_session`, as before.
- pdfs-cli: `cmd_daemon` records the folder in the failure record. The
  refusal backs off and retries like any mount failure, so emptying the
  folder is enough.
- pdfs-gui: the status pages explain the refusal, and a dialog offers
  to open the folder or choose another one, once per run of failures.
  The folder picker refuses a folder with files in it.

Translated in all catalogs. Docs: BUGS (B277), CHANGELOG, FAQ,
TROUBLESHOOTING, CONFIGURATION.
2026-11-01 15:30:28 +01:00
nvrl 321547fb77 Merge pull request #70 from narrrl/chore/deps-2026-11
chore(deps): update dependencies, bump parking_lot, rusqlite, gettext-rs
2026-11-01 15:11:09 +01:00
nvrl a06a8150fb chore(deps): update dependencies, bump parking_lot, rusqlite, gettext-rs
Refresh Cargo.lock to the newest compatible versions and move three
crates to their next minor release:

- parking_lot 0.12 -> 0.13
- rusqlite 0.40 -> 0.41 (newer bundled SQLite)
- gettext-rs 0.7 -> 0.8

gettext-rs 0.8 marks setlocale as unsafe; the three calls in i18n.rs
run before any thread starts, the same precondition the set_var calls
next to them already state.

rustc 1.99 deprecates AtomicX::fetch_update in favour of try_update
(stable since 1.95, below the 1.96 minimum), which failed
`clippy -D warnings` on main. Rename the two uses so clippy passes
without `-A deprecated`.

The open Dependabot alerts for zip (< 9.0.5) and rustls (< 0.23.46)
are already resolved on main by #69 (zip 9.2.0, rustls 0.23.46).
2026-11-01 13:55:32 +01:00
nvrl c4bce50d35 Merge pull request #52 from narrrl/fix/create-landing-counted
fix(fuse,core): count a new file's landing until its bytes are cached
2026-11-01 12:06:39 +01:00
nvrl d2b5916b99 Merge remote-tracking branch 'origin/main' into fix/create-landing-counted 2026-11-01 11:28:03 +01:00
nvrl 4626ce17a7 Merge pull request #69 from narrrl/dependabot/cargo/cargo-f3dd2e6b0d
build(deps): bump the cargo group across 1 directory with 2 updates
2026-11-01 11:27:45 +01:00
nvrl 630f316fe6 Merge pull request #65 from narrrl/fix/clean-stop-runtime
fix(cli): leave the runtime running on a stop so stragglers cannot panic
2026-11-01 11:27:41 +01:00
nvrl 801681f747 Merge remote-tracking branch 'origin/main' into fix/create-landing-counted
# Conflicts:
#	docs/BUGS.md
2026-11-01 11:14:15 +01:00
nvrl e7382f2c7e test(core): name zip's options type the way zip 9 accepts 2026-11-01 11:12:17 +01:00
dependabot[bot] 7046f0f3ef build(deps): bump the cargo group across 1 directory with 2 updates
Bumps the cargo group with 2 updates in the / directory: [zip](https://github.com/zip-rs/zip2) and [rustls](https://github.com/rustls/rustls).


Updates `zip` from 8.6.0 to 9.0.5
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v8.6.0...v9.0.5)

Updates `rustls` from 0.23.45 to 0.23.46
- [Release notes](https://github.com/rustls/rustls/releases)
- [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rustls/rustls/compare/v/0.23.45...v/0.23.46)

---
updated-dependencies:
- dependency-name: zip
  dependency-version: 9.0.5
  dependency-type: direct:production
  dependency-group: cargo
- dependency-name: rustls
  dependency-version: 0.23.46
  dependency-type: indirect
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-31 23:39:08 +00:00
nvrl 37e8dae61b Merge pull request #54 from narrrl/docs/bugs-issue-audit
docs(bugs): record the audit of issues #53, #46, #40 and #38
2026-10-31 19:44:18 +01:00
nvrl c52f2098f2 Merge pull request #64 from narrrl/chore/sdk-0.10.1
chore(deps): bump proton-sdk and proton-drive-rs to 0.10.1
2026-10-31 19:40:34 +01:00
nvrl f4a2674b9c Merge pull request #63 from narrrl/fix/sim-flakes-and-open-race
fix(fuse): retry a write open whose queued revision landed under the copy
2026-10-31 19:40:24 +01:00
nvrl 347861bbc1 Merge pull request #62 from narrrl/fix/restore-outcome-and-walk-gaps
fix(fuse,cli): keep a pass going past a failed listing, report skipped restores
2026-10-31 19:40:14 +01:00
nvrl c57763b07f Merge pull request #61 from narrrl/fix/diagnose-coverage
fix(cli): have diagnose report failing writes, a pause and folders in error
2026-10-31 19:40:04 +01:00
nvrl 846dfd8d14 Merge pull request #60 from narrrl/fix/db-errors-not-offline
fix(core): read database errors handed to from_api as internal, not offline
2026-10-31 19:39:53 +01:00
nvrl 2ae99de844 Merge pull request #59 from narrrl/fix/mount-failure-surfaced
fix(cli,core,fuse,gui): say why the mount keeps failing, and back off
2026-10-31 19:39:44 +01:00
nvrl 69ff216e7d Merge pull request #58 from narrrl/fix/never-synced-label
fix(gui): say a folder is waiting for its first sync, not up to date
2026-10-31 19:39:34 +01:00
nvrl 639ca359fa fix(fuse,core): count a new file's landing until its bytes are cached
A create that carries a file's bytes retired its op, then cached the
bytes and gave the tree the real uid. Nothing counted that window, so
`pdfs status` read empty while it ran, which B119 promises means the
file reads without the network.

A delete in that window found the placeholder uid in the tree and
trashed the node by its real uid. `queue_trash` asked the tree whether
that uid was open, found no entry, and dropped the cached bytes the open
handle reads. If the cache store ran at the same moment, its tag was
written after the eviction and never removed. CI caught that as a
stray .meta file.

The create's landing is now counted like an upload's, from the op's
retirement until the tree has the real uid. The delete and the replace
pass whether they found the file open. Opening the cache removes a tag
whose bytes are gone, which also covers a crash between an eviction's
two removals. The simulations wait for `Daemon::drained`, which counts
the landing, before they go offline.

B255 and B256 move to fixed: the account run checked both.
2026-10-27 14:44:34 +01:00
44 changed files with 3173 additions and 1744 deletions

No files matched your search

Generated
+391 -402
View File
File diff suppressed because it is too large. Load diff
+4 -4
View File
@@ -3,7 +3,7 @@ resolver = "2"
members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"] members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"]
[workspace.package] [workspace.package]
version = "3.6.0" version = "3.7.0"
edition = "2024" edition = "2024"
license = "MIT" license = "MIT"
authors = ["Nils Pukropp <contact@narl.io>"] authors = ["Nils Pukropp <contact@narl.io>"]
@@ -33,7 +33,7 @@ anyhow = "1"
# wedge every later acquisition of it: `Workers` catches the unwind to keep the # wedge every later acquisition of it: `Workers` catches the unwind to keep the
# pool alive, and `std::sync::Mutex` would defeat that by poisoning the state # pool alive, and `std::sync::Mutex` would defeat that by poisoning the state
# the recovered worker needs. # the recovered worker needs.
parking_lot = "0.12" parking_lot = "0.13"
tracing = "0.1" tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] } tracing-subscriber = { version = "0.3", features = ["env-filter"] }
directories = "6" directories = "6"
@@ -41,7 +41,7 @@ ignore = "0.4"
sha2 = "0.11" sha2 = "0.11"
# Google Takeout exports are zip sets; the importer reads their central # Google Takeout exports are zip sets; the importer reads their central
# directories and streams entries out without extracting to disk first. # directories and streams entries out without extracting to disk first.
zip = { version = "8", default-features = false, features = ["deflate"] } zip = { version = "9", default-features = false, features = ["deflate"] }
# Proton's photo duplicate detection is keyed on the plaintext SHA-1, so an # Proton's photo duplicate detection is keyed on the plaintext SHA-1, so an
# import has to speak SHA-1 whatever its age. # import has to speak SHA-1 whatever its age.
sha1 = "0.11" sha1 = "0.11"
@@ -49,7 +49,7 @@ sha1 = "0.11"
# formats a camera or phone actually produces — the rest of the crate's codecs # formats a camera or phone actually produces — the rest of the crate's codecs
# would be dead weight in the daemon. # would be dead weight in the daemon.
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp", "gif", "tiff", "bmp", "rayon"] } image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp", "gif", "tiff", "bmp", "rayon"] }
rusqlite = { version = "0.40", features = ["bundled"] } rusqlite = { version = "0.41", features = ["bundled"] }
# keyring 4 split into `keyring-core` plus per-platform stores. The libdbus # keyring 4 split into `keyring-core` plus per-platform stores. The libdbus
# Secret Service store is the one keyring 3's `sync-secret-service` wrapped, and # Secret Service store is the one keyring 3's `sync-secret-service` wrapped, and
# with no `target` it matches items v3 wrote, so existing logins survive. # with no `target` it matches items v3 wrote, so existing logins survive.
+55 -30
View File
@@ -1036,10 +1036,7 @@ fn cmd_devices(action: DeviceCmd) -> Result<()> {
CtlResponse::Devices { items } if items.is_empty() => println!("No devices."), CtlResponse::Devices { items } if items.is_empty() => println!("No devices."),
CtlResponse::Devices { items } => { CtlResponse::Devices { items } => {
for d in items { for d in items {
let sync = d let sync = last_synced(d.last_sync);
.last_sync
.map(|t| t.to_string())
.unwrap_or_else(|| "never".to_string());
let tag = match (d.adopted, d.this_device) { let tag = match (d.adopted, d.this_device) {
(true, _) => " *adopted*", (true, _) => " *adopted*",
(false, true) => " *this machine*", (false, true) => " *this machine*",
@@ -1130,11 +1127,7 @@ fn cmd_sync(action: SyncCmd) -> Result<()> {
} }
CtlResponse::SyncFolders { items } => { CtlResponse::SyncFolders { items } => {
for f in items { for f in items {
let sync = if f.last_sync == 0 { let sync = last_synced(Some(f.last_sync));
"never".to_string()
} else {
f.last_sync.to_string()
};
// A queued switch is reported as the mode the folder is moving // A queued switch is reported as the mode the folder is moving
// to, so `sync list` never reads as if the request was dropped. // to, so `sync list` never reads as if the request was dropped.
let mode = match &f.pending_mode { let mode = match &f.pending_mode {
@@ -1915,6 +1908,15 @@ fn format_epoch(secs: i64) -> String {
format!("{m:02}-{d:02} {h:02}:{mi:02}") format!("{m:02}-{d:02} {h:02}:{mi:02}")
} }
/// The `synced:` column of `sync list` and `devices list`: when the last pass
/// finished, or `never`. The daemon reports 0 for a folder that never synced.
fn last_synced(secs: Option<i64>) -> String {
match secs {
Some(secs) if secs > 0 => format_epoch(secs),
_ => "never".to_string(),
}
}
fn cmd_leave(uid: String) -> Result<()> { fn cmd_leave(uid: String) -> Result<()> {
ok_or_bail(control_request(CtlRequest::LeaveShared { uid })?) ok_or_bail(control_request(CtlRequest::LeaveShared { uid })?)
} }
@@ -2432,6 +2434,7 @@ fn cmd_daemon(mountpoint: Option<PathBuf>) -> Result<()> {
since: failure.as_ref().map_or(now, |f| f.since), since: failure.as_ref().map_or(now, |f| f.since),
attempts, attempts,
next_attempt: now + delay.as_secs() as i64, next_attempt: now + delay.as_secs() as i64,
not_empty: not_empty_cause(&e),
}; };
if let Err(e) = pdfs_core::mountfail::record(&state_dir, &record) { if let Err(e) = pdfs_core::mountfail::record(&state_dir, &record) {
tracing::warn!(error = %e, "could not record the mount failure"); tracing::warn!(error = %e, "could not record the mount failure");
@@ -2444,6 +2447,23 @@ fn cmd_daemon(mountpoint: Option<PathBuf>) -> Result<()> {
} }
} }
/// The folder in the way, when `error` is a mount refused over a folder that
/// already has files in it. The refusal travels inside an `io::Error`, whose
/// `source` skips the error it wraps, so each link is unwrapped by hand.
fn not_empty_cause(error: &anyhow::Error) -> Option<pdfs_core::mountpoint::NotEmpty> {
error.chain().find_map(|cause| {
cause
.downcast_ref::<pdfs_core::mountpoint::NotEmpty>()
.or_else(|| {
cause
.downcast_ref::<std::io::Error>()?
.get_ref()?
.downcast_ref::<pdfs_core::mountpoint::NotEmpty>()
})
.cloned()
})
}
/// How long to wait before mount attempt `attempts + 1`, after `attempts` /// How long to wait before mount attempt `attempts + 1`, after `attempts`
/// failures in a row. /// failures in a row.
/// ///
@@ -3738,26 +3758,6 @@ fn executable_on_path(name: &str) -> bool {
}) })
} }
fn mounted_fs_type(path: &Path) -> Option<String> {
let wanted = path.canonicalize().ok()?;
let mounts = std::fs::read_to_string("/proc/self/mountinfo").ok()?;
mounts
.lines()
.filter_map(|line| {
let fields: Vec<_> = line.split_whitespace().collect();
let separator = fields.iter().position(|field| *field == "-")?;
let encoded = *fields.get(4)?;
let decoded = encoded.replace("\\040", " ").replace("\\011", "\t");
let mountpoint = PathBuf::from(decoded);
if mountpoint.canonicalize().ok()? == wanted {
Some(fields.get(separator + 1)?.to_string())
} else {
None
}
})
.next()
}
/// Create, sync, and remove a new file without ever replacing an existing one. /// Create, sync, and remove a new file without ever replacing an existing one.
fn writable_probe(dir: &Path) -> std::io::Result<()> { fn writable_probe(dir: &Path) -> std::io::Result<()> {
let name = format!(".pdfs-diagnose-probe-{}", std::process::id()); let name = format!(".pdfs-diagnose-probe-{}", std::process::id());
@@ -3920,7 +3920,7 @@ fn cmd_diagnose() -> Result<()> {
outdated_daemon_note(&version), outdated_daemon_note(&version),
); );
} }
let live_type = mounted_fs_type(Path::new(&mountpoint)); let live_type = pdfs_core::mountpoint::mounted_fs_type(Path::new(&mountpoint));
let is_fuse = live_type let is_fuse = live_type
.as_deref() .as_deref()
.is_some_and(|kind| kind.starts_with("fuse")); .is_some_and(|kind| kind.starts_with("fuse"));
@@ -4329,6 +4329,23 @@ mod login_wait_tests {
assert_eq!(secs, [5, 10, 20, 40, 80, 120, 120, 120]); assert_eq!(secs, [5, 10, 20, 40, 80, 120, 120, 120]);
assert_eq!(mount_retry_delay(u32::MAX).as_secs(), 120); assert_eq!(mount_retry_delay(u32::MAX).as_secs(), 120);
} }
/// A refusal over a folder with files in it reaches the failure record
/// through the `io::Error` and the context around it (`docs/BUGS.md` B277).
#[test]
fn a_mount_refused_over_files_is_recorded_as_such() {
let found = pdfs_core::mountpoint::NotEmpty {
path: PathBuf::from("/home/you/ProtonDrive"),
entries: vec!["Work".into()],
count: 1,
};
let error =
anyhow::Error::new(std::io::Error::other(found.clone())).context("mount failed");
assert_eq!(not_empty_cause(&error), Some(found));
let other =
anyhow::Error::new(std::io::Error::other("missing key")).context("mount failed");
assert_eq!(not_empty_cause(&other), None);
}
use std::time::Duration; use std::time::Duration;
#[test] #[test]
@@ -4437,6 +4454,14 @@ mod login_wait_tests {
assert_eq!(format_epoch_utc(-86_400), "1969-12-31"); assert_eq!(format_epoch_utc(-86_400), "1969-12-31");
} }
#[test]
fn last_synced_shows_a_time_not_epoch_seconds() {
// B278: issue #46 showed `synced: 1793570850`.
assert_eq!(last_synced(Some(1_793_570_850)), "11-01 22:07");
assert_eq!(last_synced(Some(0)), "never");
assert_eq!(last_synced(None), "never");
}
#[test] #[test]
fn a_forged_looking_invitation_is_flagged_not_stated() { fn a_forged_looking_invitation_is_flagged_not_stated() {
let mut entry = pdfs_core::control::DirEntry { let mut entry = pdfs_core::control::DirEntry {
+33 -1
View File
@@ -621,10 +621,20 @@ impl ContentCache {
for entry in rd.flatten() { for entry in rd.flatten() {
let name = entry.file_name(); let name = entry.file_name();
let Some(name) = name.to_str() else { continue }; let Some(name) = name.to_str() else { continue };
// A `.meta` tags the blob named like it without the suffix. One
// whose blob is gone is what an eviction leaves between its two
// removals, by a crash or by a store of the same uid landing in
// between, and nothing else would ever remove it.
if let Some(blob) = name.strip_suffix(".meta") {
if !dir.join(blob).exists() {
let _ = std::fs::remove_file(entry.path());
}
continue;
}
// `.geom` is a block-geometry sidecar (see `GeometryMeta`), tens // `.geom` is a block-geometry sidecar (see `GeometryMeta`), tens
// of bytes and not a cached block; like `.meta` it is neither // of bytes and not a cached block; like `.meta` it is neither
// budgeted nor evictable on its own. // budgeted nor evictable on its own.
if name.ends_with(".meta") || name.ends_with(".geom") { if name.ends_with(".geom") {
continue; continue;
} }
// A `.tmp` is a staging file from a store that never completed // A `.tmp` is a staging file from a store that never completed
@@ -2250,6 +2260,28 @@ mod tests {
assert!(total <= 8, "budget enforced after reconcile, total={total}"); assert!(total <= 8, "budget enforced after reconcile, total={total}");
} }
/// An eviction removes the blob, then its tag. A crash in between, or a
/// store of the same uid landing in between, left the tag on its own, and
/// nothing removed it.
#[test]
fn a_tag_without_its_blob_is_swept_at_open() {
let dir = TempDir::new();
let content = dir.path().join("content");
let pins = dir.path().join("pins.json");
let db = Arc::new(Db::open_in_memory().unwrap());
{
let c = ContentCache::open(content.clone(), pins.clone(), 0, db.clone()).unwrap();
c.store(&uid("kept"), 1, 4, b"kept").unwrap();
c.store(&uid("gone"), 1, 4, b"gone").unwrap();
std::fs::remove_file(c.blob_path(&uid("gone"))).unwrap();
}
let c = ContentCache::open(content, pins, 0, db).unwrap();
assert!(!c.meta_path(&uid("gone")).exists());
assert!(c.meta_path(&uid("kept")).exists());
assert_eq!(c.read_range(&uid("kept"), 1, 4, 0, 4).unwrap(), b"kept");
}
#[test] #[test]
fn stale_metadata_is_a_miss() { fn stale_metadata_is_a_miss() {
let (c, _d) = cache(); let (c, _d) = cache();
+1
View File
@@ -16,6 +16,7 @@ pub mod keycheck;
pub mod localindex; pub mod localindex;
pub mod menu; pub mod menu;
pub mod mountfail; pub mod mountfail;
pub mod mountpoint;
pub mod mounts; pub mod mounts;
pub mod opener; pub mod opener;
pub mod places; pub mod places;
+14
View File
@@ -24,6 +24,11 @@ pub struct MountFailure {
pub attempts: u32, pub attempts: u32,
/// Unix seconds of the next attempt. /// Unix seconds of the next attempt.
pub next_attempt: i64, pub next_attempt: i64,
/// Set when the mount was refused because the folder already has files in
/// it, so the app can explain that in the user's language. Absent in a
/// file an older daemon wrote.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub not_empty: Option<crate::mountpoint::NotEmpty>,
} }
/// Where the failure is kept for the state directory `state_dir`. /// Where the failure is kept for the state directory `state_dir`.
@@ -65,6 +70,7 @@ mod tests {
since: 1_700_000_000, since: 1_700_000_000,
attempts: 3, attempts: 3,
next_attempt: 1_700_000_040, next_attempt: 1_700_000_040,
not_empty: None,
}; };
record(&dir, &failure).unwrap(); record(&dir, &failure).unwrap();
assert_eq!(read(&dir), Some(failure)); assert_eq!(read(&dir), Some(failure));
@@ -72,4 +78,12 @@ mod tests {
assert_eq!(read(&dir), None); assert_eq!(read(&dir), None);
let _ = std::fs::remove_dir_all(&dir); let _ = std::fs::remove_dir_all(&dir);
} }
#[test]
fn a_failure_an_older_daemon_wrote_still_reads() {
let old = r#"{"error":"missing key","since":1,"attempts":2,"next_attempt":3}"#;
let failure: MountFailure = serde_json::from_str(old).unwrap();
assert_eq!(failure.not_empty, None);
assert_eq!(failure.attempts, 2);
}
} }
+147
View File
@@ -0,0 +1,147 @@
//! Whether a folder can take the My files mount without hiding anything.
//!
//! FUSE mounts over a folder that already has files in it without a word. The
//! files then sit under the mount, out of sight: not uploaded, and back only
//! once the service stops, so they look deleted (`docs/BUGS.md` B277, #67).
//! The daemon refuses such a folder, and the app refuses it when it is picked.
use std::path::{Path, PathBuf};
use serde::{Deserialize, Serialize};
/// The file system type the kernel reports for this client's own mounts.
pub const OWN_FS_TYPE: &str = "fuse.protondrive";
/// How many of a folder's entries an error names.
const NAMED_ENTRIES: usize = 3;
/// A folder that already has something in it.
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct NotEmpty {
/// The folder.
pub path: PathBuf,
/// The first few names in it, sorted.
pub entries: Vec<String>,
/// How many entries it has in all.
pub count: usize,
}
impl std::fmt::Display for NotEmpty {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} is not empty (holds ", self.path.display())?;
write!(f, "{}", self.entries.join(", "))?;
let rest = self.count.saturating_sub(self.entries.len());
if rest > 0 {
write!(f, " and {rest} more")?;
}
write!(
f,
"); My files would hide those files. Move them out, or choose another folder for My files"
)
}
}
impl std::error::Error for NotEmpty {}
/// What is in `dir`, if anything. A folder that does not exist yet is empty.
/// Hidden entries count: a `.directory` or a `.Trash-1000` hidden under the
/// mount is as lost as any other file.
pub fn not_empty(dir: &Path) -> std::io::Result<Option<NotEmpty>> {
let read = match std::fs::read_dir(dir) {
Ok(read) => read,
Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(None),
Err(e) => return Err(e),
};
let mut names = read
.map(|entry| entry.map(|entry| entry.file_name().to_string_lossy().into_owned()))
.collect::<std::io::Result<Vec<_>>>()?;
if names.is_empty() {
return Ok(None);
}
names.sort();
let count = names.len();
names.truncate(NAMED_ENTRIES);
Ok(Some(NotEmpty {
path: dir.to_path_buf(),
entries: names,
count,
}))
}
/// The file system type mounted at `path`, as `/proc/self/mountinfo` names it
/// (`ext4`, `fuse.protondrive`, …), or `None` when nothing is mounted there.
pub fn mounted_fs_type(path: &Path) -> Option<String> {
let wanted = path.canonicalize().ok()?;
let mounts = std::fs::read_to_string("/proc/self/mountinfo").ok()?;
mounts
.lines()
.filter_map(|line| {
let fields: Vec<_> = line.split_whitespace().collect();
let separator = fields.iter().position(|field| *field == "-")?;
let encoded = *fields.get(4)?;
let decoded = encoded.replace("\\040", " ").replace("\\011", "\t");
let mountpoint = PathBuf::from(decoded);
if mountpoint.canonicalize().ok()? == wanted {
Some(fields.get(separator + 1)?.to_string())
} else {
None
}
})
.next()
}
#[cfg(test)]
mod tests {
use super::*;
fn temp_dir(name: &str) -> PathBuf {
let dir =
std::env::temp_dir().join(format!("pdfs-mountpoint-{name}-{}", std::process::id()));
let _ = std::fs::remove_dir_all(&dir);
std::fs::create_dir_all(&dir).unwrap();
dir
}
#[test]
fn an_empty_or_missing_folder_takes_the_mount() {
let dir = temp_dir("empty");
assert_eq!(not_empty(&dir).unwrap(), None);
assert_eq!(not_empty(&dir.join("missing")).unwrap(), None);
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn a_folder_with_files_is_refused_and_named() {
let dir = temp_dir("files");
for name in ["report.pdf", "Notes", ".directory", "zeta.txt"] {
std::fs::write(dir.join(name), b"x").unwrap();
}
let found = not_empty(&dir).unwrap().expect("must refuse");
assert_eq!(found.count, 4);
assert_eq!(found.entries, [".directory", "Notes", "report.pdf"]);
let message = found.to_string();
assert!(message.contains("is not empty"), "{message}");
assert!(
message.contains(".directory, Notes, report.pdf and 1 more"),
"{message}"
);
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn a_hidden_file_alone_is_enough_to_refuse() {
let dir = temp_dir("hidden");
std::fs::write(dir.join(".Trash-1000"), b"").unwrap();
let found = not_empty(&dir).unwrap().expect("must refuse");
assert_eq!(found.count, 1);
assert!(!found.to_string().contains("more"));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn a_plain_folder_is_not_a_mount() {
let dir = temp_dir("plain");
assert_eq!(mounted_fs_type(&dir), None);
let _ = std::fs::remove_dir_all(&dir);
}
}
+2 -2
View File
@@ -1332,8 +1332,8 @@ mod tests {
)); ));
let file = std::fs::File::create(&path).unwrap(); let file = std::fs::File::create(&path).unwrap();
let mut zip = zip::ZipWriter::new(file); let mut zip = zip::ZipWriter::new(file);
let options: zip::write::FileOptions<'_, ()> = let options = zip::write::SimpleFileOptions::default()
zip::write::FileOptions::default().compression_method(zip::CompressionMethod::Stored); .compression_method(zip::CompressionMethod::Stored);
for (name, body) in files { for (name, body) in files {
zip.start_file(*name, options).unwrap(); zip.start_file(*name, options).unwrap();
zip.write_all(body).unwrap(); zip.write_all(body).unwrap();
+1 -1
View File
@@ -110,7 +110,7 @@ struct ControlHandlerPermit;
impl ControlHandlerPermit { impl ControlHandlerPermit {
fn acquire() -> Option<Self> { fn acquire() -> Option<Self> {
ACTIVE_CONTROL_HANDLERS ACTIVE_CONTROL_HANDLERS
.fetch_update(Ordering::AcqRel, Ordering::Acquire, |active| { .try_update(Ordering::AcqRel, Ordering::Acquire, |active| {
(active < MAX_CONTROL_HANDLERS).then_some(active + 1) (active < MAX_CONTROL_HANDLERS).then_some(active + 1)
}) })
.ok() .ok()
+7
View File
@@ -1281,6 +1281,13 @@ impl Core {
sent: (&sent.0, &sent.1), sent: (&sent.0, &sent.1),
landed: (&home.to_string(), &name), landed: (&home.to_string(), &name),
}; };
// Counted from the op's retirement until the bytes are cached and the
// tree has the real uid, as an upload is. Uncounted, the queue read
// empty while that still ran: a delete in between took an open file
// for closed and dropped what its handle reads, and a script that
// waited for an empty queue read the file before it was cached
// (`docs/BUGS.md` B257).
let _landing = LandingUpload::begin(&self.landing_uploads);
let newer = match self.retire_create(op, uploaded, &landing, &local, &real)? { let newer = match self.retire_create(op, uploaded, &landing, &local, &real)? {
CreateRetired::Withdrawn { trash } => { CreateRetired::Withdrawn { trash } => {
return self.trash_withdrawn_create(op, trash, &local, &real, &name); return self.trash_withdrawn_create(op, trash, &local, &real, &name);
+1 -1
View File
@@ -2376,7 +2376,7 @@ impl ProtonFs {
// regardless — the file is gone from their point of view the moment the // regardless — the file is gone from their point of view the moment the
// command returns. The same when the network goes // command returns. The same when the network goes
// away under the remote call below. // away under the remote call below.
let queue_it = |reply: ReplyEmpty| match self.core.queue_trash(&uid, name) { let queue_it = |reply: ReplyEmpty| match self.core.queue_trash(&uid, name, open_now) {
Ok(()) => reply.ok(), Ok(()) => reply.ok(),
Err(e) => reply.error(e), Err(e) => reply.error(e),
}; };
+14 -6
View File
@@ -3999,7 +3999,12 @@ impl Core {
/// the cached ones, as when the trash is sent at once: a partial write /// the cached ones, as when the trash is sent at once: a partial write
/// fills its gaps from them, offline too (`docs/BUGS.md` B186). The final /// fills its gaps from them, offline too (`docs/BUGS.md` B186). The final
/// close or the trash landing, whichever comes last, lets go of them. /// close or the trash landing, whichever comes last, lets go of them.
fn queue_trash(&self, uid: &NodeUid, name: &str) -> Result<(), Errno> { ///
/// `open` is whether the caller found the file open. A create that landed
/// under a delete is trashed by its real uid before the tree has it, so
/// asking the tree alone took an open file for closed (`docs/BUGS.md`
/// B257).
fn queue_trash(&self, uid: &NodeUid, name: &str, open: bool) -> Result<(), Errno> {
self.require_uid_writable(uid)?; self.require_uid_writable(uid)?;
// The bytes below are about to be discarded, and a drain worker may be // The bytes below are about to be discarded, and a drain worker may be
// reading them onto the wire right now. Stop it first: with several // reading them onto the wire right now. Stop it first: with several
@@ -4014,7 +4019,7 @@ impl Core {
error!(%uid, error = %e, "queueing trash failed"); error!(%uid, error = %e, "queueing trash failed");
Errno::EIO Errno::EIO
})?; })?;
let open_now = self.is_open_anywhere(uid); let open_now = open || self.is_open_anywhere(uid);
if open_now { if open_now {
let read_from = self.pending_blob(uid); let read_from = self.pending_blob(uid);
self.release_dropped_below( self.release_dropped_below(
@@ -5383,9 +5388,12 @@ impl Core {
/// `unlink` under an open handle. Its queued ops go now, or the drain would /// `unlink` under an open handle. Its queued ops go now, or the drain would
/// upload to the node after it was trashed (`docs/BUGS.md` B106). /// upload to the node after it was trashed (`docs/BUGS.md` B106).
fn remove_replaced(&self, ino: u64, uid: &NodeUid, name: &str) -> Result<(), Errno> { fn remove_replaced(&self, ino: u64, uid: &NodeUid, name: &str) -> Result<(), Errno> {
// Asked under the uid the tree has now: a landed create's real uid is
// not in the tree yet (`docs/BUGS.md` B257).
let open = self.is_open_anywhere(uid);
let landed; let landed;
let uid = if is_local_uid(uid) { let uid = if is_local_uid(uid) {
if self.is_open_anywhere(uid) { if open {
self.withdraw_queued_ops(uid)?; self.withdraw_queued_ops(uid)?;
} else { } else {
self.discard_queued_ops(uid)?; self.discard_queued_ops(uid)?;
@@ -5410,7 +5418,7 @@ impl Core {
// Local-first or offline, or the network goes away under the call: // Local-first or offline, or the network goes away under the call:
// queue the trash. The rename that follows queues as well, behind it. // queue the trash. The rename that follows queues as well, behind it.
if !self.sends_inline() { if !self.sends_inline() {
return self.queue_trash(uid, name); return self.queue_trash(uid, name, open);
} }
self.require_uid_writable(uid)?; self.require_uid_writable(uid)?;
if let Err(e) = self if let Err(e) = self
@@ -5418,7 +5426,7 @@ impl Core {
.and_then(batch::into_unit) .and_then(batch::into_unit)
{ {
if self.lost_link(&e, "trash a replaced node") { if self.lost_link(&e, "trash a replaced node") {
return self.queue_trash(uid, name); return self.queue_trash(uid, name, open);
} }
error!(%uid, name, error = %e, "trashing the node a rename replaces failed"); error!(%uid, name, error = %e, "trashing the node a rename replaces failed");
self.log_activity(ActivityKind::Trash, name, e.to_string(), false); self.log_activity(ActivityKind::Trash, name, e.to_string(), false);
@@ -9258,7 +9266,7 @@ mod tests {
assert!(!replaced.contains("st.forget(uid)")); assert!(!replaced.contains("st.forget(uid)"));
assert_before( assert_before(
replaced, replaced,
"if self.is_open_anywhere(uid)", "let open = self.is_open_anywhere(uid)",
"self.discard_queued_ops(uid)", "self.discard_queued_ops(uid)",
); );
assert_before(replaced, "if open_now", "self.cache.evict(uid)"); assert_before(replaced, "if open_now", "self.cache.evict(uid)");
+24
View File
@@ -196,6 +196,29 @@ pub(super) fn clear_stale_mount(mountpoint: &Path) {
} }
} }
/// Refuse to mount My files over a folder that already has files in it: FUSE
/// would hide them, unsent and out of sight, until the service stops
/// (`docs/BUGS.md` B277). Runs before the root fetch and before any worker
/// starts, so a refusal costs nothing to retry.
///
/// A dead mount is cleared first, since it cannot be listed. One of this
/// client's own live mounts is left to [`spawn_session`], which clears it as it
/// always has; listing it would show Drive's files, not the folder's.
pub(super) fn check_mountpoint(mountpoint: &Path) -> std::io::Result<()> {
if is_stale_mount(mountpoint) {
clear_stale_mount(mountpoint);
}
if pdfs_core::mountpoint::mounted_fs_type(mountpoint).as_deref()
== Some(pdfs_core::mountpoint::OWN_FS_TYPE)
{
return Ok(());
}
match pdfs_core::mountpoint::not_empty(mountpoint)? {
Some(found) => Err(std::io::Error::other(found)),
None => Ok(()),
}
}
/// `sync_state` key holding the uid of the My Files root, so a later run can /// `sync_state` key holding the uid of the My Files root, so a later run can
/// recover it from `nodes` without the API. /// recover it from `nodes` without the API.
const ROOT_UID_KEY: &str = "root_uid"; const ROOT_UID_KEY: &str = "root_uid";
@@ -427,6 +450,7 @@ pub(crate) fn mount_with(
// Start the uptime clock here rather than at the first `pdfs diagnostics`, // Start the uptime clock here rather than at the first `pdfs diagnostics`,
// so the age it reports is the daemon's own. // so the age it reports is the daemon's own.
super::diagnostics::start_clock(); super::diagnostics::start_clock();
check_mountpoint(mountpoint)?;
let (root, start) = fetch_or_recall_root(drive.as_ref(), &rt, &db)?; let (root, start) = fetch_or_recall_root(drive.as_ref(), &rt, &db)?;
let online = start == Start::Online; let online = start == Start::Online;
let scope = root.tree_event_scope_id(); let scope = root.tree_event_scope_id();
+1 -1
View File
@@ -1344,7 +1344,7 @@ impl Core {
let next = |current| if current == u64::MAX { 1 } else { current + 1 }; let next = |current| if current == u64::MAX { 1 } else { current + 1 };
let previous = self let previous = self
.file_thumb_generation .file_thumb_generation
.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |current| { .try_update(Ordering::SeqCst, Ordering::SeqCst, |current| {
Some(next(current)) Some(next(current))
}) })
.expect("generation update always succeeds"); .expect("generation update always succeeds");
+104 -2
View File
@@ -130,6 +130,22 @@ impl Daemon {
} }
} }
/// Whether nothing is queued and no upload is still landing, as `pdfs
/// status` counts it. An empty [`Self::pending`] is not enough before a
/// read that needs the cache: the op goes before the uploaded bytes are
/// cached, so a test that went offline at once raced the drain.
pub(crate) fn drained(&self) -> bool {
self.pending().is_ok_and(|items| items.is_empty())
&& matches!(
self.request(&Request::Status),
Ok(Response::Status {
pending_uploads: 0,
pending_changes: 0,
..
})
)
}
/// Whether the mount believes Proton is reachable, as `pdfs status` shows /// Whether the mount believes Proton is reachable, as `pdfs status` shows
/// it. /// it.
pub(crate) fn online(&self) -> io::Result<bool> { pub(crate) fn online(&self) -> io::Result<bool> {
@@ -393,6 +409,43 @@ mod tests {
let _ = std::fs::remove_dir_all(&dir); let _ = std::fs::remove_dir_all(&dir);
} }
/// A folder with files in it is not mounted over, and its files stay where
/// they are; once it is empty, the mount comes up (B277, #67).
#[test]
#[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"]
fn a_mount_over_local_files_is_refused_and_leaves_them_alone() {
let drive = FakeDrive::new();
let dir = scratch("not-empty");
let mountpoint = dir.join("mnt");
std::fs::create_dir_all(mountpoint.join("Work")).unwrap();
std::fs::write(mountpoint.join("notes.txt"), b"local only").unwrap();
let error = Daemon::start(&dir, drive.client(1, Faults::lan()))
.err()
.expect("the mount must be refused");
let found = error
.get_ref()
.and_then(|inner| inner.downcast_ref::<pdfs_core::mountpoint::NotEmpty>())
.unwrap_or_else(|| panic!("refused for another reason: {error}"));
assert_eq!(found.entries, ["Work", "notes.txt"]);
assert!(!is_mounted(&mountpoint));
assert_eq!(
std::fs::read(mountpoint.join("notes.txt")).unwrap(),
b"local only"
);
assert!(
drive.tree().is_empty(),
"nothing went to Drive: {:?}",
drive.tree()
);
std::fs::remove_file(mountpoint.join("notes.txt")).unwrap();
std::fs::remove_dir(mountpoint.join("Work")).unwrap();
let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap();
assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown)));
let _ = std::fs::remove_dir_all(&dir);
}
/// Write `bytes` at `offset` into an existing file, without truncating it. /// Write `bytes` at `offset` into an existing file, without truncating it.
fn write_at(path: &Path, offset: u64, bytes: &[u8]) -> io::Result<()> { fn write_at(path: &Path, offset: u64, bytes: &[u8]) -> io::Result<()> {
use std::os::unix::fs::FileExt; use std::os::unix::fs::FileExt;
@@ -565,7 +618,7 @@ mod tests {
std::fs::write(&path, b"0123456789").unwrap(); std::fs::write(&path, b"0123456789").unwrap();
assert!(wait_until(Duration::from_secs(30), || { assert!(wait_until(Duration::from_secs(30), || {
daemon.pending().is_ok_and(|items| items.is_empty()) daemon.drained()
&& drive.tree().get("f.txt") == Some(&Entry::File(Arc::new(b"0123456789".to_vec()))) && drive.tree().get("f.txt") == Some(&Entry::File(Arc::new(b"0123456789".to_vec())))
})); }));
daemon.client.set_online(false); daemon.client.set_online(false);
@@ -692,6 +745,55 @@ mod tests {
let _ = std::fs::remove_dir_all(&dir); let _ = std::fs::remove_dir_all(&dir);
} }
#[test]
#[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"]
fn a_new_file_deleted_while_open_as_its_create_lands_still_reads() {
// The create's op was retired and the tree still had the placeholder.
// The queue read empty, and the delete trashed the node by its real
// uid, which the tree did not have yet: it took the open file for
// closed and dropped the bytes its handle reads (B257).
use std::io::{Read, Seek, SeekFrom, Write};
let drive = FakeDrive::new();
let dir = scratch("delete-open-as-create-lands");
let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap();
let path = daemon.mountpoint.join("f.txt");
let landing = daemon.client.hold_next_landing_of_any();
std::fs::write(&path, b"0123456789").unwrap();
assert!(wait_until(Duration::from_secs(30), || landing.reached()));
assert!(!daemon.drained(), "the landing create is counted");
let mut file = std::fs::OpenOptions::new()
.read(true)
.write(true)
.open(&path)
.unwrap();
drop(landing);
assert!(wait_until(Duration::from_secs(30), || daemon.drained()));
daemon.client.set_online(false);
std::fs::remove_file(&path).unwrap();
file.seek(SeekFrom::End(0)).unwrap();
file.write_all(b"ab").unwrap();
let mut read = Vec::new();
file.seek(SeekFrom::Start(0)).unwrap();
file.read_to_end(&mut read).unwrap();
assert_eq!(read, b"0123456789ab");
drop(file);
daemon.client.set_online(true);
assert!(
wait_until(Duration::from_secs(30), || {
daemon.drained() && drive.tree().is_empty()
}),
"{:?} {:?}",
daemon.pending(),
drive.tree()
);
assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown)));
let _ = std::fs::remove_dir_all(&dir);
}
#[test] #[test]
#[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"]
fn a_restart_does_not_bring_back_the_write_of_a_file_deleted_while_open() { fn a_restart_does_not_bring_back_the_write_of_a_file_deleted_while_open() {
@@ -706,7 +808,7 @@ mod tests {
std::fs::write(&path, b"0123456789").unwrap(); std::fs::write(&path, b"0123456789").unwrap();
assert!(wait_until(Duration::from_secs(30), || { assert!(wait_until(Duration::from_secs(30), || {
daemon.pending().is_ok_and(|items| items.is_empty()) daemon.drained()
&& drive.tree().get("f.txt") == Some(&Entry::File(Arc::new(b"0123456789".to_vec()))) && drive.tree().get("f.txt") == Some(&Entry::File(Arc::new(b"0123456789".to_vec())))
})); }));
daemon.client.set_online(false); daemon.client.set_online(false);
+2 -2
View File
@@ -2867,7 +2867,7 @@ mod tests {
/// from being read as "the user deleted everything" and trashing the folder /// from being read as "the user deleted everything" and trashing the folder
/// on Drive. /// on Drive.
#[test] #[test]
fn guard_local_wipe_blocks_only_a_total_disappearance() { fn guard_local_wipe_blocks_a_total_disappearance() {
let base: HashMap<String, ()> = ["a.txt", "b.txt", "d/c.txt"] let base: HashMap<String, ()> = ["a.txt", "b.txt", "d/c.txt"]
.iter() .iter()
.map(|r| ((*r).to_string(), ())) .map(|r| ((*r).to_string(), ()))
@@ -2881,7 +2881,7 @@ mod tests {
); );
assert!( assert!(
guard_local_wipe(&base, &one).is_ok(), guard_local_wipe(&base, &one).is_ok(),
"one survivor means the tree is readable; the rest are real deletions" "in a small folder, one survivor means the tree is readable; the rest are real deletions"
); );
// A one-entry folder can disappear because its mount or parent became // A one-entry folder can disappear because its mount or parent became
// unavailable just as easily as a larger tree can. // unavailable just as easily as a larger tree can.
+73 -14
View File
@@ -180,18 +180,42 @@ pub(super) fn local_deletions<B, L>(
missing missing
} }
/// Refuse to run a pass whose local side has vanished in its entirety. /// How many tracked paths a folder needs before a mass disappearance, short of
/// a total one, trips a wipe guard. Below this, a few survivors say little.
const MASS_LOSS_MIN_PATHS: usize = 20;
/// The share of a large folder's tracked paths that may vanish in one pass, in
/// tenths, before a wipe guard stops it: 9 of 10 and up is refused.
const MASS_LOSS_TENTHS: usize = 9;
/// Whether `missing` of `total` tracked paths gone at once looks like a lost
/// tree rather than deletions. All of them always does. Most of a large
/// folder does too: one surviving file used to clear the guard, so a
/// half-mounted disk, or a script that emptied the folder and wrote one file
/// back, trashed everything else on Drive (B270).
fn looks_like_a_wipe(missing: usize, total: usize) -> bool {
total > 0
&& (missing == total
|| (total >= MASS_LOSS_MIN_PATHS && missing * 10 >= total * MASS_LOSS_TENTHS))
}
/// Refuse to run a pass whose local side has vanished in its entirety, or
/// nearly so ([`looks_like_a_wipe`]).
/// ///
/// When every baseline path is absent locally, the likely cause is an unavailable /// When the synced paths are all or nearly all absent locally, the likely
/// mount or unreadable folder rather than a deliberate whole-tree deletion. /// cause is an unavailable mount or unreadable folder rather than a deliberate
/// One surviving path is enough to clear the guard. /// deletion of the whole tree.
pub(super) fn guard_local_wipe<B, L>( pub(super) fn guard_local_wipe<B, L>(
baseline: &HashMap<String, B>, baseline: &HashMap<String, B>,
local: &HashMap<String, L>, local: &HashMap<String, L>,
) -> Result<(), String> { ) -> Result<(), String> {
if !baseline.is_empty() && baseline.keys().all(|rel| !local.contains_key(rel)) { let missing = baseline
.keys()
.filter(|rel| !local.contains_key(*rel))
.count();
if looks_like_a_wipe(missing, baseline.len()) {
return Err(format!( return Err(format!(
"every one of the {} synced paths is missing locally; refusing to trash \ "{missing} of the {} synced paths are missing locally; refusing to trash \
them on Drive. Check that the folder is mounted and readable; to download \ them on Drive. Check that the folder is mounted and readable; to download \
them again, sync the folder from scratch.", them again, sync the folder from scratch.",
baseline.len() baseline.len()
@@ -200,20 +224,24 @@ pub(super) fn guard_local_wipe<B, L>(
Ok(()) Ok(())
} }
/// Refuse to run a pass whose remote side has vanished in its entirety: the /// Refuse to run a pass whose remote side has vanished in its entirety, or
/// remote twin of [`guard_local_wipe`]. /// nearly so: the remote twin of [`guard_local_wipe`].
/// ///
/// An empty or truncated remote walk reads to the planner as "Drive deleted /// An empty or truncated remote walk reads to the planner as "Drive deleted
/// everything", which a pass answers by deleting the local copies. When not /// everything", which a pass answers by deleting the local copies. When all or
/// one synced path is left on Drive, a failed listing is far likelier than a /// nearly all synced paths are gone from Drive at once, a failed listing is far
/// deliberate wipe of the whole folder, so the pass stops instead. /// likelier than a deliberate wipe of the folder, so the pass stops instead.
pub(super) fn guard_remote_wipe<B, R>( pub(super) fn guard_remote_wipe<B, R>(
baseline: &HashMap<String, B>, baseline: &HashMap<String, B>,
remote: &HashMap<String, R>, remote: &HashMap<String, R>,
) -> Result<(), String> { ) -> Result<(), String> {
if !baseline.is_empty() && baseline.keys().all(|rel| !remote.contains_key(rel)) { let missing = baseline
.keys()
.filter(|rel| !remote.contains_key(*rel))
.count();
if looks_like_a_wipe(missing, baseline.len()) {
return Err(format!( return Err(format!(
"every one of the {} synced paths is missing on Proton Drive; refusing to \ "{missing} of the {} synced paths are missing on Proton Drive; refusing to \
delete them here. If they were deleted on purpose, remove the folder from sync; \ delete them here. If they were deleted on purpose, remove the folder from sync; \
to upload them again, sync the folder from scratch.", to upload them again, sync the folder from scratch.",
baseline.len() baseline.len()
@@ -816,7 +844,7 @@ mod file_plan_tests {
/// An empty or failed remote listing must not read as "Drive deleted /// An empty or failed remote listing must not read as "Drive deleted
/// everything" and delete the local copies. /// everything" and delete the local copies.
#[test] #[test]
fn the_remote_wipe_guard_blocks_only_a_total_disappearance() { fn the_remote_wipe_guard_blocks_a_total_disappearance() {
let base = HashMap::from([("a".to_string(), ()), ("b".to_string(), ())]); let base = HashMap::from([("a".to_string(), ()), ("b".to_string(), ())]);
let none: HashMap<String, RemoteItem> = HashMap::new(); let none: HashMap<String, RemoteItem> = HashMap::new();
assert!(guard_remote_wipe(&base, &none).is_err()); assert!(guard_remote_wipe(&base, &none).is_err());
@@ -826,6 +854,37 @@ mod file_plan_tests {
assert!(guard_remote_wipe(&empty, &none).is_ok()); assert!(guard_remote_wipe(&empty, &none).is_ok());
} }
/// One path left of a large folder no longer clears either guard: most
/// of it gone at once is a lost tree, not a cleanup (B270).
#[test]
fn one_survivor_of_a_large_folder_does_not_clear_the_wipe_guards() {
let base: HashMap<String, ()> = (0..40).map(|n| (format!("f{n}.txt"), ())).collect();
let survivors = |n: usize| -> HashMap<String, ()> {
(0..n).map(|n| (format!("f{n}.txt"), ())).collect()
};
assert!(guard_local_wipe(&base, &survivors(1)).is_err());
assert!(guard_remote_wipe(&base, &survivors(1)).is_err());
// 36 of 40 gone is nine tenths: still refused.
assert!(guard_local_wipe(&base, &survivors(4)).is_err());
// 35 of 40 gone is under nine tenths: a pass may delete that much.
assert!(guard_local_wipe(&base, &survivors(5)).is_ok());
assert!(guard_remote_wipe(&base, &survivors(5)).is_ok());
let reason = guard_local_wipe(&base, &survivors(1)).unwrap_err();
assert!(reason.starts_with("39 of the 40 synced paths"), "{reason}");
}
/// A small folder still loses most of its files to an ordinary cleanup, so
/// only a total loss stops it.
#[test]
fn a_small_folder_trips_the_wipe_guards_only_when_everything_is_gone() {
let base: HashMap<String, ()> = (0..19).map(|n| (format!("f{n}.txt"), ())).collect();
let one: HashMap<String, ()> = [("f0.txt".to_string(), ())].into_iter().collect();
assert!(guard_local_wipe(&base, &one).is_ok());
assert!(guard_remote_wipe(&base, &one).is_ok());
let none: HashMap<String, ()> = HashMap::new();
assert!(guard_local_wipe(&base, &none).is_err());
}
/// A node that failed to decrypt has no name, so everything a short /// A node that failed to decrypt has no name, so everything a short
/// listing did not return is left out, and nothing else. /// listing did not return is left out, and nothing else.
#[test] #[test]
+1 -1
View File
@@ -40,4 +40,4 @@ pangocairo = "0.22"
# Map tiles for the opt-in online map. The same build proton-sdk already pulls in. # Map tiles for the opt-in online map. The same build proton-sdk already pulls in.
reqwest = { version = "0.13", default-features = false, features = ["rustls", "webpki-roots"] } reqwest = { version = "0.13", default-features = false, features = ["rustls", "webpki-roots"] }
# The system libintl (glibc) rather than a bundled gettext build. # The system libintl (glibc) rather than a bundled gettext build.
gettext-rs = { version = "0.7", features = ["gettext-system"] } gettext-rs = { version = "0.8", features = ["gettext-system"] }
+52
View File
@@ -125,6 +125,9 @@ struct Ui {
/// Whether this run already asked for the mailbox password of a locked /// Whether this run already asked for the mailbox password of a locked
/// account, so a refresh never re-opens a dialog the user cancelled. /// account, so a refresh never re-opens a dialog the user cancelled.
unlock_offered: Cell<bool>, unlock_offered: Cell<bool>,
/// The `since` of the run of mount failures whose "folder isn't empty"
/// dialog this run already showed, so a page reload never shows it again.
not_empty_offered: Cell<i64>,
/// Whether the last refresh saw a live mount daemon. Gates the unpin buttons /// Whether the last refresh saw a live mount daemon. Gates the unpin buttons
/// (which need the daemon to evict + re-hydrate) and every mutating action. /// (which need the daemon to evict + re-hydrate) and every mutating action.
mounted: RefCell<bool>, mounted: RefCell<bool>,
@@ -403,6 +406,7 @@ fn build_window(app: &adw::Application) {
opening: RefCell::new(HashSet::new()), opening: RefCell::new(HashSet::new()),
session: RefCell::new(startup_session), session: RefCell::new(startup_session),
unlock_offered: Cell::new(false), unlock_offered: Cell::new(false),
not_empty_offered: Cell::new(0),
mounted: RefCell::new(false), mounted: RefCell::new(false),
sidebar: sidebar_list.clone(), sidebar: sidebar_list.clone(),
nav: split.clone(), nav: split.clone(),
@@ -1807,6 +1811,23 @@ pub(crate) fn service_unreachable(
.ok() .ok()
.flatten(); .flatten();
match failure { match failure {
Some(failure) if failure.not_empty.is_some() => {
let found = failure.not_empty.as_ref().expect("checked above");
status(
&ui,
"dialog-warning-symbolic",
&gettext("Can't open your Drive"),
// Translators: {path} is the folder My files is mounted at.
&gettext_f(
"“{path}” already has files in it, and My files would hide them. Proton Drive tries again on its own once the folder is empty. You can also choose another folder for My files in Preferences.",
&[("path", &found.path.display().to_string())],
),
true,
);
if ui.not_empty_offered.replace(failure.since) != failure.since {
offer_not_empty(&ui, found);
}
}
Some(failure) => status( Some(failure) => status(
&ui, &ui,
"dialog-warning-symbolic", "dialog-warning-symbolic",
@@ -1834,6 +1855,37 @@ pub(crate) fn service_unreachable(
}); });
} }
/// Tell the user the daemon will not mount My files over a folder with files
/// in it (B277), and offer the two ways out: open the folder to move them, or
/// choose another one.
fn offer_not_empty(ui: &Rc<Ui>, found: &pdfs_core::mountpoint::NotEmpty) {
let path = found.path.display().to_string();
let dialog = adw::AlertDialog::builder()
.heading(gettext("Your Proton Drive Folder Isn't Empty"))
// Translators: {path} is the folder My files is mounted at; {n} is how
// many files and folders are already in it.
.body(ngettext_f(
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive does not open there. Move the item to another folder, or choose another folder for My files.",
"“{path}” already has {n} items in it. My files would hide them, so Proton Drive does not open there. Move the items to another folder, or choose another folder for My files.",
found.count as u64,
&[("path", &path)],
))
.build();
dialog.add_response("close", &gettext("Not Now"));
dialog.add_response("open", &gettext("Open Folder"));
dialog.add_response("choose", &gettext("Choose Another Folder…"));
dialog.set_response_appearance("choose", adw::ResponseAppearance::Suggested);
dialog.set_default_response(Some("choose"));
dialog.set_close_response("close");
let ui_response = ui.clone();
dialog.connect_response(None, move |_, response| match response {
"open" => open_path(&path),
"choose" => prompt_mountpoint(&ui_response),
_ => {}
});
dialog.present(ui_window(ui).as_ref());
}
/// How long a copy button shows its check after copying. /// How long a copy button shows its check after copying.
const COPIED_FEEDBACK: Duration = Duration::from_millis(1500); const COPIED_FEEDBACK: Duration = Duration::from_millis(1500);
+125 -36
View File
@@ -806,7 +806,8 @@ pub(crate) fn settings_request(ui: &Rc<Ui>, req: Request, done: String, failed:
} }
/// Prompt for a new mountpoint folder, persist it to config, and offer to restart /// Prompt for a new mountpoint folder, persist it to config, and offer to restart
/// the mount service so the daemon picks it up. /// the mount service so the daemon picks it up. A folder with files in it is
/// refused: the mount would hide them (B277).
pub(crate) fn prompt_mountpoint(ui: &Rc<Ui>) { pub(crate) fn prompt_mountpoint(ui: &Rc<Ui>) {
let win = ui_window(ui); let win = ui_window(ui);
let dialog = gtk4::FileDialog::builder() let dialog = gtk4::FileDialog::builder()
@@ -816,46 +817,89 @@ pub(crate) fn prompt_mountpoint(ui: &Rc<Ui>) {
dialog.select_folder(win.as_ref(), gio::Cancellable::NONE, move |res| { dialog.select_folder(win.as_ref(), gio::Cancellable::NONE, move |res| {
let Ok(folder) = res else { return }; let Ok(folder) = res else { return };
let Some(path) = folder.path() else { return }; let Some(path) = folder.path() else { return };
let path_str = path.display().to_string(); // The folder My files is mounted at lists Drive's files, not its own,
// so picking it again is not checked.
// Persist the choice to config so the next mount uses it. if path == ui.dirs.resolved_mountpoint(&ui.dirs.load_config()) {
let mut config = ui.dirs.load_config(); use_mountpoint(&ui, &path);
config.mountpoint = Some(path_str.clone());
if let Err(e) = ui.dirs.save_config(&config) {
toast_error(&ui, &gettext("Couldn't save the folder"), &e.to_string());
return; return;
} }
ui.status.mountpoint_row.set_subtitle(&path_str); let ui = ui.clone();
// The Locations page shows the same path as a row title. Any other page glib::spawn_future_local(async move {
// reads it again on the next visit. let checked = path.clone();
if ui.stack.visible_child_name().as_deref() == Some("locations") { let found = gio::spawn_blocking(move || pdfs_core::mountpoint::not_empty(&checked))
load_locations(&ui); .await
} .unwrap_or_else(|_| Err(std::io::Error::other("the check did not finish")));
match found {
// The daemon only reads the mountpoint at mount time, so offer a restart. Ok(None) => use_mountpoint(&ui, &path),
let confirm = adw::AlertDialog::builder() Ok(Some(found)) => refuse_mountpoint(&ui, &found),
.heading(gettext("Restart Proton Drive?")) Err(e) => toast_error(&ui, &gettext("Couldn't read the folder"), &e.to_string()),
// Translators: {path} is the folder the drive is mounted at.
.body(gettext_f(
"My files now appears in “{path}” after Proton Drive restarts.",
&[("path", &path_str)],
))
.build();
confirm.add_response("later", &gettext("Later"));
confirm.add_response("restart", &gettext("Restart Now"));
confirm.set_response_appearance("restart", adw::ResponseAppearance::Suggested);
confirm.set_default_response(Some("restart"));
confirm.set_close_response("later");
let ui_restart = ui.clone();
confirm.connect_response(None, move |_, resp| {
if resp == "restart" {
restart_service_then(&ui_restart, |_| {});
} }
}); });
confirm.present(ui_window(&ui).as_ref());
}); });
} }
/// Explain why the folder `found` cannot hold My files.
fn refuse_mountpoint(ui: &Rc<Ui>, found: &pdfs_core::mountpoint::NotEmpty) {
let path = found.path.display().to_string();
let dialog = adw::AlertDialog::builder()
.heading(gettext("Choose an Empty Folder"))
// Translators: {path} is the folder the user picked; {n} is how many
// files and folders are already in it.
.body(ngettext_f(
"“{path}” already has {n} item in it. My files would hide it while Proton Drive runs, and it would not be uploaded.",
"“{path}” already has {n} items in it. My files would hide them while Proton Drive runs, and they would not be uploaded.",
found.count as u64,
&[("path", &path)],
))
.build();
dialog.add_response("close", &gettext("Close"));
dialog.set_default_response(Some("close"));
dialog.set_close_response("close");
dialog.present(ui_window(ui).as_ref());
}
/// Make `path` the folder My files is mounted at, and offer the restart that
/// moves it there.
fn use_mountpoint(ui: &Rc<Ui>, path: &std::path::Path) {
let path_str = path.display().to_string();
// Persist the choice to config so the next mount uses it.
let mut config = ui.dirs.load_config();
config.mountpoint = Some(path_str.clone());
if let Err(e) = ui.dirs.save_config(&config) {
toast_error(ui, &gettext("Couldn't save the folder"), &e.to_string());
return;
}
ui.status.mountpoint_row.set_subtitle(&path_str);
// The Locations page shows the same path as a row title. Any other page
// reads it again on the next visit.
if ui.stack.visible_child_name().as_deref() == Some("locations") {
load_locations(ui);
}
// The daemon only reads the mountpoint at mount time, so offer a restart.
let confirm = adw::AlertDialog::builder()
.heading(gettext("Restart Proton Drive?"))
// Translators: {path} is the folder the drive is mounted at.
.body(gettext_f(
"My files now appears in “{path}” after Proton Drive restarts.",
&[("path", &path_str)],
))
.build();
confirm.add_response("later", &gettext("Later"));
confirm.add_response("restart", &gettext("Restart Now"));
confirm.set_response_appearance("restart", adw::ResponseAppearance::Suggested);
confirm.set_default_response(Some("restart"));
confirm.set_close_response("later");
let ui_restart = ui.clone();
confirm.connect_response(None, move |_, resp| {
if resp == "restart" {
restart_service_then(&ui_restart, |_| {});
}
});
confirm.present(ui_window(ui).as_ref());
}
/// Connect the Files/Photos "Retry" buttons (shown by [`browser_unreachable`] / /// Connect the Files/Photos "Retry" buttons (shown by [`browser_unreachable`] /
/// [`gallery_unreachable`] when the mount is down): restart the systemd unit and /// [`gallery_unreachable`] when the mount is down): restart the systemd unit and
/// reload the page. /// reload the page.
@@ -1343,12 +1387,39 @@ pub(crate) fn paint_status(ui: &Rc<Ui>, status: Response) {
/// read-out so the page doesn't flicker on a blip. /// read-out so the page doesn't flicker on a blip.
pub(crate) fn paint_disconnected(ui: &Rc<Ui>) { pub(crate) fn paint_disconnected(ui: &Rc<Ui>) {
set_mounted(ui, false); set_mounted(ui, false);
paint_sync_status(ui, SyncState::Disconnected);
for r in ui.status.pin_rows.borrow().iter() { for r in ui.status.pin_rows.borrow().iter() {
if let Some(b) = &r.unpin { if let Some(b) = &r.unpin {
b.set_sensitive(false); b.set_sensitive(false);
} }
} }
// A running daemon whose mount fails on every try never answers either,
// and "isn't running" would be wrong for it (B263, B277). The pages read
// the same failure record.
let ui = ui.clone();
glib::spawn_future_local(async move {
let failure = if service_down().await {
None
} else {
let state_dir = ui.dirs.state_dir();
gio::spawn_blocking(move || pdfs_core::mountfail::read(&state_dir))
.await
.ok()
.flatten()
};
// The daemon may have answered while this looked.
if *ui.mounted.borrow() {
return;
}
paint_sync_status(
&ui,
match failure {
Some(failure) => SyncState::CannotOpen {
not_empty: failure.not_empty.is_some(),
},
None => SyncState::Disconnected,
},
);
});
} }
/// What the sidebar's status strip reports, most urgent first. /// What the sidebar's status strip reports, most urgent first.
@@ -1392,6 +1463,11 @@ pub(crate) enum SyncState {
}, },
/// No mount daemon answered: still starting, or the service is down. /// No mount daemon answered: still starting, or the service is down.
Disconnected, Disconnected,
/// The service runs, but its mount fails on every try. `not_empty` when
/// it refuses a folder that already has files in it.
CannotOpen {
not_empty: bool,
},
/// The daemon is running but didn't answer in time. /// The daemon is running but didn't answer in time.
NotResponding, NotResponding,
} }
@@ -1400,7 +1476,10 @@ pub(crate) enum SyncState {
/// one-line state, and a detail line. /// one-line state, and a detail line.
fn paint_sync_status(ui: &Rc<Ui>, state: SyncState) { fn paint_sync_status(ui: &Rc<Ui>, state: SyncState) {
let paused = matches!(state, SyncState::Paused { .. }); let paused = matches!(state, SyncState::Paused { .. });
let connected = !matches!(state, SyncState::Disconnected | SyncState::NotResponding); let connected = !matches!(
state,
SyncState::Disconnected | SyncState::CannotOpen { .. } | SyncState::NotResponding
);
let expired = matches!(state, SyncState::SessionExpired { .. }); let expired = matches!(state, SyncState::SessionExpired { .. });
let outdated = matches!(state, SyncState::Outdated { .. }); let outdated = matches!(state, SyncState::Outdated { .. });
let (icon, class, title, detail) = match state { let (icon, class, title, detail) = match state {
@@ -1492,6 +1571,16 @@ fn paint_sync_status(ui: &Rc<Ui>, state: SyncState) {
gettext("Not connected"), gettext("Not connected"),
Some(gettext("Proton Drive isn't running")), Some(gettext("Proton Drive isn't running")),
), ),
SyncState::CannotOpen { not_empty } => (
"dialog-warning-symbolic",
Some("warning"),
gettext("Can't open your Drive"),
Some(if not_empty {
gettext("Your Proton Drive folder isn't empty")
} else {
gettext("Proton Drive keeps trying to start")
}),
),
SyncState::NotResponding => ( SyncState::NotResponding => (
"dialog-warning-symbolic", "dialog-warning-symbolic",
Some("warning"), Some("warning"),
+7 -3
View File
@@ -48,7 +48,8 @@ pub(crate) fn init() {
.ok() .ok()
.and_then(|dirs| dirs.load_config().language) .and_then(|dirs| dirs.load_config().language)
.filter(|code| LANGUAGES.iter().any(|(known, _)| known == code)); .filter(|code| LANGUAGES.iter().any(|(known, _)| known == code));
gettextrs::setlocale(LocaleCategory::LcAll, ""); // SAFETY: `init` runs at the top of `main`, before any other thread exists.
unsafe { gettextrs::setlocale(LocaleCategory::LcAll, "") };
if let Some(code) = language { if let Some(code) = language {
apply_language(&code); apply_language(&code);
} }
@@ -97,14 +98,17 @@ pub(crate) fn country_name(code: &str) -> String {
fn apply_language(code: &str) { fn apply_language(code: &str) {
// SAFETY: `init` runs at the top of `main`, before any other thread exists. // SAFETY: `init` runs at the top of `main`, before any other thread exists.
unsafe { std::env::set_var("LANGUAGE", code) }; unsafe { std::env::set_var("LANGUAGE", code) };
let current = gettextrs::setlocale(LocaleCategory::LcMessages, "") // SAFETY: as above, still single-threaded.
let current = unsafe { gettextrs::setlocale(LocaleCategory::LcMessages, "") }
.map(|name| String::from_utf8_lossy(&name).into_owned()) .map(|name| String::from_utf8_lossy(&name).into_owned())
.unwrap_or_default(); .unwrap_or_default();
if !is_c_locale(&current) { if !is_c_locale(&current) {
return; return;
} }
for candidate in message_locales(code) { for candidate in message_locales(code) {
if gettextrs::setlocale(LocaleCategory::LcMessages, candidate.as_str()).is_some() { // SAFETY: as above, still single-threaded.
if unsafe { gettextrs::setlocale(LocaleCategory::LcMessages, candidate.as_str()) }.is_some()
{
// SAFETY: as above, still single-threaded. // SAFETY: as above, still single-threaded.
unsafe { std::env::set_var("LC_MESSAGES", &candidate) }; unsafe { std::env::set_var("LC_MESSAGES", &candidate) };
return; return;
+131 -13
View File
@@ -70,7 +70,6 @@ original wording.
|---|---|---| |---|---|---|
| [B275](#b275--on-a-slow-link-a-files-last-write-can-land-only-in-a-conflict-copy) | On a slow link, a file's last write can land only in a conflict copy | Cause not found; seen once in CI | | [B275](#b275--on-a-slow-link-a-files-last-write-can-land-only-in-a-conflict-copy) | On a slow link, a file's last write can land only in a conflict copy | Cause not found; seen once in CI |
| [B273](#b273--a-restore-proposes-another-computers-paths-when-the-two-share-a-hostname) | A restore proposes another computer's paths when the two share a hostname | Not fixed | | [B273](#b273--a-restore-proposes-another-computers-paths-when-the-two-share-a-hostname) | A restore proposes another computer's paths when the two share a hostname | Not fixed |
| [B270](#b270--one-file-left-in-a-mirror-folder-clears-the-wipe-guard-for-all-the-others) | One file left in a mirror folder clears the wipe guard for all the others | Not fixed |
| [B267](#b267--a-key-failure-at-a-start-from-a-warm-cache-shows-as-offline-for-good) | A key failure at a start from a warm cache shows as offline for good | Not fixed | | [B267](#b267--a-key-failure-at-a-start-from-a-warm-cache-shows-as-offline-for-good) | A key failure at a start from a warm cache shows as offline for good | Not fixed |
| [B134](#b134--a-file-deleted-online-while-the-drain-checks-its-write-is-kept-as-a-conflict-copy) | A file deleted online while the drain checks its write is kept as a conflict copy | Only with `local_first` off | | [B134](#b134--a-file-deleted-online-while-the-drain-checks-its-write-is-kept-as-a-conflict-copy) | A file deleted online while the drain checks its write is kept as a conflict copy | Only with `local_first` off |
| [B91](#b91--the-daemon-hung-overnight-and-nothing-could-say-what-it-was-waiting-on) | The daemon hung overnight, and nothing could say what it was waiting on | The cause is not diagnosed; the daemon now reports where it is stuck and is restarted | | [B91](#b91--the-daemon-hung-overnight-and-nothing-could-say-what-it-was-waiting-on) | The daemon hung overnight, and nothing could say what it was waiting on | The cause is not diagnosed; the daemon now reports where it is stuck and is restarted |
@@ -84,6 +83,7 @@ original wording.
| Entry | Title | What is left | | Entry | Title | What is left |
|---|---|---| |---|---|---|
| [B270](#b270--one-file-left-in-a-mirror-folder-clears-the-wipe-guard-for-all-the-others) | One file left in a mirror folder clears the wipe guard for all the others | A loss under nine in ten still goes through; no choice offered in the app |
| [B269](#b269--a-restore-that-skipped-every-folder-reports-success) | A restore that skipped every folder reports success | The app shows the result only in the activity feed; no offer to replace or reset the folder in the way | | [B269](#b269--a-restore-that-skipped-every-folder-reports-success) | A restore that skipped every folder reports success | The app shows the result only in the activity feed; no offer to replace or reset the folder in the way |
| [B268](#b268--pdfs-diagnose-says-no-problems-found-while-sync-is-stuck) | `pdfs diagnose` says "No problems found" while sync is stuck | The sync engine's state is not checked | | [B268](#b268--pdfs-diagnose-says-no-problems-found-while-sync-is-stuck) | `pdfs diagnose` says "No problems found" while sync is stuck | The sync engine's state is not checked |
| [B263](#b263--a-mount-that-can-never-succeed-retries-every-5-s-and-tells-only-the-journal) | A mount that can never succeed retries every 5 s and tells only the journal | Errors no retry fixes back off like network errors | | [B263](#b263--a-mount-that-can-never-succeed-retries-every-5-s-and-tells-only-the-journal) | A mount that can never succeed retries every 5 s and tells only the journal | Errors no retry fixes back off like network errors |
@@ -109,7 +109,8 @@ a live account since.
| Entry | Title | | Entry | Title |
|---|---| |---|---|
| [B276](#b276--a-stop-can-end-with-a-panic-in-a-thread-the-stop-never-waited-for) | A stop can end with a panic in a thread the stop never waited for | | [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 |
| [B277](#b277--my-files-mounted-over-a-folder-with-files-in-it-and-hid-them) | My files mounted over a folder with files in it, and hid them |
| [B274](#b274--opening-a-file-for-writing-fails-with-eio-while-its-queued-revision-lands) | Opening a file for writing fails with EIO while its queued revision lands | | [B274](#b274--opening-a-file-for-writing-fails-with-eio-while-its-queued-revision-lands) | Opening a file for writing fails with EIO while its queued revision lands |
| [B272](#b272--after-a-folder-is-removed-and-added-again-its-file-events-go-to-the-old-id) | After a folder is removed and added again, its file events go to the old id | | [B272](#b272--after-a-folder-is-removed-and-added-again-its-file-events-go-to-the-old-id) | After a folder is removed and added again, its file events go to the old id |
| [B271](#b271--one-failed-listing-makes-a-large-first-sync-start-over-from-nothing) | One failed listing makes a large first sync start over from nothing | | [B271](#b271--one-failed-listing-makes-a-large-first-sync-start-over-from-nothing) | One failed listing makes a large first sync start over from nothing |
@@ -118,9 +119,7 @@ a live account since.
| [B264](#b264--a-mount-that-fails-after-starting-its-workers-leaves-them-running) | A mount that fails after starting its workers leaves them running | | [B264](#b264--a-mount-that-fails-after-starting-its-workers-leaves-them-running) | A mount that fails after starting its workers leaves them running |
| [B261](#b261--a-folder-that-has-never-synced-reads-up-to-date) | A folder that has never synced reads "up to date" | | [B261](#b261--a-folder-that-has-never-synced-reads-up-to-date) | A folder that has never synced reads "up to date" |
| [B260](#b260--the-poll-pushes-a-new-folders-first-sync-behind-every-other-folder) | The poll pushes a new folder's first sync behind every other folder | | [B260](#b260--the-poll-pushes-a-new-folders-first-sync-behind-every-other-folder) | The poll pushes a new folder's first sync behind every other folder |
| [B258](#b258--journalctl--p-warning-shows-nothing-whatever-the-daemon-logged) | `journalctl -p warning` shows nothing, whatever the daemon logged | | [B257](#b257--deleting-a-new-file-while-it-is-open-can-drop-the-bytes-its-handle-reads) | Deleting a new file while it is open can drop the bytes its handle reads |
| [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version |
| [B255](#b255--a-synced-folder-whose-files-are-all-gone-here-is-stuck-for-good) | A synced folder whose files are all gone here is stuck for good |
| [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives | | [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives |
| [B253](#b253--the-app-shows-the-sign-in-page-when-the-keyring-is-locked) | The app shows the sign-in page when the keyring is locked | | [B253](#b253--the-app-shows-the-sign-in-page-when-the-keyring-is-locked) | The app shows the sign-in page when the keyring is locked |
| [B252](#b252--computers-sharing-a-device-overwrite-each-others-profile) | Computers sharing a device overwrite each other's profile | | [B252](#b252--computers-sharing-a-device-overwrite-each-others-profile) | Computers sharing a device overwrite each other's profile |
@@ -295,6 +294,10 @@ a live account since.
| Entry | Title | | Entry | Title |
|---|---| |---|---|
| [B276](#b276--a-stop-can-end-with-a-panic-in-a-thread-the-stop-never-waited-for) | A stop can end with a panic in a thread the stop never waited for |
| [B258](#b258--journalctl--p-warning-shows-nothing-whatever-the-daemon-logged) | `journalctl -p warning` shows nothing, whatever the daemon logged |
| [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version |
| [B255](#b255--a-synced-folder-whose-files-are-all-gone-here-is-stuck-for-good) | A synced folder whose files are all gone here is stuck for good |
| [B194](#b194--on-a-fresh-install-the-tray-exits-and-the-takeout-page-cannot-remember-its-archives) | On a fresh install the tray exits and the Takeout page cannot remember its archives | | [B194](#b194--on-a-fresh-install-the-tray-exits-and-the-takeout-page-cannot-remember-its-archives) | On a fresh install the tray exits and the Takeout page cannot remember its archives |
| [B192](#b192--a-new-file-closed-empty-reaches-drive-only-half-a-minute-later) | A new file closed empty reaches Drive only half a minute later | | [B192](#b192--a-new-file-closed-empty-reaches-drive-only-half-a-minute-later) | A new file closed empty reaches Drive only half a minute later |
| [B181](#b181--the-app-shows-a-queued-edit-kept-as-a-conflict-copy-in-english) | The app shows a queued edit kept as a conflict copy in English | | [B181](#b181--the-app-shows-a-queued-edit-kept-as-a-conflict-copy-in-english) | The app shows a queued edit kept as a conflict copy in English |
@@ -378,9 +381,71 @@ a live account since.
Newest first. Newest first.
### B276 — A stop can end with a panic in a thread the stop never waited for ### B278 — `sync list` and `devices list` show the last sync as epoch seconds
**Status:** Fixed, not verified live **Status:** Fixed, not verified live
**Found:** 2026-11-02, issue #46. The reporter's `pdfs sync list` on 3.6.0 read
`synced: 1793570850`, a pass that finished at 2026-11-01 22:07 UTC.
**Where:** `cmd_sync` and `cmd_devices` in `crates/pdfs-cli/src/main.rs`
**Repro:** Let a synced folder finish one pass and run `pdfs sync list`, or `pdfs devices list`
on an account with a device that synced.
**Cause.** Both commands printed `last_sync` with `to_string()`. The activity feed already
formats the same epoch seconds with `format_epoch`.
**Fix.** Both columns go through `last_synced`, which prints `MM-DD HH:MM` in UTC like
`pdfs activity`, and `never` for 0 or no value. `--json` output is unchanged.
**Test:** `last_synced_shows_a_time_not_epoch_seconds` in `crates/pdfs-cli/src/main.rs`.
---
### B277 — My files mounted over a folder with files in it, and hid them
**Status:** Fixed, not verified live
**Found:** 2026-10-31, issue #67. The reporter chose an existing working folder as the My files
location. Its folders disappeared and looked deleted; they came back when the service stopped.
**Where:** `mount_with` and `check_mountpoint` in `crates/pdfs-fuse/src/mount.rs`;
`crates/pdfs-core/src/mountpoint.rs`; `prompt_mountpoint` in
`crates/pdfs-gui/src/app/pages/status.rs`
**Repro:** Stop the service. Put a file and a folder in `~/ProtonDrive`, or choose a folder with
files in it under Preferences → General → Location. Start the service. The files are hidden
under the mount: not uploaded, not in the queue, and back only once the service stops.
**Cause.** FUSE mounts over a folder that is not empty without a word, and nothing checked the
folder first. `mount_once` only created it. On-demand synced folders were already checked when
they were mounted again after a restart (`restore_ondemand_mounts`); My files was not. The
folder picker took any folder.
**Fix.**
- The daemon refuses to mount My files over a folder with anything in it, hidden files
included, before it fetches the root or starts a worker. A dead mount is cleared first, so it
can be listed. One of this client's own live mounts is left to the mount, which clears it as
before.
- The refusal is a mount failure like any other: it backs off and tries again, so emptying the
folder is enough. The failure record now carries the folder and its first entries
(`MountFailure::not_empty`), which an older reader ignores.
- The app explains it in the user's language, and offers to open the folder or choose another
one. The folder picker refuses a folder with files in it.
Merging an existing folder into My files is not done here. #67 proposes `pdfs sync attach` for
that, as a separate change.
**Test:** `a_folder_with_files_is_refused_and_named`, `a_hidden_file_alone_is_enough_to_refuse`,
`an_empty_or_missing_folder_takes_the_mount` in `crates/pdfs-core/src/mountpoint.rs`;
`a_failure_an_older_daemon_wrote_still_reads` in `mountfail.rs`;
`a_mount_refused_over_files_is_recorded_as_such` in `crates/pdfs-cli/src/main.rs`; the
simulation `a_mount_over_local_files_is_refused_and_leaves_them_alone`.
---
### B276 — A stop can end with a panic in a thread the stop never waited for
**Status:** Fixed, checked on 2026-11-01 by an account run of `scripts/fuse-acceptance.sh
--journal-check --durability`: eight daemon restarts, and no panic in the journal
**Found:** 2026-10-31, by an account run of `scripts/fuse-acceptance.sh --journal-check **Found:** 2026-10-31, by an account run of `scripts/fuse-acceptance.sh --journal-check
--durability` against the audit branches. Every case passed, and the run still failed. During --durability` against the audit branches. Every case passed, and the run still failed. During
the restart in the durability case on My files, the journal had three the restart in the durability case on My files, the journal had three
@@ -531,7 +596,9 @@ folder list has now.
**Status:** Fixed, not verified live **Status:** Fixed, not verified live
**Found:** 2026-10-31, code audit after issue #46: a folder of about 19,900 items restored on a **Found:** 2026-10-31, code audit after issue #46: a folder of about 19,900 items restored on a
second computer sat at `scanning…` with nothing downloaded, and the journal showed second computer sat at `scanning…` with nothing downloaded, and the journal showed
`RequestTimeout (http 408)`. `RequestTimeout (http 408)`. On 2026-11-01 the reporter's 3.6.0 journal showed the same pass
failing four times in four minutes with `reconcile failed id=1 error=enumerate …: HTTP transport
error`, after the laptop woke from sleep; a later pass finished.
**Where:** `walk_remote` in `crates/pdfs-fuse/src/sync.rs` **Where:** `walk_remote` in `crates/pdfs-fuse/src/sync.rs`
**Repro:** Restore or add a mirror folder with tens of thousands of items on Drive, on a link **Repro:** Restore or add a mirror folder with tens of thousands of items on Drive, on a link
@@ -557,7 +624,7 @@ nothing left to apply. The progress count inside one large folder is unchanged.
### B270 — One file left in a mirror folder clears the wipe guard for all the others ### B270 — One file left in a mirror folder clears the wipe guard for all the others
**Status:** Open **Status:** Partly fixed
**Found:** 2026-10-31, code audit after issue #46, whose reporter emptied a synced folder **Found:** 2026-10-31, code audit after issue #46, whose reporter emptied a synced folder
several times. several times.
**Where:** `guard_local_wipe` and `guard_remote_wipe` in `crates/pdfs-fuse/src/sync/planner.rs` **Where:** `guard_local_wipe` and `guard_remote_wipe` in `crates/pdfs-fuse/src/sync/planner.rs`
@@ -571,8 +638,20 @@ that two computers sync, the other computer then deletes its copies too.
path is enough to clear it, so it guards against an empty folder and nothing short of that. path is enough to clear it, so it guards against an empty folder and nothing short of that.
The remote guard has the same shape. The remote guard has the same shape.
**Fix.** Not done. Also refuse when most of a large baseline is missing at once, and leave the **Fix.** Both guards also refuse a pass when nine in ten or more of the tracked paths of a
choice to the user: delete on the other side, or sync from scratch. folder with at least 20 are missing at once (`looks_like_a_wipe`). The folder goes into error with
the count in its reason, `pdfs diagnose` reports it, and **Sync From Scratch…** brings the files
back. A smaller folder still stops only on a total loss, since an ordinary cleanup can delete most
of it.
**What is left.** A loss under nine in ten, such as a disk that is half there, still goes
through. The app does not offer the choice yet: confirm the deletions on the other side, or sync
from scratch.
**Test:** `one_survivor_of_a_large_folder_does_not_clear_the_wipe_guards`,
`a_small_folder_trips_the_wipe_guards_only_when_everything_is_gone` in
`crates/pdfs-fuse/src/sync/planner.rs`.
--- ---
@@ -911,7 +990,8 @@ is why it helps.
### B258 — `journalctl -p warning` shows nothing, whatever the daemon logged ### B258 — `journalctl -p warning` shows nothing, whatever the daemon logged
**Status:** Fixed, not verified live **Status:** Fixed, checked on 2026-11-01 on a live account: after an acceptance run,
`journalctl --user -u proton-drive.service -p warning` listed all 76 `WARN` lines the run logged
**Found:** 2026-10-31, issue #53: the reporter ran `journalctl --user -u proton-drive.service -b **Found:** 2026-10-31, issue #53: the reporter ran `journalctl --user -u proton-drive.service -b
-p warning`, as `docs/TROUBLESHOOTING.md` tells them to, and got `-- No entries --`. -p warning`, as `docs/TROUBLESHOOTING.md` tells them to, and got `-- No entries --`.
**Where:** `main` in `crates/pdfs-cli/src/main.rs`; `packaging/proton-drive.service` **Where:** `main` in `crates/pdfs-cli/src/main.rs`; `packaging/proton-drive.service`
@@ -936,9 +1016,46 @@ are off. A terminal that merely inherited `JOURNAL_STREAM` keeps the plain forma
--- ---
### B256 — `pdfs copy` right after a save copies the old version ### B257 — Deleting a new file while it is open can drop the bytes its handle reads
**Status:** Fixed, not verified live **Status:** Fixed, not verified live
**Found:** 2026-10-27, the simulation
`a_file_deleted_offline_while_open_still_reads_and_takes_writes` failing once on CI with a cache
tag left behind, then on every run with a 50 ms pause added to `ContentCache::store_file`.
**Where:** `retire_create` in `crates/pdfs-fuse/src/drain.rs`; `queue_trash` and
`remove_replaced` in `crates/pdfs-fuse/src/lib.rs`; `trash_child` in
`crates/pdfs-fuse/src/filesystem.rs`; `ContentCache::reconcile` in `crates/pdfs-core/src/cache.rs`
**Repro:** Create a file in the mount, wait until `pdfs status` shows nothing queued, open it,
and delete it while the link is down. If the create was still landing, a partial write or a read
through the open handle fails with "Input/output error", and the cache can keep a tag with no
bytes until the next start.
**Cause.** A create that carries the file's bytes retires its op, then reads the node back,
caches the bytes and only then gives the tree the real uid. Nothing counted that window, so the
queue read empty while it ran, which B119 promises means the file reads without the network. A
delete in that window found the placeholder uid in the tree, and trashed the node by its real
uid. `queue_trash` asked the tree whether that uid was open, found no entry for it, and dropped
the cached bytes the open handle reads, which B186 had kept. When the cache store was running at
the same moment, its tag was written after the eviction, and nothing removed it.
**Fix.** The create's landing is counted like an upload's, from the op's retirement until the
tree has the real uid. The delete and the replace pass whether they found the file open, so
`queue_trash` no longer depends on the tree having the new uid. Opening the cache removes a tag
whose bytes are gone, which also covers a crash between an eviction's two removals.
**Test:** The simulation `a_new_file_deleted_while_open_as_its_create_lands_still_reads` holds a
create's landing and fails without the count. The simulation above passes again with the 50 ms
pause, since it now waits for `Daemon::drained`, which counts the landing. Unit test
`a_tag_without_its_blob_is_swept_at_open` in `crates/pdfs-core/src/cache.rs`. No test hits the
delete inside the cache store itself: the window is too short to hold from the simulation.
---
### B256 — `pdfs copy` right after a save copies the old version
**Status:** Fixed, checked on 2026-10-27 by the acceptance case "regression B256" on a live
account
**Found:** 2026-10-26, the simulation `a_pdfs_copy_copies_on_drive_and_waits_for_unsynced_changes` **Found:** 2026-10-26, the simulation `a_pdfs_copy_copies_on_drive_and_waits_for_unsynced_changes`
failing on most runs. The feature was not released yet. failing on most runs. The feature was not released yet.
**Where:** `release` in `crates/pdfs-fuse/src/filesystem.rs`; `copy_to` in **Where:** `release` in `crates/pdfs-fuse/src/filesystem.rs`; `copy_to` in
@@ -962,7 +1079,8 @@ A move checks the same set.
### B255 — A synced folder whose files are all gone here is stuck for good ### B255 — A synced folder whose files are all gone here is stuck for good
**Status:** Fixed, not verified live **Status:** Fixed, checked on 2026-10-27 by the acceptance case "regression B255" on a live
account
**Found:** 2026-10-26, issue #46: a folder restored from another computer never downloaded. **Found:** 2026-10-26, issue #46: a folder restored from another computer never downloaded.
**Where:** `push_pass` in `crates/pdfs-fuse/src/sync.rs`; `reset_sync_folder` in **Where:** `push_pass` in `crates/pdfs-fuse/src/sync.rs`; `reset_sync_folder` in
`crates/pdfs-fuse/src/devices.rs` `crates/pdfs-fuse/src/devices.rs`
+95
View File
@@ -11,6 +11,101 @@ scratch (user data in `staging/` and `recovery/` is never touched by this).
## [Unreleased] ## [Unreleased]
## [3.7.0] — 2026-11-02
Schema: **44**, unchanged.
### Added
- **The app and the tray say why your Drive does not open** (B263, #40). When the service runs
but its mount keeps failing, the app shows **Can't open your Drive** with the last error and a
**Retry** button, instead of "Connecting…" for as long as it lasts. The tray says "can't open
your Drive", `pdfs diagnose` reports `mount: failing for …`, and
`systemctl --user status proton-drive` shows the error as the unit's status.
- **`pdfs diagnostics` shows what the sync engine is doing**, in a new `sync engine:` line:
idle, the folder it is on and for how long, or stopped. The journal warns when the engine has
stopped, or when a pass makes no progress for 15 minutes (B259, #53).
- **`pdfs diagnose` reports more problems** (B268, #53): writes that keep failing, data that has
waited a day or more to be sent, a paused sync, synced folders in error or conflict, and a
control socket file that nothing listens on.
### Changed
- **A mount that keeps failing retries less often**, doubling from 5 seconds to every 2 minutes,
instead of every 5 seconds forever (B263).
- **`proton-sdk` and `proton-drive-rs` 0.10.1.** Dependencies are updated, among them
`rusqlite` 0.41 with a newer bundled SQLite.
### Fixed
- **My files no longer opens over a folder that already has files in it** (#67, B277). The files
were hidden under it, not uploaded, and came back only when the service stopped, so they looked
deleted. The service now waits until the folder is empty, and the app says why and offers to
open the folder or choose another one. The folder picker in Preferences refuses a folder with
files in it. **After upgrading:** if your `~/ProtonDrive` has files underneath, for example
saved there while the service was stopped, My files does not open until you move them out.
- **The sidebar no longer says "Proton Drive isn't running" while the service is running**
(B263, B277). When the service runs but cannot open My files, for example because its folder
has files in it, the status at the bottom of the sidebar and on the Sync page now reads
"Can't open your Drive" with the reason, like the page itself.
- **A synced folder stops instead of deleting when nearly all of it vanishes at once** (B270).
The guard against a lost folder, such as a disk that is not mounted, stopped a pass only when
every synced file was gone. One file left over was enough to clear it, and the next pass
trashed everything else on Proton Drive, and on every other computer syncing the folder. A
folder with 20 or more files and folders now also stops when nine in ten of them are missing,
on this computer or on Proton Drive. **Sync From Scratch…** brings them back.
- **My Files opens for accounts whose address keys depend on an inactive account key** (B265,
#40). The mount retried `missing key` forever. Address key tokens are now decrypted with every
account key the password opens, and one address whose keys do not open no longer breaks the
others.
- **A new folder starts its first sync at once** (B260, #53), instead of waiting until every
other folder was walked again. A folder watch that failed partway is retried every 10 minutes
instead of never (B262), and a folder removed and added again keeps its watch (B272).
- **A crash in one folder's sync no longer stops all syncing until a restart** (B259, #53). That
folder shows a sync error, and the next pass tries it again.
- **A folder reads "waiting for first sync" until its first sync finishes**, instead of "up to
date", on **Sync → Folders** and on the Computers page (B261, #53).
- **A large first sync goes on when one folder on Proton Drive fails to list** (B271, #46). It
used to start over from nothing. The folder that failed is tried again on the next pass, and
nothing under it is deleted.
- **A restore that skipped folders is reported as failed**, with the reason for each, instead of
"restored 0 folder(s)" as a success (B269).
- **`pdfs sync list` and `pdfs devices list` show when a folder last synced as a time**, such as
`synced: 11-01 22:07` in UTC like `pdfs activity`, instead of seconds since 1970 (B278, #46).
- **"You're offline" no longer appears for a cache or database error** when pinning, unpinning,
searching or loading a folder (B266, #38). The app shows the actual error.
- **A save no longer fails with "Input/output error"** when the file is opened for writing just
as its last change finishes uploading (B274).
- **`journalctl --user -u proton-drive.service -p warning` shows the service's warnings and
errors** (B258, #53). Every line was stored at info level, so the filter showed nothing.
- **Stopping the service no longer ends with a panic in the journal** (B276).
- **A failed mount attempt stops the workers it started** (B264). They kept running beside the
next attempt and held the database.
- **A new file reads without the network as soon as `pdfs status` shows nothing queued**
(B257). A new file's upload counted as done before its bytes were cached, so a script that
waited for an empty queue and then went offline could not read it. A new file deleted while
open in that moment could also lose the bytes its open handle reads, which made a write or
read through that handle fail with "Input/output error". The cache also removes leftover
tags of evicted files when it opens.
## [3.6.0] — 2026-10-27 ## [3.6.0] — 2026-10-27
Schema: **44**, unchanged. Schema: **44**, unchanged.
+1 -1
View File
@@ -76,7 +76,7 @@ fix it.
| Key | Type | Default | In the app | Meaning | | Key | Type | Default | In the app | Meaning |
|---|---|---|---|---| |---|---|---|---|---|
| `mountpoint` | path | `~/ProtonDrive` | General → Location | Where My files is mounted | | `mountpoint` | path | `~/ProtonDrive` | General → Location | Where My files is mounted. Must be empty: the service does not mount over files |
| `cache_budget` | bytes | 5 GiB | Storage → Cache | Soft limit for cached content. `0` means unlimited. Available-offline files do not count against it | | `cache_budget` | bytes | 5 GiB | Storage → Cache | Soft limit for cached content. `0` means unlimited. Available-offline files do not count against it |
| `upload_limit` | bytes/s | none | General → Network | Shared cap for all uploads. `0` or `null` means none | | `upload_limit` | bytes/s | none | General → Network | Shared cap for all uploads. `0` or `null` means none |
| `download_limit` | bytes/s | none | General → Network | Shared cap for all downloads, reads from the mount included | | `download_limit` | bytes/s | none | General → Network | Shared cap for all downloads, reads from the mount included |
+3 -1
View File
@@ -28,7 +28,9 @@ Yes. `~/ProtonDrive` is your Proton Drive, not a copy. A deleted file moves to t
Trash, and you can restore it from **Trash** in the app or the web. See [Trash](FILES.md#trash). Trash, and you can restore it from **Trash** in the app or the web. See [Trash](FILES.md#trash).
Stopping the service is not the same: once the service stops, `~/ProtonDrive` is just an empty Stopping the service is not the same: once the service stops, `~/ProtonDrive` is just an empty
folder, and your files stay on Proton Drive. folder, and your files stay on Proton Drive. Keep it empty: the service does not open My files
over a folder with files in it, because it would hide them. See
[My files does not open: the folder is not empty](TROUBLESHOOTING.md#my-files-does-not-open-the-folder-is-not-empty).
## Online only, available offline or synced folder: which do I want? ## Online only, available offline or synced folder: which do I want?
+1 -1
View File
@@ -102,7 +102,7 @@ That URL follows `main`. To stay on releases, pin the input to a release tag ins
the tag to update: the tag to update:
```nix ```nix
inputs.proton-drive-linux.url = "github:narrrl/proton-drive-linux/v3.6.0"; inputs.proton-drive-linux.url = "github:narrrl/proton-drive-linux/v3.7.0";
``` ```
Each release tag is built with Nix before the release is published. Each release tag is built with Nix before the release is published.
+18 -3
View File
@@ -141,6 +141,20 @@ fusermount3 -uz ~/ProtonDrive
systemctl --user restart proton-drive.service systemctl --user restart proton-drive.service
``` ```
### My files does not open: the folder is not empty
The app says **Your Proton Drive Folder Isn't Empty**, and `pdfs diagnose` reports
`mount: failing … is not empty`. The folder chosen for My files has files in it, and the service
does not open My files over them: they would be hidden, and not uploaded, for as long as the
service runs.
Move the files out of the folder, or choose another folder in **Preferences → General →
Location**. The service tries again on its own and opens once the folder is empty. To put the
files on Proton Drive, copy them into My files once it is open.
Files saved into `~/ProtonDrive` while the service was stopped are in the same place: in the
local folder, not on Proton Drive.
### The folder is empty or missing ### The folder is empty or missing
Check that the service runs and is signed in, with `pdfs status`. The service waits for a stored Check that the service runs and is signed in, with `pdfs status`. The service waits for a stored
@@ -234,9 +248,10 @@ Check that:
### A synced folder stays in error and nothing downloads ### A synced folder stays in error and nothing downloads
The log says `every one of the N synced paths is missing locally; refusing to trash them on The log says `M of the N synced paths are missing locally; refusing to trash them on Drive`.
Drive`. The folder synced before, and now none of its files are on this computer. The sync The folder synced before, and now all or nearly all of its files are gone from this computer:
stops so that it does not delete them on Proton Drive too. Check that the folder is the right everything, or nine in ten of a folder with 20 or more files and folders. The sync stops so that
it does not delete them on Proton Drive too. Check that the folder is the right
one and that its disk is mounted. To get the files back, choose **Sync From Scratch…** in the one and that its disk is mounted. To get the files back, choose **Sync From Scratch…** in the
folder's menu on **Sync → Folders**, or run: folder's menu on **Sync → Folders**, or run:
+1 -1
View File
@@ -9,7 +9,7 @@
# Build + install: cd packaging && makepkg -fi # Build + install: cd packaging && makepkg -fi
pkgname=proton-drive-linux pkgname=proton-drive-linux
pkgver=3.6.0 pkgver=3.7.0
pkgrel=1 pkgrel=1
pkgdesc="Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app + tray" pkgdesc="Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app + tray"
arch=('x86_64') arch=('x86_64')
@@ -1,6 +1,6 @@
pkgbase = proton-drive-for-linux-bin pkgbase = proton-drive-for-linux-bin
pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries) pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)
pkgver = 3.6.0 pkgver = 3.7.0
pkgrel = 1 pkgrel = 1
url = https://proton-drive.narl.io url = https://proton-drive.narl.io
install = proton-drive.install install = proton-drive.install
@@ -22,21 +22,21 @@ pkgbase = proton-drive-for-linux-bin
optdepends = xdg-utils: "Open folder" action in the tray menu optdepends = xdg-utils: "Open folder" action in the tray menu
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf) optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
provides = proton-drive-for-linux=3.6.0 provides = proton-drive-for-linux=3.7.0
provides = proton-drive-linux=3.6.0 provides = proton-drive-linux=3.7.0
provides = pdfs provides = pdfs
conflicts = proton-drive-linux conflicts = proton-drive-linux
conflicts = proton-drive-for-linux conflicts = proton-drive-for-linux
conflicts = proton-drive-for-linux-git conflicts = proton-drive-for-linux-git
options = !strip options = !strip
options = !debug options = !debug
source = proton-drive-linux-3.6.0-x86_64.tar.gz::https://github.com/narrrl/proton-drive-linux/releases/download/v3.6.0/proton-drive-linux-3.6.0-x86_64.tar.gz source = proton-drive-linux-3.7.0-x86_64.tar.gz::https://github.com/narrrl/proton-drive-linux/releases/download/v3.7.0/proton-drive-linux-3.7.0-x86_64.tar.gz
source = io.narl.proton-drive-linux-3.6.0.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.0/packaging/io.narl.proton-drive-linux.desktop source = io.narl.proton-drive-linux-3.7.0.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/packaging/io.narl.proton-drive-linux.desktop
source = io.narl.proton-drive-linux-tray-3.6.0.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.0/packaging/io.narl.proton-drive-linux-tray.desktop source = io.narl.proton-drive-linux-tray-3.7.0.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/packaging/io.narl.proton-drive-linux-tray.desktop
source = io.narl.proton-drive-linux-3.6.0.svg::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.0/packaging/io.narl.proton-drive-linux.svg source = io.narl.proton-drive-linux-3.7.0.svg::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/packaging/io.narl.proton-drive-linux.svg
source = proton-drive-3.6.0.service::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.0/packaging/proton-drive.service source = proton-drive-3.7.0.service::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/packaging/proton-drive.service
source = LICENSE-3.6.0::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.0/LICENSE source = LICENSE-3.7.0::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/LICENSE
sha256sums = 8e9b76b0df238af1c8978c33b4c27c0c548e1faa81b368d0d271ed564d0a76c7 sha256sums = 3f0d16c19b10b30e3f181e3c7fb439f0a8c38980e8ab7a4a96ae6596b349787c
sha256sums = d190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123 sha256sums = d190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123
sha256sums = 1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0 sha256sums = 1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0
sha256sums = e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828 sha256sums = e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828
@@ -1,7 +1,7 @@
# Maintainer: Nils Pukropp <contact@narl.io> # Maintainer: Nils Pukropp <contact@narl.io>
pkgname=proton-drive-for-linux-bin pkgname=proton-drive-for-linux-bin
pkgver=3.6.0 pkgver=3.7.0
pkgrel=1 pkgrel=1
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)" pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)"
arch=('x86_64') arch=('x86_64')
@@ -36,7 +36,7 @@ source=("proton-drive-linux-$pkgver-x86_64.tar.gz::$_repo/releases/download/$_ta
"io.narl.proton-drive-linux-$pkgver.svg::$_raw/packaging/io.narl.proton-drive-linux.svg" "io.narl.proton-drive-linux-$pkgver.svg::$_raw/packaging/io.narl.proton-drive-linux.svg"
"proton-drive-$pkgver.service::$_raw/packaging/proton-drive.service" "proton-drive-$pkgver.service::$_raw/packaging/proton-drive.service"
"LICENSE-$pkgver::$_raw/LICENSE") "LICENSE-$pkgver::$_raw/LICENSE")
sha256sums=('8e9b76b0df238af1c8978c33b4c27c0c548e1faa81b368d0d271ed564d0a76c7' sha256sums=('3f0d16c19b10b30e3f181e3c7fb439f0a8c38980e8ab7a4a96ae6596b349787c'
'd190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123' 'd190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123'
'1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0' '1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0'
'e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828' 'e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828'
@@ -1,6 +1,6 @@
pkgbase = proton-drive-for-linux-git pkgbase = proton-drive-for-linux-git
pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git) pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)
pkgver = 3.6.0.r0.g2720191 pkgver = 3.7.0.r0.g7ab14bb
pkgrel = 1 pkgrel = 1
url = https://proton-drive.narl.io url = https://proton-drive.narl.io
install = proton-drive.install install = proton-drive.install
@@ -25,8 +25,8 @@ pkgbase = proton-drive-for-linux-git
optdepends = xdg-utils: "Open folder" action in the tray menu optdepends = xdg-utils: "Open folder" action in the tray menu
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf) optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
provides = proton-drive-for-linux=3.6.0.r0.g2720191 provides = proton-drive-for-linux=3.7.0.r0.g7ab14bb
provides = proton-drive-linux=3.6.0.r0.g2720191 provides = proton-drive-linux=3.7.0.r0.g7ab14bb
provides = pdfs provides = pdfs
conflicts = proton-drive-linux conflicts = proton-drive-linux
conflicts = proton-drive-for-linux conflicts = proton-drive-for-linux
@@ -1,7 +1,7 @@
# Maintainer: Nils Pukropp <contact@narl.io> # Maintainer: Nils Pukropp <contact@narl.io>
pkgname=proton-drive-for-linux-git pkgname=proton-drive-for-linux-git
pkgver=3.6.0.r0.g2720191 pkgver=3.7.0.r0.g7ab14bb
pkgrel=1 pkgrel=1
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)" pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)"
arch=('x86_64') arch=('x86_64')
@@ -1,6 +1,6 @@
pkgbase = proton-drive-for-linux pkgbase = proton-drive-for-linux
pkgdesc = Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray pkgdesc = Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray
pkgver = 3.6.0 pkgver = 3.7.0
pkgrel = 1 pkgrel = 1
url = https://proton-drive.narl.io url = https://proton-drive.narl.io
install = proton-drive.install install = proton-drive.install
@@ -24,13 +24,13 @@ pkgbase = proton-drive-for-linux
optdepends = xdg-utils: "Open folder" action in the tray menu optdepends = xdg-utils: "Open folder" action in the tray menu
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf) optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
provides = proton-drive-linux=3.6.0 provides = proton-drive-linux=3.7.0
provides = pdfs provides = pdfs
conflicts = proton-drive-linux conflicts = proton-drive-linux
conflicts = proton-drive-for-linux-bin conflicts = proton-drive-for-linux-bin
conflicts = proton-drive-for-linux-git conflicts = proton-drive-for-linux-git
options = !lto options = !lto
source = proton-drive-for-linux-3.6.0.tar.gz::https://github.com/narrrl/proton-drive-linux/archive/refs/tags/v3.6.0.tar.gz source = proton-drive-for-linux-3.7.0.tar.gz::https://github.com/narrrl/proton-drive-linux/archive/refs/tags/v3.7.0.tar.gz
sha256sums = d9b16b1027816a379d6a11c6396d779f751a6f94becaa16b17439420f561d13d sha256sums = 542c534976e335cde6658de127e1eefffade9057d5332fd33457bc371c7a2737
pkgname = proton-drive-for-linux pkgname = proton-drive-for-linux
@@ -1,7 +1,7 @@
# Maintainer: Nils Pukropp <contact@narl.io> # Maintainer: Nils Pukropp <contact@narl.io>
pkgname=proton-drive-for-linux pkgname=proton-drive-for-linux
pkgver=3.6.0 pkgver=3.7.0
pkgrel=1 pkgrel=1
pkgdesc="Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray" pkgdesc="Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray"
arch=('x86_64') arch=('x86_64')
@@ -26,7 +26,7 @@ options=('!lto')
# Stops the running daemon before removal, so the mount stops mirroring deletes. # Stops the running daemon before removal, so the mount stops mirroring deletes.
install=proton-drive.install install=proton-drive.install
source=("$pkgname-$pkgver.tar.gz::$_repo/archive/refs/tags/v$pkgver.tar.gz") source=("$pkgname-$pkgver.tar.gz::$_repo/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('d9b16b1027816a379d6a11c6396d779f751a6f94becaa16b17439420f561d13d') sha256sums=('542c534976e335cde6658de127e1eefffade9057d5332fd33457bc371c7a2737')
_srcname="proton-drive-linux-$pkgver" _srcname="proton-drive-linux-$pkgver"
+1 -1
View File
@@ -10,7 +10,7 @@
# Match Arch PKGBUILD `!lto` — LTO has broken some GTK/Rust links in practice. # Match Arch PKGBUILD `!lto` — LTO has broken some GTK/Rust links in practice.
%global _lto_cflags %{nil} %global _lto_cflags %{nil}
%{!?version: %global version 3.6.0} %{!?version: %global version 3.7.0}
%global forge https://github.com/narrrl/proton-drive-linux %global forge https://github.com/narrrl/proton-drive-linux
# Files come from the checkout, or from the unpacked tag archive. # Files come from the checkout, or from the unpacked tag archive.
%global src %{?git_dir}%{!?git_dir:.} %global src %{?git_dir}%{!?git_dir:.}
+206 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: German\n" "Language-Team: German\n"
@@ -57,7 +57,7 @@ msgstr "%-d. %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d. %B %Y, %H:%M" msgstr "%A, %-d. %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A, %-d. %B %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "Meine Dateien" msgstr "Meine Dateien"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Fotos" msgstr "Fotos"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Mit mir geteilt" msgstr "Mit mir geteilt"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Von mir geteilt" msgstr "Von mir geteilt"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Computer" msgstr "Computer"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Papierkorb" msgstr "Papierkorb"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Synchronisierung" msgstr "Synchronisierung"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Keine Internetverbindung" msgstr "Keine Internetverbindung"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Das ist nicht mehr vorhanden" msgstr "Das ist nicht mehr vorhanden"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "Kein Zugriff darauf" msgstr "Kein Zugriff darauf"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Etwas anderes hat dies zuerst geändert" msgstr "Etwas anderes hat dies zuerst geändert"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Das Proton Drive ist voll" msgstr "Das Proton Drive ist voll"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -149,23 +149,23 @@ msgstr ""
"Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG " "Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG "
"unterstützt oder befürwortet." "unterstützt oder befürwortet."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Quellcode" msgstr "Quellcode"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Nutzungsbedingungen von Proton" msgstr "Nutzungsbedingungen von Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Datenschutzerklärung von Proton" msgstr "Datenschutzerklärung von Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Haftungsausschluss" msgstr "Haftungsausschluss"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -190,7 +190,7 @@ msgstr ""
"bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten " "bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten "
"zusätzlich gesichert werden." "zusätzlich gesichert werden."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -200,7 +200,7 @@ msgstr ""
"\">GeoNames</a>, lizenziert unter <a href=\"https://creativecommons.org/" "\">GeoNames</a>, lizenziert unter <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>." "licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -210,7 +210,7 @@ msgstr ""
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a> gezeichnet, die " "href=\"https://www.naturalearthdata.com/\">Natural Earth</a> gezeichnet, die "
"gemeinfrei sind." "gemeinfrei sind."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -226,15 +226,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Mitwirkende an Proton Drive for Linux" msgstr "Mitwirkende an Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Proton Drive beenden?" msgstr "Proton Drive beenden?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -243,7 +243,7 @@ msgstr ""
"eine Verbindung hergestellt wird. Proton Drive startet bei der nächsten " "eine Verbindung hergestellt wird. Proton Drive startet bei der nächsten "
"Anmeldung erneut." "Anmeldung erneut."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -278,30 +278,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Beenden" msgstr "Beenden"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Proton Drive konnte nicht beendet werden" msgstr "Proton Drive konnte nicht beendet werden"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "Der Proton-Drive-Dienst wurde nicht beendet." msgstr "Der Proton-Drive-Dienst wurde nicht beendet."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Drive durchsuchen" msgstr "Drive durchsuchen"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -310,43 +310,43 @@ msgstr "Drive durchsuchen"
msgid "Refresh" msgid "Refresh"
msgstr "Aktualisieren" msgstr "Aktualisieren"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Einstellungen" msgstr "Einstellungen"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Tastenkürzel" msgstr "Tastenkürzel"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Dateien" msgstr "Dateien"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Neuer Ordner" msgstr "Neuer Ordner"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Dateien hochladen" msgstr "Dateien hochladen"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Zurück / Vor" msgstr "Zurück / Vor"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Übergeordneter Ordner" msgstr "Übergeordneter Ordner"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Raster / Liste" msgstr "Raster / Liste"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -355,7 +355,7 @@ msgstr "Raster / Liste"
msgid "Rename" msgid "Rename"
msgstr "Umbenennen" msgstr "Umbenennen"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -365,70 +365,84 @@ msgstr "Umbenennen"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "In den Papierkorb verschieben" msgstr "In den Papierkorb verschieben"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Auswahl aufheben" msgstr "Auswahl aufheben"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Größere Vorschaubilder" msgstr "Größere Vorschaubilder"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Kleinere Vorschaubilder" msgstr "Kleinere Vorschaubilder"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Vorschaubildgröße zurücksetzen" msgstr "Vorschaubildgröße zurücksetzen"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Alles auswählen" msgstr "Alles auswählen"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Fotobetrachter" msgstr "Fotobetrachter"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Vorheriges / nächstes Foto" msgstr "Vorheriges / nächstes Foto"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Erstes / letztes Foto" msgstr "Erstes / letztes Foto"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Details anzeigen" msgstr "Details anzeigen"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Vollbild" msgstr "Vollbild"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Zum Umbenennen genau ein Element auswählen" msgstr "Zum Umbenennen genau ein Element auswählen"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Nicht verbunden" msgstr "Nicht verbunden"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "Der Proton-Drive-Dienst läuft nicht." msgstr "Der Proton-Drive-Dienst läuft nicht."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Proton Drive kann nicht geöffnet werden" msgstr "Proton Drive kann nicht geöffnet werden"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"„{path}“ enthält bereits Dateien, die „Meine Dateien“ verdecken würde. "
"Proton Drive versucht es selbstständig erneut, sobald der Ordner leer ist. "
"Sie können in den Einstellungen auch einen anderen Ordner für „Meine "
"Dateien“ wählen."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -437,17 +451,52 @@ msgstr ""
"Der Proton-Drive-Dienst kann wiederholt nicht starten und versucht es " "Der Proton-Drive-Dienst kann wiederholt nicht starten und versucht es "
"selbstständig erneut. Letzter Fehler: {error}" "selbstständig erneut. Letzter Fehler: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Verbindung wird hergestellt …" msgstr "Verbindung wird hergestellt …"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "Warten auf den Start des Proton-Drive-Dienstes." msgstr "Warten auf den Start des Proton-Drive-Dienstes."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Ihr Proton-Drive-Ordner ist nicht leer"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"„{path}“ enthält bereits {n} Element. „Meine Dateien“ würde es verdecken, "
"daher öffnet Proton Drive dort nicht. Verschieben Sie das Element in einen "
"anderen Ordner, oder wählen Sie einen anderen Ordner für „Meine Dateien“."
msgstr[1] ""
"„{path}“ enthält bereits {n} Elemente. „Meine Dateien“ würde sie verdecken, "
"daher öffnet Proton Drive dort nicht. Verschieben Sie die Elemente in einen "
"anderen Ordner, oder wählen Sie einen anderen Ordner für „Meine Dateien“."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Nicht jetzt"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Ordner öffnen"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Anderen Ordner auswählen …"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -658,7 +707,7 @@ msgstr[0] "{n} Ordner erstellt"
msgstr[1] "{n} Ordner erstellt" msgstr[1] "{n} Ordner erstellt"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1312,7 +1361,7 @@ msgstr "Alben konnten nicht geladen werden"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1582,7 +1631,7 @@ msgid "Make available offline"
msgstr "Offline verfügbar machen" msgstr "Offline verfügbar machen"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Nur online verfügbar machen" msgstr "Nur online verfügbar machen"
@@ -2183,7 +2232,7 @@ msgid "No files or folders match that search."
msgstr "Keine Dateien oder Ordner entsprechen dieser Suche." msgstr "Keine Dateien oder Ordner entsprechen dieser Suche."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2932,7 +2981,7 @@ msgid "Sync paused until you resume"
msgstr "Synchronisierung bis zur Fortsetzung pausiert" msgstr "Synchronisierung bis zur Fortsetzung pausiert"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Synchronisierung pausiert" msgstr "Synchronisierung pausiert"
@@ -4987,67 +5036,90 @@ msgstr "Die Sprache konnte nicht gespeichert werden"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Proton Drive neu starten, um die neue Sprache zu verwenden" msgstr "Proton Drive neu starten, um die neue Sprache zu verwenden"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Proton-Drive-Ordner auswählen" msgstr "Proton-Drive-Ordner auswählen"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Der Ordner konnte nicht gelesen werden"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Leeren Ordner auswählen"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"„{path}“ enthält bereits {n} Element. „Meine Dateien“ würde es verdecken, "
"solange Proton Drive läuft, und es würde nicht hochgeladen."
msgstr[1] ""
"„{path}“ enthält bereits {n} Elemente. „Meine Dateien“ würde sie verdecken, "
"solange Proton Drive läuft, und sie würden nicht hochgeladen."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Der Ordner konnte nicht gespeichert werden" msgstr "Der Ordner konnte nicht gespeichert werden"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Proton Drive neu starten?" msgstr "Proton Drive neu starten?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "" msgstr ""
"„Meine Dateien“ erscheint nach dem Neustart von Proton Drive in „{path}“." "„Meine Dateien“ erscheint nach dem Neustart von Proton Drive in „{path}“."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Später" msgstr "Später"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Jetzt neu starten" msgstr "Jetzt neu starten"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} belegt" msgstr "{size} belegt"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} von {total} belegt ({percent} %)" msgstr "{used} von {total} belegt ({percent} %)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive verbunden" msgstr "Proton Drive verbunden"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Deine Dateien sind verfügbar." msgstr "Deine Dateien sind verfügbar."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Proton Drive getrennt" msgstr "Proton Drive getrennt"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"Der Proton-Drive-Dienst wurde beendet. Dateien sind erst nach seinem " "Der Proton-Drive-Dienst wurde beendet. Dateien sind erst nach seinem "
"Neustart wieder verfügbar." "Neustart wieder verfügbar."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Synchronisierung abgeschlossen" msgstr "Synchronisierung abgeschlossen"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5056,28 +5128,28 @@ msgstr[1] "Übertragung von {n} Dateien abgeschlossen."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title} – {done} von {total}" msgstr "{title} – {done} von {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} – {detail} ({done} von {total})" msgstr "{title} – {detail} ({done} von {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title} …" msgstr "{title} …"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title} – {detail} …" msgstr "{title} – {detail} …"
@@ -5085,7 +5157,7 @@ msgstr "{title} – {detail} …"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name} – {done} ({speed}/s)" msgstr "{arrow} {name} – {done} ({speed}/s)"
@@ -5093,155 +5165,163 @@ msgstr "{arrow} {name} – {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name} – {done} von {total} ({speed}/s)" msgstr "{arrow} {name} – {done} von {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} zwischengespeichert – keine Grenze festgelegt" msgstr "{used} zwischengespeichert – keine Grenze festgelegt"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} von {limit} belegt" msgstr "{used} von {limit} belegt"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Sitzung abgelaufen" msgstr "Sitzung abgelaufen"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · zum Synchronisieren erneut anmelden" msgstr "{queued} · zum Synchronisieren erneut anmelden"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Zum Synchronisieren erneut anmelden" msgstr "Zum Synchronisieren erneut anmelden"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Anmeldung nicht gespeichert" msgstr "Anmeldung nicht gespeichert"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Entsperren Sie Ihren Schlüsselbund, sonst werden Sie beim nächsten Neustart " "Entsperren Sie Ihren Schlüsselbund, sonst werden Sie beim nächsten Neustart "
"abgemeldet" "abgemeldet"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Neu starten, um das Update abzuschließen" msgstr "Neu starten, um das Update abzuschließen"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "Eine ältere Version von Proton Drive läuft noch" msgstr "Eine ältere Version von Proton Drive läuft noch"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Proton Drive {version} läuft noch" msgstr "Proton Drive {version} läuft noch"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · wird {time} fortgesetzt" msgstr "{queued} · wird {time} fortgesetzt"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Wird {time} fortgesetzt" msgstr "Wird {time} fortgesetzt"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Bis zur manuellen Fortsetzung" msgstr "Bis zur manuellen Fortsetzung"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} Änderung erfordert Aufmerksamkeit" msgstr[0] "{n} Änderung erfordert Aufmerksamkeit"
msgstr[1] "{n} Änderungen erfordern Aufmerksamkeit" msgstr[1] "{n} Änderungen erfordern Aufmerksamkeit"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Nur zwischengespeicherte Dateien" msgstr "Nur zwischengespeicherte Dateien"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Wird synchronisiert" msgstr "Wird synchronisiert"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Auf dem neuesten Stand" msgstr "Auf dem neuesten Stand"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive läuft nicht" msgstr "Proton Drive läuft nicht"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Ihr Proton-Drive-Ordner ist nicht leer"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive versucht immer wieder zu starten"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Reagiert nicht" msgstr "Reagiert nicht"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive braucht zu lange für eine Antwort" msgstr "Proton Drive braucht zu lange für eine Antwort"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "später" msgstr "später"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "um %H:%M" msgstr "um %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "am %a um %H:%M" msgstr "am %a um %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "am %-d. %b" msgstr "am %-d. %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "Keine offline verfügbaren Dateien" msgstr "Keine offline verfügbaren Dateien"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
"Mit einem Rechtsklick auf eine Datei oder einen Ordner „Offline verfügbar“ " "Mit einem Rechtsklick auf eine Datei oder einen Ordner „Offline verfügbar“ "
"auswählen." "auswählen."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Konnte nicht auf „nur online“ umgestellt werden" msgstr "Konnte nicht auf „nur online“ umgestellt werden"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Weniger anzeigen" msgstr "Weniger anzeigen"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6317,37 +6397,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Nur online" msgstr "Nur online"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} Upload in der Warteschlange" msgstr[0] "{n} Upload in der Warteschlange"
msgstr[1] "{n} Uploads in der Warteschlange" msgstr[1] "{n} Uploads in der Warteschlange"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} Änderung in der Warteschlange" msgstr[0] "{n} Änderung in der Warteschlange"
msgstr[1] "{n} Änderungen in der Warteschlange" msgstr[1] "{n} Änderungen in der Warteschlange"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} Upload" msgstr[0] "{n} Upload"
msgstr[1] "{n} Uploads" msgstr[1] "{n} Uploads"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} in der Warteschlange" msgstr "{uploads}, {changes} in der Warteschlange"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6482,10 +6562,6 @@ msgstr "Proton Drive öffnen"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Proton Drive neu starten" msgstr "Proton Drive neu starten"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Ordner öffnen"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Synchronisierung fortsetzen" msgstr "Synchronisierung fortsetzen"
@@ -6819,9 +6895,6 @@ msgstr "Proton-Drive-Hintergrunddienst nicht erreichbar: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Freigabe beenden?" #~ msgstr "Freigabe beenden?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Ordner für den Einhängepunkt auswählen"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Einhängepunkt konnte nicht gespeichert werden" #~ msgstr "Einhängepunkt konnte nicht gespeichert werden"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: English (United Kingdom)\n" "Language-Team: English (United Kingdom)\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y, %H:%M" msgstr "%A %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "My files" msgstr "My files"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Photos" msgstr "Photos"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Shared with me" msgstr "Shared with me"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Shared by me" msgstr "Shared by me"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Computers" msgstr "Computers"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Trash" msgstr "Trash"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Sync" msgstr "Sync"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "You're offline" msgstr "You're offline"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "That's not there any more" msgstr "That's not there any more"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "You don't have access to that" msgstr "You don't have access to that"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Something changed this first" msgstr "Something changed this first"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Your Proton Drive is full" msgstr "Your Proton Drive is full"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -149,23 +149,23 @@ msgstr ""
"Unofficial client — not affiliated with, endorsed by, or supported by Proton " "Unofficial client — not affiliated with, endorsed by, or supported by Proton "
"AG." "AG."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Source Code" msgstr "Source Code"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Proton Terms of Service" msgstr "Proton Terms of Service"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Proton Privacy Policy" msgstr "Proton Privacy Policy"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Disclaimer" msgstr "Disclaimer"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -187,7 +187,7 @@ msgstr ""
"This software is provided “as is”, without warranty of any kind. Keep a copy " "This software is provided “as is”, without warranty of any kind. Keep a copy "
"of any data you cannot afford to lose." "of any data you cannot afford to lose."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -197,7 +197,7 @@ msgstr ""
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>." "licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -207,7 +207,7 @@ msgstr ""
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
"public domain." "public domain."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -223,15 +223,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Proton Drive for Linux contributors" msgstr "Proton Drive for Linux contributors"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Stop Proton Drive?" msgstr "Stop Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -239,7 +239,7 @@ msgstr ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -274,30 +274,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Cancel" msgstr "Cancel"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Stop" msgstr "Stop"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Couldn't stop Proton Drive" msgstr "Couldn't stop Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "The Proton Drive service did not stop." msgstr "The Proton Drive service did not stop."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "General" msgstr "General"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Search Drive" msgstr "Search Drive"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -306,43 +306,43 @@ msgstr "Search Drive"
msgid "Refresh" msgid "Refresh"
msgstr "Refresh" msgstr "Refresh"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Preferences" msgstr "Preferences"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Keyboard shortcuts" msgstr "Keyboard shortcuts"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Files" msgstr "Files"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "New folder" msgstr "New folder"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Upload files" msgstr "Upload files"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Back / forward" msgstr "Back / forward"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Parent folder" msgstr "Parent folder"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Grid / list" msgstr "Grid / list"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -351,7 +351,7 @@ msgstr "Grid / list"
msgid "Rename" msgid "Rename"
msgstr "Rename" msgstr "Rename"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -361,70 +361,83 @@ msgstr "Rename"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Move to Trash" msgstr "Move to Trash"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Clear the selection" msgstr "Clear the selection"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Larger thumbnails" msgstr "Larger thumbnails"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Smaller thumbnails" msgstr "Smaller thumbnails"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Reset thumbnail size" msgstr "Reset thumbnail size"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Select all" msgstr "Select all"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Photo Viewer" msgstr "Photo Viewer"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Previous / next photo" msgstr "Previous / next photo"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "First / last photo" msgstr "First / last photo"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Show details" msgstr "Show details"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Fullscreen" msgstr "Fullscreen"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Close" msgstr "Close"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Select a single item to rename it" msgstr "Select a single item to rename it"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Not connected" msgstr "Not connected"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "The Proton Drive service isn't running." msgstr "The Proton Drive service isn't running."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Can't open your Drive" msgstr "Can't open your Drive"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -433,17 +446,52 @@ msgstr ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Connecting…" msgstr "Connecting…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "Waiting for the Proton Drive service to start." msgstr "Waiting for the Proton Drive service to start."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Your Proton Drive Folder Isn't Empty"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgstr[1] ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Not Now"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Open Folder"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Choose Another Folder…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -650,7 +698,7 @@ msgstr[0] "Created {n} folder"
msgstr[1] "Created {n} folders" msgstr[1] "Created {n} folders"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1300,7 +1348,7 @@ msgstr "Couldn't load albums"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1570,7 +1618,7 @@ msgid "Make available offline"
msgstr "Make available offline" msgstr "Make available offline"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Make online only" msgstr "Make online only"
@@ -2162,7 +2210,7 @@ msgid "No files or folders match that search."
msgstr "No files or folders match that search." msgstr "No files or folders match that search."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2893,7 +2941,7 @@ msgid "Sync paused until you resume"
msgstr "Sync paused until you resume" msgstr "Sync paused until you resume"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Sync paused" msgstr "Sync paused"
@@ -4890,65 +4938,88 @@ msgstr "Couldn't save the language"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Restart Proton Drive to use the new language" msgstr "Restart Proton Drive to use the new language"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Choose Proton Drive Folder" msgstr "Choose Proton Drive Folder"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Couldn't read the folder"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Choose an Empty Folder"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgstr[1] ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Couldn't save the folder" msgstr "Couldn't save the folder"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Restart Proton Drive?" msgstr "Restart Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "My files now appears in “{path}” after Proton Drive restarts." msgstr "My files now appears in “{path}” after Proton Drive restarts."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Later" msgstr "Later"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Restart Now" msgstr "Restart Now"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} used" msgstr "{size} used"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} of {total} used ({percent}%)" msgstr "{used} of {total} used ({percent}%)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive connected" msgstr "Proton Drive connected"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Your files are available." msgstr "Your files are available."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Proton Drive disconnected" msgstr "Proton Drive disconnected"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Sync complete" msgstr "Sync complete"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -4957,28 +5028,28 @@ msgstr[1] "{n} files finished transferring."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title} — {done} of {total}" msgstr "{title} — {done} of {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} of {total})" msgstr "{title} — {detail} ({done} of {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title} — {detail}…" msgstr "{title} — {detail}…"
@@ -4986,7 +5057,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name} — {done} ({speed}/s)" msgstr "{arrow} {name} — {done} ({speed}/s)"
@@ -4994,151 +5065,159 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name} — {done} of {total} ({speed}/s)" msgstr "{arrow} {name} — {done} of {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} cached — no limit set" msgstr "{used} cached — no limit set"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} of {limit} used" msgstr "{used} of {limit} used"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Session expired" msgstr "Session expired"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · sign in again to sync" msgstr "{queued} · sign in again to sync"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Sign in again to sync" msgstr "Sign in again to sync"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Sign-in not saved" msgstr "Sign-in not saved"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "Unlock your keyring, or the next reboot signs you out" msgstr "Unlock your keyring, or the next reboot signs you out"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Restart to finish updating" msgstr "Restart to finish updating"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "An older version of Proton Drive is still running" msgstr "An older version of Proton Drive is still running"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Proton Drive {version} is still running" msgstr "Proton Drive {version} is still running"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · resumes {time}" msgstr "{queued} · resumes {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Resumes {time}" msgstr "Resumes {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Until you resume" msgstr "Until you resume"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} change needs attention" msgstr[0] "{n} change needs attention"
msgstr[1] "{n} changes need attention" msgstr[1] "{n} changes need attention"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Cached files only" msgstr "Cached files only"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Syncing" msgstr "Syncing"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Up to date" msgstr "Up to date"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive isn't running" msgstr "Proton Drive isn't running"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Your Proton Drive folder isn't empty"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive keeps trying to start"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Not responding" msgstr "Not responding"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive is taking too long to answer" msgstr "Proton Drive is taking too long to answer"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "later" msgstr "later"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "at %H:%M" msgstr "at %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a %H:%M" msgstr "%a %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "%e %b" msgstr "%e %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "No files kept offline" msgstr "No files kept offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "Right-click a file or folder and choose “Available offline”." msgstr "Right-click a file or folder and choose “Available offline”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Couldn't make it online only" msgstr "Couldn't make it online only"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Show fewer" msgstr "Show fewer"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6192,37 +6271,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Online only" msgstr "Online only"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} upload queued" msgstr[0] "{n} upload queued"
msgstr[1] "{n} uploads queued" msgstr[1] "{n} uploads queued"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} change queued" msgstr[0] "{n} change queued"
msgstr[1] "{n} changes queued" msgstr[1] "{n} changes queued"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} upload" msgstr[0] "{n} upload"
msgstr[1] "{n} uploads" msgstr[1] "{n} uploads"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} queued" msgstr "{uploads}, {changes} queued"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6357,10 +6436,6 @@ msgstr "Open Proton Drive"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Restart Proton Drive" msgstr "Restart Proton Drive"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Open Folder"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Resume Sync" msgstr "Resume Sync"
@@ -6688,9 +6763,6 @@ msgstr "cannot reach the Proton Drive daemon: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Stop sharing?" #~ msgstr "Stop sharing?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Choose mountpoint folder"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Couldn't save mountpoint" #~ msgstr "Couldn't save mountpoint"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d de %B de %Y, %H:%M" msgstr "%A, %-d de %B de %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "Mis archivos" msgstr "Mis archivos"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Fotos" msgstr "Fotos"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Compartido conmigo" msgstr "Compartido conmigo"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Compartido por mí" msgstr "Compartido por mí"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Equipos" msgstr "Equipos"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Papelera" msgstr "Papelera"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Sincronización" msgstr "Sincronización"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Está sin conexión" msgstr "Está sin conexión"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Eso ya no existe" msgstr "Eso ya no existe"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "No tiene acceso a eso" msgstr "No tiene acceso a eso"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Algo lo cambió antes" msgstr "Algo lo cambió antes"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Su Proton Drive está lleno" msgstr "Su Proton Drive está lleno"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -149,23 +149,23 @@ msgstr ""
"Cliente no oficial: no está afiliado a Proton AG, ni respaldado ni mantenido " "Cliente no oficial: no está afiliado a Proton AG, ni respaldado ni mantenido "
"por esta." "por esta."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Código fuente" msgstr "Código fuente"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Condiciones del servicio de Proton" msgstr "Condiciones del servicio de Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Política de privacidad de Proton" msgstr "Política de privacidad de Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Aviso legal" msgstr "Aviso legal"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -188,7 +188,7 @@ msgstr ""
"Este software se proporciona “tal cual”, sin garantía de ningún tipo. Guarde " "Este software se proporciona “tal cual”, sin garantía de ningún tipo. Guarde "
"una copia de los datos que no pueda permitirse perder." "una copia de los datos que no pueda permitirse perder."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -198,7 +198,7 @@ msgstr ""
"www.geonames.org/\">GeoNames</a>, con licencia <a href=\"https://" "www.geonames.org/\">GeoNames</a>, con licencia <a href=\"https://"
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>." "creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -208,7 +208,7 @@ msgstr ""
"fronteras de países de <a href=\"https://www.naturalearthdata.com/\">Natural " "fronteras de países de <a href=\"https://www.naturalearthdata.com/\">Natural "
"Earth</a>, que son de dominio público." "Earth</a>, que son de dominio público."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -224,15 +224,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Colaboradores de Proton Drive for Linux" msgstr "Colaboradores de Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "¿Detener Proton Drive?" msgstr "¿Detener Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -241,7 +241,7 @@ msgstr ""
"a conectarse. Proton Drive se iniciará de nuevo en su próximo inicio de " "a conectarse. Proton Drive se iniciará de nuevo en su próximo inicio de "
"sesión." "sesión."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -276,30 +276,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Detener" msgstr "Detener"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "No se pudo detener Proton Drive" msgstr "No se pudo detener Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "El servicio de Proton Drive no se detuvo." msgstr "El servicio de Proton Drive no se detuvo."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "General" msgstr "General"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Buscar en Drive" msgstr "Buscar en Drive"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -308,43 +308,43 @@ msgstr "Buscar en Drive"
msgid "Refresh" msgid "Refresh"
msgstr "Actualizar" msgstr "Actualizar"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Preferencias" msgstr "Preferencias"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Atajos del teclado" msgstr "Atajos del teclado"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Archivos" msgstr "Archivos"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Carpeta nueva" msgstr "Carpeta nueva"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Subir archivos" msgstr "Subir archivos"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Atrás / adelante" msgstr "Atrás / adelante"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Carpeta superior" msgstr "Carpeta superior"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Cuadrícula / lista" msgstr "Cuadrícula / lista"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -353,7 +353,7 @@ msgstr "Cuadrícula / lista"
msgid "Rename" msgid "Rename"
msgstr "Renombrar" msgstr "Renombrar"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -363,70 +363,83 @@ msgstr "Renombrar"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Mover a la papelera" msgstr "Mover a la papelera"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Anular la selección" msgstr "Anular la selección"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Miniaturas más grandes" msgstr "Miniaturas más grandes"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Miniaturas más pequeñas" msgstr "Miniaturas más pequeñas"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Restablecer el tamaño de las miniaturas" msgstr "Restablecer el tamaño de las miniaturas"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Seleccionar todo" msgstr "Seleccionar todo"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Visor de fotos" msgstr "Visor de fotos"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Foto anterior / siguiente" msgstr "Foto anterior / siguiente"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Primera / última foto" msgstr "Primera / última foto"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Mostrar detalles" msgstr "Mostrar detalles"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Pantalla completa" msgstr "Pantalla completa"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Cerrar" msgstr "Cerrar"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Seleccione un único elemento para renombrarlo" msgstr "Seleccione un único elemento para renombrarlo"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Sin conexión" msgstr "Sin conexión"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "El servicio de Proton Drive no está en ejecución." msgstr "El servicio de Proton Drive no está en ejecución."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "No se puede abrir Proton Drive" msgstr "No se puede abrir Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"“{path}” ya contiene archivos, y Mis archivos los ocultaría. Proton Drive "
"vuelve a intentarlo por sí solo cuando la carpeta esté vacía. También puedes "
"elegir otra carpeta para Mis archivos en Preferencias."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -435,17 +448,52 @@ msgstr ""
"El servicio de Proton Drive no consigue iniciarse y vuelve a intentarlo por " "El servicio de Proton Drive no consigue iniciarse y vuelve a intentarlo por "
"sí solo. Último error: {error}" "sí solo. Último error: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Conectando…" msgstr "Conectando…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "Esperando a que se inicie el servicio de Proton Drive." msgstr "Esperando a que se inicie el servicio de Proton Drive."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Tu carpeta de Proton Drive no está vacía"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"“{path}” ya contiene {n} elemento. Mis archivos lo ocultaría, así que Proton "
"Drive no se abre ahí. Mueve el elemento a otra carpeta o elige otra carpeta "
"para Mis archivos."
msgstr[1] ""
"“{path}” ya contiene {n} elementos. Mis archivos los ocultaría, así que "
"Proton Drive no se abre ahí. Mueve los elementos a otra carpeta o elige otra "
"carpeta para Mis archivos."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Ahora no"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Abrir carpeta"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Elegir otra carpeta…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -655,7 +703,7 @@ msgstr[0] "Se creó {n} carpeta"
msgstr[1] "Se crearon {n} carpetas" msgstr[1] "Se crearon {n} carpetas"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1306,7 +1354,7 @@ msgstr "No se pudieron cargar los álbumes"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1576,7 +1624,7 @@ msgid "Make available offline"
msgstr "Hacer disponible sin conexión" msgstr "Hacer disponible sin conexión"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Hacer solo en línea" msgstr "Hacer solo en línea"
@@ -2174,7 +2222,7 @@ msgid "No files or folders match that search."
msgstr "Ningún archivo ni carpeta coincide con esa búsqueda." msgstr "Ningún archivo ni carpeta coincide con esa búsqueda."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2915,7 +2963,7 @@ msgid "Sync paused until you resume"
msgstr "Sincronización en pausa hasta que la reanude" msgstr "Sincronización en pausa hasta que la reanude"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Sincronización en pausa" msgstr "Sincronización en pausa"
@@ -4948,66 +4996,89 @@ msgstr "No se pudo guardar el idioma"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Reinicie Proton Drive para usar el idioma nuevo" msgstr "Reinicie Proton Drive para usar el idioma nuevo"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Elegir la carpeta de Proton Drive" msgstr "Elegir la carpeta de Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "No se pudo leer la carpeta"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Elige una carpeta vacía"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"“{path}” ya contiene {n} elemento. Mis archivos lo ocultaría mientras Proton "
"Drive esté en marcha, y no se subiría."
msgstr[1] ""
"“{path}” ya contiene {n} elementos. Mis archivos los ocultaría mientras "
"Proton Drive esté en marcha, y no se subirían."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "No se pudo guardar la carpeta" msgstr "No se pudo guardar la carpeta"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "¿Reiniciar Proton Drive?" msgstr "¿Reiniciar Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "Mis archivos aparecerá en “{path}” cuando se reinicie Proton Drive." msgstr "Mis archivos aparecerá en “{path}” cuando se reinicie Proton Drive."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Más tarde" msgstr "Más tarde"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Reiniciar ahora" msgstr "Reiniciar ahora"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} usados" msgstr "{size} usados"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} de {total} usados ({percent}%)" msgstr "{used} de {total} usados ({percent}%)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive conectado" msgstr "Proton Drive conectado"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Sus archivos están disponibles." msgstr "Sus archivos están disponibles."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Proton Drive desconectado" msgstr "Proton Drive desconectado"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"El servicio de Proton Drive se detuvo. Los archivos no estarán disponibles " "El servicio de Proton Drive se detuvo. Los archivos no estarán disponibles "
"hasta que se reinicie." "hasta que se reinicie."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Sincronización completada" msgstr "Sincronización completada"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5016,28 +5087,28 @@ msgstr[1] "{n} archivos terminaron de transferirse."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title}: {done} de {total}" msgstr "{title}: {done} de {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title}: {detail} ({done} de {total})" msgstr "{title}: {detail} ({done} de {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title}: {detail}…" msgstr "{title}: {detail}…"
@@ -5045,7 +5116,7 @@ msgstr "{title}: {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name}: {done} ({speed}/s)" msgstr "{arrow} {name}: {done} ({speed}/s)"
@@ -5053,154 +5124,162 @@ msgstr "{arrow} {name}: {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name}: {done} de {total} ({speed}/s)" msgstr "{arrow} {name}: {done} de {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} en caché — sin límite" msgstr "{used} en caché — sin límite"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} de {limit} usados" msgstr "{used} de {limit} usados"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Sesión caducada" msgstr "Sesión caducada"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · vuelva a iniciar sesión para sincronizar" msgstr "{queued} · vuelva a iniciar sesión para sincronizar"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Vuelva a iniciar sesión para sincronizar" msgstr "Vuelva a iniciar sesión para sincronizar"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Inicio de sesión no guardado" msgstr "Inicio de sesión no guardado"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Desbloquee el depósito de claves o el próximo reinicio cerrará su sesión" "Desbloquee el depósito de claves o el próximo reinicio cerrará su sesión"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Reinicie para terminar la actualización" msgstr "Reinicie para terminar la actualización"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "Todavía se está ejecutando una versión anterior de Proton Drive" msgstr "Todavía se está ejecutando una versión anterior de Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Proton Drive {version} todavía se está ejecutando" msgstr "Proton Drive {version} todavía se está ejecutando"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · se reanuda {time}" msgstr "{queued} · se reanuda {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Se reanuda {time}" msgstr "Se reanuda {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Hasta que la reanude" msgstr "Hasta que la reanude"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} cambio requiere atención" msgstr[0] "{n} cambio requiere atención"
msgstr[1] "{n} cambios requieren atención" msgstr[1] "{n} cambios requieren atención"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Sin conexión" msgstr "Sin conexión"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Solo archivos en caché" msgstr "Solo archivos en caché"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Sincronizando" msgstr "Sincronizando"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Actualizado" msgstr "Actualizado"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive no está en ejecución" msgstr "Proton Drive no está en ejecución"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Tu carpeta de Proton Drive no está vacía"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive sigue intentando iniciarse"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "No responde" msgstr "No responde"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive está tardando demasiado en responder" msgstr "Proton Drive está tardando demasiado en responder"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "más tarde" msgstr "más tarde"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "a las %H:%M" msgstr "a las %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a %H:%M" msgstr "%a %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "%-d %b" msgstr "%-d %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "No hay archivos disponibles sin conexión" msgstr "No hay archivos disponibles sin conexión"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
"Pulse con el botón derecho en un archivo o una carpeta y elija “Disponible " "Pulse con el botón derecho en un archivo o una carpeta y elija “Disponible "
"sin conexión”." "sin conexión”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "No se pudo hacer solo en línea" msgstr "No se pudo hacer solo en línea"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Mostrar menos" msgstr "Mostrar menos"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6273,37 +6352,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Solo en línea" msgstr "Solo en línea"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} subida en cola" msgstr[0] "{n} subida en cola"
msgstr[1] "{n} subidas en cola" msgstr[1] "{n} subidas en cola"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} cambio en cola" msgstr[0] "{n} cambio en cola"
msgstr[1] "{n} cambios en cola" msgstr[1] "{n} cambios en cola"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} subida" msgstr[0] "{n} subida"
msgstr[1] "{n} subidas" msgstr[1] "{n} subidas"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads} y {changes} en cola" msgstr "{uploads} y {changes} en cola"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6438,10 +6517,6 @@ msgstr "Abrir Proton Drive"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Reiniciar Proton Drive" msgstr "Reiniciar Proton Drive"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Abrir carpeta"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Reanudar la sincronización" msgstr "Reanudar la sincronización"
@@ -6774,9 +6849,6 @@ msgstr "no se puede contactar con el demonio de Proton Drive: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "¿Dejar de compartir?" #~ msgstr "¿Dejar de compartir?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Elegir la carpeta del punto de montaje"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "No se pudo guardar el punto de montaje" #~ msgstr "No se pudo guardar el punto de montaje"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: French\n" "Language-Team: French\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y à %H:%M" msgstr "%A %-d %B %Y à %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y à %H:%M"
msgid "My files" msgid "My files"
msgstr "Mes fichiers" msgstr "Mes fichiers"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Photos" msgstr "Photos"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Partagés avec moi" msgstr "Partagés avec moi"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Partagés par moi" msgstr "Partagés par moi"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Ordinateurs" msgstr "Ordinateurs"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Corbeille" msgstr "Corbeille"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Synchronisation" msgstr "Synchronisation"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what} : {detail}" msgstr "{what} : {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Vous êtes hors ligne" msgstr "Vous êtes hors ligne"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Cet élément n’existe plus" msgstr "Cet élément n’existe plus"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "Vous n’avez pas accès à cet élément" msgstr "Vous n’avez pas accès à cet élément"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Quelque chose l’a modifié entre-temps" msgstr "Quelque chose l’a modifié entre-temps"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Votre Proton Drive est plein" msgstr "Votre Proton Drive est plein"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -149,23 +149,23 @@ msgstr ""
"Client non officiel — non affilié à Proton AG, ni approuvé ni pris en charge " "Client non officiel — non affilié à Proton AG, ni approuvé ni pris en charge "
"par Proton AG." "par Proton AG."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Code source" msgstr "Code source"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Conditions d’utilisation de Proton" msgstr "Conditions d’utilisation de Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Politique de confidentialité de Proton" msgstr "Politique de confidentialité de Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Avertissement" msgstr "Avertissement"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -189,7 +189,7 @@ msgstr ""
"une copie de toutes les données que vous ne pouvez pas vous permettre de " "une copie de toutes les données que vous ne pouvez pas vous permettre de "
"perdre." "perdre."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -199,7 +199,7 @@ msgstr ""
"www.geonames.org/\">GeoNames</a>, sous licence <a href=\"https://" "www.geonames.org/\">GeoNames</a>, sous licence <a href=\"https://"
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>." "creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -209,7 +209,7 @@ msgstr ""
"frontières des pays de <a href=\"https://www.naturalearthdata.com/\">Natural " "frontières des pays de <a href=\"https://www.naturalearthdata.com/\">Natural "
"Earth</a>, qui sont dans le domaine public." "Earth</a>, qui sont dans le domaine public."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -226,15 +226,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Les contributeurs de Proton Drive for Linux" msgstr "Les contributeurs de Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Arrêter Proton Drive ?" msgstr "Arrêter Proton Drive ?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -243,7 +243,7 @@ msgstr ""
"vous reconnectez pas. Proton Drive redémarrera à votre prochaine ouverture " "vous reconnectez pas. Proton Drive redémarrera à votre prochaine ouverture "
"de session." "de session."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -278,30 +278,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Arrêter" msgstr "Arrêter"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Impossible d’arrêter Proton Drive" msgstr "Impossible d’arrêter Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "Le service Proton Drive ne s’est pas arrêté." msgstr "Le service Proton Drive ne s’est pas arrêté."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "Général" msgstr "Général"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Rechercher dans Drive" msgstr "Rechercher dans Drive"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -310,43 +310,43 @@ msgstr "Rechercher dans Drive"
msgid "Refresh" msgid "Refresh"
msgstr "Actualiser" msgstr "Actualiser"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Préférences" msgstr "Préférences"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Raccourcis clavier" msgstr "Raccourcis clavier"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Fichiers" msgstr "Fichiers"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Nouveau dossier" msgstr "Nouveau dossier"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Téléverser des fichiers" msgstr "Téléverser des fichiers"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Précédent / suivant" msgstr "Précédent / suivant"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Dossier parent" msgstr "Dossier parent"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Grille / liste" msgstr "Grille / liste"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -355,7 +355,7 @@ msgstr "Grille / liste"
msgid "Rename" msgid "Rename"
msgstr "Renommer" msgstr "Renommer"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -365,70 +365,83 @@ msgstr "Renommer"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Mettre à la corbeille" msgstr "Mettre à la corbeille"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Effacer la sélection" msgstr "Effacer la sélection"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Miniatures plus grandes" msgstr "Miniatures plus grandes"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Miniatures plus petites" msgstr "Miniatures plus petites"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Réinitialiser la taille des miniatures" msgstr "Réinitialiser la taille des miniatures"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Tout sélectionner" msgstr "Tout sélectionner"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Visionneuse de photos" msgstr "Visionneuse de photos"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Photo précédente / suivante" msgstr "Photo précédente / suivante"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Première / dernière photo" msgstr "Première / dernière photo"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Afficher les détails" msgstr "Afficher les détails"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Plein écran" msgstr "Plein écran"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Fermer" msgstr "Fermer"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Sélectionnez un seul élément pour le renommer" msgstr "Sélectionnez un seul élément pour le renommer"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Non connecté" msgstr "Non connecté"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "Le service Proton Drive n’est pas en cours d’exécution." msgstr "Le service Proton Drive n’est pas en cours d’exécution."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Impossible d’ouvrir Proton Drive" msgstr "Impossible d’ouvrir Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"« {path} » contient déjà des fichiers, que « Mes fichiers » masquerait. "
"Proton Drive réessaie de lui-même dès que le dossier est vide. Vous pouvez "
"aussi choisir un autre dossier pour « Mes fichiers » dans les Préférences."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -437,17 +450,52 @@ msgstr ""
"Le service Proton Drive n’arrive pas à démarrer et réessaie de lui-même. " "Le service Proton Drive n’arrive pas à démarrer et réessaie de lui-même. "
"Dernière erreur : {error}" "Dernière erreur : {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Connexion…" msgstr "Connexion…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "En attente du démarrage du service Proton Drive." msgstr "En attente du démarrage du service Proton Drive."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Votre dossier Proton Drive n’est pas vide"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"« {path} » contient déjà {n} élément. « Mes fichiers » le masquerait, c’est "
"pourquoi Proton Drive ne s’y ouvre pas. Déplacez l’élément dans un autre "
"dossier, ou choisissez un autre dossier pour « Mes fichiers »."
msgstr[1] ""
"« {path} » contient déjà {n} éléments. « Mes fichiers » les masquerait, "
"c’est pourquoi Proton Drive ne s’y ouvre pas. Déplacez les éléments dans un "
"autre dossier, ou choisissez un autre dossier pour « Mes fichiers »."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Pas maintenant"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Ouvrir le dossier"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Choisir un autre dossier…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -658,7 +706,7 @@ msgstr[0] "{n} dossier créé"
msgstr[1] "{n} dossiers créés" msgstr[1] "{n} dossiers créés"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1317,7 +1365,7 @@ msgstr "Impossible de charger les albums"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1587,7 +1635,7 @@ msgid "Make available offline"
msgstr "Rendre disponible hors ligne" msgstr "Rendre disponible hors ligne"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Garder en ligne uniquement" msgstr "Garder en ligne uniquement"
@@ -2187,7 +2235,7 @@ msgid "No files or folders match that search."
msgstr "Aucun fichier ni dossier ne correspond à cette recherche." msgstr "Aucun fichier ni dossier ne correspond à cette recherche."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2932,7 +2980,7 @@ msgid "Sync paused until you resume"
msgstr "Synchronisation en pause jusqu’à la reprise" msgstr "Synchronisation en pause jusqu’à la reprise"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Synchronisation en pause" msgstr "Synchronisation en pause"
@@ -4987,68 +5035,91 @@ msgstr "Impossible d’enregistrer la langue"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Redémarrez Proton Drive pour utiliser la nouvelle langue" msgstr "Redémarrez Proton Drive pour utiliser la nouvelle langue"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Choisir le dossier Proton Drive" msgstr "Choisir le dossier Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Impossible de lire le dossier"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Choisissez un dossier vide"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"« {path} » contient déjà {n} élément. « Mes fichiers » le masquerait tant "
"que Proton Drive fonctionne, et il ne serait pas téléversé."
msgstr[1] ""
"« {path} » contient déjà {n} éléments. « Mes fichiers » les masquerait tant "
"que Proton Drive fonctionne, et ils ne seraient pas téléversés."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Impossible d’enregistrer le dossier" msgstr "Impossible d’enregistrer le dossier"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Redémarrer Proton Drive ?" msgstr "Redémarrer Proton Drive ?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "" msgstr ""
"« Mes fichiers » apparaîtra dans « {path} » après le redémarrage de Proton " "« Mes fichiers » apparaîtra dans « {path} » après le redémarrage de Proton "
"Drive." "Drive."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Plus tard" msgstr "Plus tard"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Redémarrer maintenant" msgstr "Redémarrer maintenant"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} utilisés" msgstr "{size} utilisés"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} utilisés sur {total} ({percent} %)" msgstr "{used} utilisés sur {total} ({percent} %)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive connecté" msgstr "Proton Drive connecté"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Vos fichiers sont disponibles." msgstr "Vos fichiers sont disponibles."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Proton Drive déconnecté" msgstr "Proton Drive déconnecté"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"Le service Proton Drive s’est arrêté. Les fichiers ne sont pas disponibles " "Le service Proton Drive s’est arrêté. Les fichiers ne sont pas disponibles "
"tant qu’il n’a pas redémarré." "tant qu’il n’a pas redémarré."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Synchronisation terminée" msgstr "Synchronisation terminée"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5057,28 +5128,28 @@ msgstr[1] "Le transfert de {n} fichiers est terminé."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title} — {done} sur {total}" msgstr "{title} — {done} sur {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} sur {total})" msgstr "{title} — {detail} ({done} sur {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title} — {detail}…" msgstr "{title} — {detail}…"
@@ -5086,7 +5157,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name} — {done} ({speed}/s)" msgstr "{arrow} {name} — {done} ({speed}/s)"
@@ -5094,156 +5165,164 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name} — {done} sur {total} ({speed}/s)" msgstr "{arrow} {name} — {done} sur {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} en cache — aucune limite définie" msgstr "{used} en cache — aucune limite définie"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} utilisés sur {limit}" msgstr "{used} utilisés sur {limit}"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Session expirée" msgstr "Session expirée"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · reconnectez-vous pour synchroniser" msgstr "{queued} · reconnectez-vous pour synchroniser"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Reconnectez-vous pour synchroniser" msgstr "Reconnectez-vous pour synchroniser"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Connexion non enregistrée" msgstr "Connexion non enregistrée"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Déverrouillez votre trousseau, sinon le prochain redémarrage vous " "Déverrouillez votre trousseau, sinon le prochain redémarrage vous "
"déconnectera" "déconnectera"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Redémarrez pour terminer la mise à jour" msgstr "Redémarrez pour terminer la mise à jour"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "" msgstr ""
"Une version plus ancienne de Proton Drive est toujours en cours d’exécution" "Une version plus ancienne de Proton Drive est toujours en cours d’exécution"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Proton Drive {version} est toujours en cours d’exécution" msgstr "Proton Drive {version} est toujours en cours d’exécution"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · reprise {time}" msgstr "{queued} · reprise {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Reprise {time}" msgstr "Reprise {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Jusqu’à la reprise" msgstr "Jusqu’à la reprise"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} modification requiert votre attention" msgstr[0] "{n} modification requiert votre attention"
msgstr[1] "{n} modifications requièrent votre attention" msgstr[1] "{n} modifications requièrent votre attention"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Hors ligne" msgstr "Hors ligne"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Fichiers en cache uniquement" msgstr "Fichiers en cache uniquement"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Synchronisation" msgstr "Synchronisation"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "À jour" msgstr "À jour"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive n’est pas en cours d’exécution" msgstr "Proton Drive n’est pas en cours d’exécution"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Votre dossier Proton Drive n’est pas vide"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive continue d’essayer de démarrer"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Ne répond pas" msgstr "Ne répond pas"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive met trop de temps à répondre" msgstr "Proton Drive met trop de temps à répondre"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "plus tard" msgstr "plus tard"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "à %H:%M" msgstr "à %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a %H:%M" msgstr "%a %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "%e %b" msgstr "%e %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "Aucun fichier disponible hors ligne" msgstr "Aucun fichier disponible hors ligne"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
"Faites un clic droit sur un fichier ou un dossier et choisissez « Disponible " "Faites un clic droit sur un fichier ou un dossier et choisissez « Disponible "
"hors ligne »." "hors ligne »."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Impossible de le garder en ligne uniquement" msgstr "Impossible de le garder en ligne uniquement"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Afficher moins" msgstr "Afficher moins"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6321,37 +6400,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "En ligne uniquement" msgstr "En ligne uniquement"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} téléversement en attente" msgstr[0] "{n} téléversement en attente"
msgstr[1] "{n} téléversements en attente" msgstr[1] "{n} téléversements en attente"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} modification en attente" msgstr[0] "{n} modification en attente"
msgstr[1] "{n} modifications en attente" msgstr[1] "{n} modifications en attente"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} téléversement" msgstr[0] "{n} téléversement"
msgstr[1] "{n} téléversements" msgstr[1] "{n} téléversements"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads} et {changes} en attente" msgstr "{uploads} et {changes} en attente"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6486,10 +6565,6 @@ msgstr "Ouvrir Proton Drive"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Redémarrer Proton Drive" msgstr "Redémarrer Proton Drive"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Ouvrir le dossier"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Reprendre la synchronisation" msgstr "Reprendre la synchronisation"
@@ -6823,9 +6898,6 @@ msgstr "impossible de joindre le démon Proton Drive : {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Arrêter le partage ?" #~ msgstr "Arrêter le partage ?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Choisir le dossier du point de montage"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Impossible d’enregistrer le point de montage" #~ msgstr "Impossible d’enregistrer le point de montage"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y, %H:%M" msgstr "%A %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "I miei file" msgstr "I miei file"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Foto" msgstr "Foto"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Condivisi con me" msgstr "Condivisi con me"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Condivisi da me" msgstr "Condivisi da me"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Computer" msgstr "Computer"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Cestino" msgstr "Cestino"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Sincronizzazione" msgstr "Sincronizzazione"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Sei offline" msgstr "Sei offline"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Non esiste più" msgstr "Non esiste più"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "Non hai accesso a questo elemento" msgstr "Non hai accesso a questo elemento"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "È stato modificato prima da qualcos'altro" msgstr "È stato modificato prima da qualcos'altro"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Il tuo Proton Drive è pieno" msgstr "Il tuo Proton Drive è pieno"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -148,23 +148,23 @@ msgstr ""
"\n" "\n"
"Client non ufficiale: non affiliato, approvato né supportato da Proton AG." "Client non ufficiale: non affiliato, approvato né supportato da Proton AG."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Codice sorgente" msgstr "Codice sorgente"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Termini di servizio di Proton" msgstr "Termini di servizio di Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Informativa sulla privacy di Proton" msgstr "Informativa sulla privacy di Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Esclusione di responsabilità" msgstr "Esclusione di responsabilità"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -187,7 +187,7 @@ msgstr ""
"Questo software è fornito “così com’è”, senza alcuna garanzia. Conserva una " "Questo software è fornito “così com’è”, senza alcuna garanzia. Conserva una "
"copia dei dati che non puoi permetterti di perdere." "copia dei dati che non puoi permetterti di perdere."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -197,7 +197,7 @@ msgstr ""
"\">GeoNames</a>, con licenza <a href=\"https://creativecommons.org/licenses/" "\">GeoNames</a>, con licenza <a href=\"https://creativecommons.org/licenses/"
"by/4.0/\">CC BY 4.0</a>." "by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -207,7 +207,7 @@ msgstr ""
"confini nazionali di <a href=\"https://www.naturalearthdata.com/\">Natural " "confini nazionali di <a href=\"https://www.naturalearthdata.com/\">Natural "
"Earth</a>, che sono di pubblico dominio." "Earth</a>, che sono di pubblico dominio."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -223,15 +223,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Collaboratori di Proton Drive for Linux" msgstr "Collaboratori di Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Arrestare Proton Drive?" msgstr "Arrestare Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -239,7 +239,7 @@ msgstr ""
"I miei file andranno offline e nulla verrà sincronizzato finché non ti " "I miei file andranno offline e nulla verrà sincronizzato finché non ti "
"riconnetti. Proton Drive si riavvierà al prossimo accesso." "riconnetti. Proton Drive si riavvierà al prossimo accesso."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -274,30 +274,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Annulla" msgstr "Annulla"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Arresta" msgstr "Arresta"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Impossibile arrestare Proton Drive" msgstr "Impossibile arrestare Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "Il servizio di Proton Drive non si è arrestato." msgstr "Il servizio di Proton Drive non si è arrestato."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "Generale" msgstr "Generale"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Cerca in Drive" msgstr "Cerca in Drive"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -306,43 +306,43 @@ msgstr "Cerca in Drive"
msgid "Refresh" msgid "Refresh"
msgstr "Aggiorna" msgstr "Aggiorna"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Preferenze" msgstr "Preferenze"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Scorciatoie da tastiera" msgstr "Scorciatoie da tastiera"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "File" msgstr "File"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Nuova cartella" msgstr "Nuova cartella"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Carica file" msgstr "Carica file"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Indietro / avanti" msgstr "Indietro / avanti"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Cartella superiore" msgstr "Cartella superiore"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Griglia / elenco" msgstr "Griglia / elenco"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -351,7 +351,7 @@ msgstr "Griglia / elenco"
msgid "Rename" msgid "Rename"
msgstr "Rinomina" msgstr "Rinomina"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -361,70 +361,83 @@ msgstr "Rinomina"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Sposta nel cestino" msgstr "Sposta nel cestino"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Annulla la selezione" msgstr "Annulla la selezione"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Miniature più grandi" msgstr "Miniature più grandi"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Miniature più piccole" msgstr "Miniature più piccole"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Ripristina la dimensione delle miniature" msgstr "Ripristina la dimensione delle miniature"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Seleziona tutto" msgstr "Seleziona tutto"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Visualizzatore di foto" msgstr "Visualizzatore di foto"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Foto precedente / successiva" msgstr "Foto precedente / successiva"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Prima / ultima foto" msgstr "Prima / ultima foto"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Mostra dettagli" msgstr "Mostra dettagli"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Schermo intero" msgstr "Schermo intero"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Chiudi" msgstr "Chiudi"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Seleziona un solo elemento per rinominarlo" msgstr "Seleziona un solo elemento per rinominarlo"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Non connesso" msgstr "Non connesso"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "Il servizio di Proton Drive non è in esecuzione." msgstr "Il servizio di Proton Drive non è in esecuzione."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Impossibile aprire Proton Drive" msgstr "Impossibile aprire Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"“{path}” contiene già dei file, e «I miei file» li nasconderebbe. Proton "
"Drive riprova da solo quando la cartella è vuota. Puoi anche scegliere "
"un’altra cartella per «I miei file» nelle Preferenze."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -433,17 +446,52 @@ msgstr ""
"Il servizio di Proton Drive non riesce ad avviarsi e riprova da solo. Ultimo " "Il servizio di Proton Drive non riesce ad avviarsi e riprova da solo. Ultimo "
"errore: {error}" "errore: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Connessione…" msgstr "Connessione…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "In attesa dell’avvio del servizio di Proton Drive." msgstr "In attesa dell’avvio del servizio di Proton Drive."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "La tua cartella di Proton Drive non è vuota"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"“{path}” contiene già {n} elemento. «I miei file» lo nasconderebbe, quindi "
"Proton Drive non si apre lì. Sposta l’elemento in un’altra cartella o scegli "
"un’altra cartella per «I miei file»."
msgstr[1] ""
"“{path}” contiene già {n} elementi. «I miei file» li nasconderebbe, quindi "
"Proton Drive non si apre lì. Sposta gli elementi in un’altra cartella o "
"scegli un’altra cartella per «I miei file»."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Non ora"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Apri cartella"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Scegli un’altra cartella…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -654,7 +702,7 @@ msgstr[0] "Creata {n} cartella"
msgstr[1] "Create {n} cartelle" msgstr[1] "Create {n} cartelle"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1311,7 +1359,7 @@ msgstr "Impossibile caricare gli album"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1581,7 +1629,7 @@ msgid "Make available offline"
msgstr "Rendi disponibile offline" msgstr "Rendi disponibile offline"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Rendi solo online" msgstr "Rendi solo online"
@@ -2181,7 +2229,7 @@ msgid "No files or folders match that search."
msgstr "Nessun file o cartella corrisponde alla ricerca." msgstr "Nessun file o cartella corrisponde alla ricerca."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2930,7 +2978,7 @@ msgid "Sync paused until you resume"
msgstr "Sincronizzazione in pausa finché non riprendi" msgstr "Sincronizzazione in pausa finché non riprendi"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Sincronizzazione in pausa" msgstr "Sincronizzazione in pausa"
@@ -4967,66 +5015,89 @@ msgstr "Impossibile salvare la lingua"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Riavvia Proton Drive per usare la nuova lingua" msgstr "Riavvia Proton Drive per usare la nuova lingua"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Scegli la cartella di Proton Drive" msgstr "Scegli la cartella di Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Impossibile leggere la cartella"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Scegli una cartella vuota"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"“{path}” contiene già {n} elemento. «I miei file» lo nasconderebbe mentre "
"Proton Drive è in esecuzione, e non verrebbe caricato."
msgstr[1] ""
"“{path}” contiene già {n} elementi. «I miei file» li nasconderebbe mentre "
"Proton Drive è in esecuzione, e non verrebbero caricati."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Impossibile salvare la cartella" msgstr "Impossibile salvare la cartella"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Riavviare Proton Drive?" msgstr "Riavviare Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "«I miei file» apparirà in “{path}” dopo il riavvio di Proton Drive." msgstr "«I miei file» apparirà in “{path}” dopo il riavvio di Proton Drive."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Più tardi" msgstr "Più tardi"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Riavvia ora" msgstr "Riavvia ora"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} utilizzati" msgstr "{size} utilizzati"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} di {total} utilizzati ({percent}%)" msgstr "{used} di {total} utilizzati ({percent}%)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive connesso" msgstr "Proton Drive connesso"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "I tuoi file sono disponibili." msgstr "I tuoi file sono disponibili."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Proton Drive disconnesso" msgstr "Proton Drive disconnesso"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"Il servizio di Proton Drive si è arrestato. I file non sono disponibili " "Il servizio di Proton Drive si è arrestato. I file non sono disponibili "
"finché non si riavvia." "finché non si riavvia."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Sincronizzazione completata" msgstr "Sincronizzazione completata"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5035,28 +5106,28 @@ msgstr[1] "Trasferimento di {n} file completato."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title}: {done} di {total}" msgstr "{title}: {done} di {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title}: {detail} ({done} di {total})" msgstr "{title}: {detail} ({done} di {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title}: {detail}…" msgstr "{title}: {detail}…"
@@ -5064,7 +5135,7 @@ msgstr "{title}: {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name}: {done} ({speed}/s)" msgstr "{arrow} {name}: {done} ({speed}/s)"
@@ -5072,153 +5143,161 @@ msgstr "{arrow} {name}: {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name}: {done} di {total} ({speed}/s)" msgstr "{arrow} {name}: {done} di {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} in cache — nessun limite impostato" msgstr "{used} in cache — nessun limite impostato"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} di {limit} utilizzati" msgstr "{used} di {limit} utilizzati"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Sessione scaduta" msgstr "Sessione scaduta"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · accedi di nuovo per sincronizzare" msgstr "{queued} · accedi di nuovo per sincronizzare"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Accedi di nuovo per sincronizzare" msgstr "Accedi di nuovo per sincronizzare"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Accesso non salvato" msgstr "Accesso non salvato"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Sblocca il portachiavi, altrimenti il prossimo riavvio ti disconnetterà" "Sblocca il portachiavi, altrimenti il prossimo riavvio ti disconnetterà"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Riavvia per completare l'aggiornamento" msgstr "Riavvia per completare l'aggiornamento"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "È ancora in esecuzione una versione precedente di Proton Drive" msgstr "È ancora in esecuzione una versione precedente di Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Proton Drive {version} è ancora in esecuzione" msgstr "Proton Drive {version} è ancora in esecuzione"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · riprende {time}" msgstr "{queued} · riprende {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Riprende {time}" msgstr "Riprende {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Finché non riprendi" msgstr "Finché non riprendi"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} modifica richiede attenzione" msgstr[0] "{n} modifica richiede attenzione"
msgstr[1] "{n} modifiche richiedono attenzione" msgstr[1] "{n} modifiche richiedono attenzione"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Solo file in cache" msgstr "Solo file in cache"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Sincronizzazione in corso" msgstr "Sincronizzazione in corso"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Aggiornato" msgstr "Aggiornato"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive non è in esecuzione" msgstr "Proton Drive non è in esecuzione"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "La tua cartella di Proton Drive non è vuota"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive continua a provare ad avviarsi"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Non risponde" msgstr "Non risponde"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive impiega troppo tempo a rispondere" msgstr "Proton Drive impiega troppo tempo a rispondere"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "più tardi" msgstr "più tardi"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "alle %H:%M" msgstr "alle %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a %H:%M" msgstr "%a %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "%e %b" msgstr "%e %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "Nessun file mantenuto offline" msgstr "Nessun file mantenuto offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
"Fai clic destro su un file o una cartella e scegli “Disponibile offline”." "Fai clic destro su un file o una cartella e scegli “Disponibile offline”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Impossibile renderlo solo online" msgstr "Impossibile renderlo solo online"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Mostra meno" msgstr "Mostra meno"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6297,37 +6376,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Solo online" msgstr "Solo online"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} caricamento in coda" msgstr[0] "{n} caricamento in coda"
msgstr[1] "{n} caricamenti in coda" msgstr[1] "{n} caricamenti in coda"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} modifica in coda" msgstr[0] "{n} modifica in coda"
msgstr[1] "{n} modifiche in coda" msgstr[1] "{n} modifiche in coda"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} caricamento" msgstr[0] "{n} caricamento"
msgstr[1] "{n} caricamenti" msgstr[1] "{n} caricamenti"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} in coda" msgstr "{uploads}, {changes} in coda"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6462,10 +6541,6 @@ msgstr "Apri Proton Drive"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Riavvia Proton Drive" msgstr "Riavvia Proton Drive"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Apri cartella"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Riprendi sincronizzazione" msgstr "Riprendi sincronizzazione"
@@ -6795,9 +6870,6 @@ msgstr "impossibile raggiungere il demone di Proton Drive: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Interrompere la condivisione?" #~ msgstr "Interrompere la condivisione?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Scegli la cartella del punto di montaggio"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Impossibile salvare il punto di montaggio" #~ msgstr "Impossibile salvare il punto di montaggio"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y, %H:%M" msgstr "%A %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "Mijn bestanden" msgstr "Mijn bestanden"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Foto's" msgstr "Foto's"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Gedeeld met mij" msgstr "Gedeeld met mij"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Gedeeld door mij" msgstr "Gedeeld door mij"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Computers" msgstr "Computers"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Prullenbak" msgstr "Prullenbak"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Synchronisatie" msgstr "Synchronisatie"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Je bent offline" msgstr "Je bent offline"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Dat bestaat niet meer" msgstr "Dat bestaat niet meer"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "Je hebt daar geen toegang toe" msgstr "Je hebt daar geen toegang toe"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Er is eerst iets anders gewijzigd" msgstr "Er is eerst iets anders gewijzigd"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Je Proton Drive is vol" msgstr "Je Proton Drive is vol"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -149,23 +149,23 @@ msgstr ""
"Onofficiële client — niet gelieerd aan, onderschreven door of ondersteund " "Onofficiële client — niet gelieerd aan, onderschreven door of ondersteund "
"door Proton AG." "door Proton AG."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Broncode" msgstr "Broncode"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Servicevoorwaarden van Proton" msgstr "Servicevoorwaarden van Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Privacybeleid van Proton" msgstr "Privacybeleid van Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Disclaimer" msgstr "Disclaimer"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -188,7 +188,7 @@ msgstr ""
"Deze software wordt geleverd “zoals ze is”, zonder enige garantie. Bewaar " "Deze software wordt geleverd “zoals ze is”, zonder enige garantie. Bewaar "
"een kopie van gegevens die je niet kwijt wilt raken." "een kopie van gegevens die je niet kwijt wilt raken."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -198,7 +198,7 @@ msgstr ""
"\">GeoNames</a>, gelicentieerd onder <a href=\"https://creativecommons.org/" "\">GeoNames</a>, gelicentieerd onder <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>." "licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -208,7 +208,7 @@ msgstr ""
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a>, die in het " "href=\"https://www.naturalearthdata.com/\">Natural Earth</a>, die in het "
"publieke domein vallen." "publieke domein vallen."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -224,15 +224,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Bijdragers aan Proton Drive for Linux" msgstr "Bijdragers aan Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Proton Drive stoppen?" msgstr "Proton Drive stoppen?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -240,7 +240,7 @@ msgstr ""
"Mijn bestanden gaat offline en er wordt niets gesynchroniseerd tot je weer " "Mijn bestanden gaat offline en er wordt niets gesynchroniseerd tot je weer "
"verbinding maakt. Proton Drive start opnieuw bij je volgende aanmelding." "verbinding maakt. Proton Drive start opnieuw bij je volgende aanmelding."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -275,30 +275,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Annuleren" msgstr "Annuleren"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Stoppen" msgstr "Stoppen"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Kon Proton Drive niet stoppen" msgstr "Kon Proton Drive niet stoppen"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "De Proton Drive-service is niet gestopt." msgstr "De Proton Drive-service is niet gestopt."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "Algemeen" msgstr "Algemeen"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Drive doorzoeken" msgstr "Drive doorzoeken"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -307,43 +307,43 @@ msgstr "Drive doorzoeken"
msgid "Refresh" msgid "Refresh"
msgstr "Verversen" msgstr "Verversen"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Voorkeuren" msgstr "Voorkeuren"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Sneltoetsen" msgstr "Sneltoetsen"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Bestanden" msgstr "Bestanden"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Nieuwe map" msgstr "Nieuwe map"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Bestanden uploaden" msgstr "Bestanden uploaden"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Terug / vooruit" msgstr "Terug / vooruit"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Bovenliggende map" msgstr "Bovenliggende map"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Raster / lijst" msgstr "Raster / lijst"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -352,7 +352,7 @@ msgstr "Raster / lijst"
msgid "Rename" msgid "Rename"
msgstr "Hernoemen" msgstr "Hernoemen"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -362,70 +362,83 @@ msgstr "Hernoemen"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Naar prullenbak verplaatsen" msgstr "Naar prullenbak verplaatsen"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Selectie wissen" msgstr "Selectie wissen"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Grotere miniaturen" msgstr "Grotere miniaturen"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Kleinere miniaturen" msgstr "Kleinere miniaturen"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Miniatuurgrootte herstellen" msgstr "Miniatuurgrootte herstellen"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Alles selecteren" msgstr "Alles selecteren"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Fotoweergave" msgstr "Fotoweergave"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Vorige / volgende foto" msgstr "Vorige / volgende foto"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Eerste / laatste foto" msgstr "Eerste / laatste foto"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Details tonen" msgstr "Details tonen"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Volledig scherm" msgstr "Volledig scherm"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Sluiten" msgstr "Sluiten"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Selecteer één item om het te hernoemen" msgstr "Selecteer één item om het te hernoemen"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Niet verbonden" msgstr "Niet verbonden"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "De Proton Drive-service draait niet." msgstr "De Proton Drive-service draait niet."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Kan Proton Drive niet openen" msgstr "Kan Proton Drive niet openen"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"“{path}” bevat al bestanden, en Mijn bestanden zou ze verbergen. Proton "
"Drive probeert het zelf opnieuw zodra de map leeg is. Je kunt in Voorkeuren "
"ook een andere map voor Mijn bestanden kiezen."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -434,17 +447,52 @@ msgstr ""
"De Proton Drive-service kan steeds niet starten en probeert het zelf " "De Proton Drive-service kan steeds niet starten en probeert het zelf "
"opnieuw. Laatste fout: {error}" "opnieuw. Laatste fout: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Verbinden…" msgstr "Verbinden…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "Wachten tot de Proton Drive-service is gestart." msgstr "Wachten tot de Proton Drive-service is gestart."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Je Proton Drive-map is niet leeg"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"“{path}” bevat al {n} item. Mijn bestanden zou het verbergen, dus Proton "
"Drive opent daar niet. Verplaats het item naar een andere map, of kies een "
"andere map voor Mijn bestanden."
msgstr[1] ""
"“{path}” bevat al {n} items. Mijn bestanden zou ze verbergen, dus Proton "
"Drive opent daar niet. Verplaats de items naar een andere map, of kies een "
"andere map voor Mijn bestanden."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Niet nu"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Map openen"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Andere map kiezen…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -655,7 +703,7 @@ msgstr[0] "{n} map aangemaakt"
msgstr[1] "{n} mappen aangemaakt" msgstr[1] "{n} mappen aangemaakt"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1307,7 +1355,7 @@ msgstr "Kon albums niet laden"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1577,7 +1625,7 @@ msgid "Make available offline"
msgstr "Offline beschikbaar maken" msgstr "Offline beschikbaar maken"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Alleen online maken" msgstr "Alleen online maken"
@@ -2175,7 +2223,7 @@ msgid "No files or folders match that search."
msgstr "Geen bestanden of mappen komen overeen met deze zoekopdracht." msgstr "Geen bestanden of mappen komen overeen met deze zoekopdracht."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2920,7 +2968,7 @@ msgid "Sync paused until you resume"
msgstr "Synchronisatie gepauzeerd totdat je hervat" msgstr "Synchronisatie gepauzeerd totdat je hervat"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Synchronisatie gepauzeerd" msgstr "Synchronisatie gepauzeerd"
@@ -4960,67 +5008,90 @@ msgstr "Kon de taal niet opslaan"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Herstart Proton Drive om de nieuwe taal te gebruiken" msgstr "Herstart Proton Drive om de nieuwe taal te gebruiken"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Proton Drive-map kiezen" msgstr "Proton Drive-map kiezen"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Kon de map niet lezen"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Kies een lege map"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"“{path}” bevat al {n} item. Mijn bestanden zou het verbergen zolang Proton "
"Drive draait, en het zou niet worden geüpload."
msgstr[1] ""
"“{path}” bevat al {n} items. Mijn bestanden zou ze verbergen zolang Proton "
"Drive draait, en ze zouden niet worden geüpload."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Kon de map niet opslaan" msgstr "Kon de map niet opslaan"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Proton Drive opnieuw starten?" msgstr "Proton Drive opnieuw starten?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "" msgstr ""
"Mijn bestanden verschijnt in “{path}” nadat Proton Drive opnieuw is gestart." "Mijn bestanden verschijnt in “{path}” nadat Proton Drive opnieuw is gestart."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Later" msgstr "Later"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Nu opnieuw starten" msgstr "Nu opnieuw starten"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} gebruikt" msgstr "{size} gebruikt"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} van {total} gebruikt ({percent}%)" msgstr "{used} van {total} gebruikt ({percent}%)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive verbonden" msgstr "Proton Drive verbonden"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Je bestanden zijn beschikbaar." msgstr "Je bestanden zijn beschikbaar."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Verbinding met Proton Drive verbroken" msgstr "Verbinding met Proton Drive verbroken"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"De Proton Drive-service is gestopt. Bestanden zijn pas weer beschikbaar als " "De Proton Drive-service is gestopt. Bestanden zijn pas weer beschikbaar als "
"hij opnieuw start." "hij opnieuw start."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Synchronisatie voltooid" msgstr "Synchronisatie voltooid"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5029,28 +5100,28 @@ msgstr[1] "{n} bestanden zijn klaar met overdragen."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title} — {done} van {total}" msgstr "{title} — {done} van {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} van {total})" msgstr "{title} — {detail} ({done} van {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title} — {detail}…" msgstr "{title} — {detail}…"
@@ -5058,7 +5129,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name} — {done} ({speed}/s)" msgstr "{arrow} {name} — {done} ({speed}/s)"
@@ -5066,152 +5137,160 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name} — {done} van {total} ({speed}/s)" msgstr "{arrow} {name} — {done} van {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} in cache — geen limiet ingesteld" msgstr "{used} in cache — geen limiet ingesteld"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} van {limit} gebruikt" msgstr "{used} van {limit} gebruikt"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Sessie verlopen" msgstr "Sessie verlopen"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · meld je opnieuw aan om te synchroniseren" msgstr "{queued} · meld je opnieuw aan om te synchroniseren"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Meld je opnieuw aan om te synchroniseren" msgstr "Meld je opnieuw aan om te synchroniseren"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Aanmelding niet opgeslagen" msgstr "Aanmelding niet opgeslagen"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Ontgrendel je sleutelbos, anders word je bij de volgende herstart afgemeld" "Ontgrendel je sleutelbos, anders word je bij de volgende herstart afgemeld"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Start opnieuw om de update af te ronden" msgstr "Start opnieuw om de update af te ronden"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "Er draait nog een oudere versie van Proton Drive" msgstr "Er draait nog een oudere versie van Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Proton Drive {version} draait nog" msgstr "Proton Drive {version} draait nog"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · hervat {time}" msgstr "{queued} · hervat {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Hervat {time}" msgstr "Hervat {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Totdat je hervat" msgstr "Totdat je hervat"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} wijziging vereist aandacht" msgstr[0] "{n} wijziging vereist aandacht"
msgstr[1] "{n} wijzigingen vereisen aandacht" msgstr[1] "{n} wijzigingen vereisen aandacht"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Alleen bestanden in cache" msgstr "Alleen bestanden in cache"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Synchroniseren" msgstr "Synchroniseren"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Bijgewerkt" msgstr "Bijgewerkt"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive draait niet" msgstr "Proton Drive draait niet"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Je Proton Drive-map is niet leeg"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive blijft proberen te starten"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Reageert niet" msgstr "Reageert niet"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive doet er te lang over om te antwoorden" msgstr "Proton Drive doet er te lang over om te antwoorden"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "later" msgstr "later"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "om %H:%M" msgstr "om %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a %H:%M" msgstr "%a %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "%e %b" msgstr "%e %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "Geen offline bewaarde bestanden" msgstr "Geen offline bewaarde bestanden"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "Klik met rechts op een bestand of map en kies “Offline beschikbaar”." msgstr "Klik met rechts op een bestand of map en kies “Offline beschikbaar”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Kon het niet alleen online maken" msgstr "Kon het niet alleen online maken"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Minder tonen" msgstr "Minder tonen"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6283,37 +6362,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Alleen online" msgstr "Alleen online"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} upload in wachtrij" msgstr[0] "{n} upload in wachtrij"
msgstr[1] "{n} uploads in wachtrij" msgstr[1] "{n} uploads in wachtrij"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} wijziging in wachtrij" msgstr[0] "{n} wijziging in wachtrij"
msgstr[1] "{n} wijzigingen in wachtrij" msgstr[1] "{n} wijzigingen in wachtrij"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} upload" msgstr[0] "{n} upload"
msgstr[1] "{n} uploads" msgstr[1] "{n} uploads"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} in wachtrij" msgstr "{uploads}, {changes} in wachtrij"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6448,10 +6527,6 @@ msgstr "Proton Drive openen"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Proton Drive opnieuw starten" msgstr "Proton Drive opnieuw starten"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Map openen"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Synchronisatie hervatten" msgstr "Synchronisatie hervatten"
@@ -6782,9 +6857,6 @@ msgstr "kan de achtergronddienst van Proton Drive niet bereiken: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Delen stoppen?" #~ msgstr "Delen stoppen?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Map voor koppelpunt kiezen"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Kon koppelpunt niet opslaan" #~ msgstr "Kon koppelpunt niet opslaan"
+193 -131
View File
@@ -6,9 +6,9 @@
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 3.6.0\n" "Project-Id-Version: proton-drive-linux 3.7.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,7 +60,7 @@ msgstr ""
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -73,74 +73,74 @@ msgstr ""
msgid "My files" msgid "My files"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "" msgstr ""
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "" msgstr ""
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -148,23 +148,23 @@ msgid ""
"AG." "AG."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -177,21 +177,21 @@ msgid ""
"of any data you cannot afford to lose." "of any data you cannot afford to lose."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>." "licenses/by/4.0/\">CC BY 4.0</a>."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
"public domain." "public domain."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -202,21 +202,21 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -251,30 +251,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -283,43 +283,43 @@ msgstr ""
msgid "Refresh" msgid "Refresh"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -328,7 +328,7 @@ msgstr ""
msgid "Rename" msgid "Rename"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -338,87 +338,126 @@ msgstr ""
msgid "Move to Trash" msgid "Move to Trash"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}" "The last error was: {error}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
msgstr[1] ""
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr ""
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -623,7 +662,7 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1263,7 +1302,7 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1533,7 +1572,7 @@ msgid "Make available offline"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "" msgstr ""
@@ -2125,7 +2164,7 @@ msgid "No files or folders match that search."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2810,7 +2849,7 @@ msgid "Sync paused until you resume"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "" msgstr ""
@@ -4737,64 +4776,83 @@ msgstr ""
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "" msgstr ""
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -4803,28 +4861,28 @@ msgstr[1] ""
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "" msgstr ""
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "" msgstr ""
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "" msgstr ""
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "" msgstr ""
@@ -4832,7 +4890,7 @@ msgstr ""
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "" msgstr ""
@@ -4840,151 +4898,159 @@ msgstr ""
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "" msgstr ""
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "" msgstr ""
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "" msgstr ""
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "" msgstr ""
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "" msgstr ""
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6015,37 +6081,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6180,10 +6246,6 @@ msgstr ""
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "" msgstr ""
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr ""
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "" msgstr ""
+212 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
@@ -59,7 +59,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d %B %Y, %H:%M" msgstr "%A, %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -72,74 +72,74 @@ msgstr "%A, %-d %B %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "Moje pliki" msgstr "Moje pliki"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Zdjęcia" msgstr "Zdjęcia"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Udostępnione mi" msgstr "Udostępnione mi"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Udostępnione przeze mnie" msgstr "Udostępnione przeze mnie"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Komputery" msgstr "Komputery"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Kosz" msgstr "Kosz"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Synchronizacja" msgstr "Synchronizacja"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Brak połączenia z siecią" msgstr "Brak połączenia z siecią"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Ten element już nie istnieje" msgstr "Ten element już nie istnieje"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "Brak dostępu do tego elementu" msgstr "Brak dostępu do tego elementu"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Coś zmieniło ten element wcześniej" msgstr "Coś zmieniło ten element wcześniej"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Proton Drive jest pełny" msgstr "Proton Drive jest pełny"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -151,23 +151,23 @@ msgstr ""
"Nieoficjalny klient — niepowiązany z Proton AG, niepopierany ani " "Nieoficjalny klient — niepowiązany z Proton AG, niepopierany ani "
"niewspierany przez tę firmę." "niewspierany przez tę firmę."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Kod źródłowy" msgstr "Kod źródłowy"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Warunki korzystania z usług Proton" msgstr "Warunki korzystania z usług Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Polityka prywatności Proton" msgstr "Polityka prywatności Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Zastrzeżenia" msgstr "Zastrzeżenia"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -191,7 +191,7 @@ msgstr ""
"gwarancji. Zachowaj kopię danych, na których utratę nie możesz sobie " "gwarancji. Zachowaj kopię danych, na których utratę nie możesz sobie "
"pozwolić." "pozwolić."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -201,7 +201,7 @@ msgstr ""
"\">GeoNames</a> udostępnionych na licencji <a href=\"https://" "\">GeoNames</a> udostępnionych na licencji <a href=\"https://"
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>." "creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -211,7 +211,7 @@ msgstr ""
"www.naturalearthdata.com/\">Natural Earth</a>, które należą do domeny " "www.naturalearthdata.com/\">Natural Earth</a>, które należą do domeny "
"publicznej." "publicznej."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -227,15 +227,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Współtwórcy programu Proton Drive for Linux" msgstr "Współtwórcy programu Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Zatrzymać Proton Drive?" msgstr "Zatrzymać Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -244,7 +244,7 @@ msgstr ""
"ponownego połączenia. Proton Drive uruchomi się ponownie przy następnym " "ponownego połączenia. Proton Drive uruchomi się ponownie przy następnym "
"logowaniu." "logowaniu."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -279,30 +279,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Anuluj" msgstr "Anuluj"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Zatrzymaj" msgstr "Zatrzymaj"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Nie można zatrzymać Proton Drive" msgstr "Nie można zatrzymać Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "Usługa Proton Drive nie zatrzymała się." msgstr "Usługa Proton Drive nie zatrzymała się."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "Ogólne" msgstr "Ogólne"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Przeszukaj Drive" msgstr "Przeszukaj Drive"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -311,43 +311,43 @@ msgstr "Przeszukaj Drive"
msgid "Refresh" msgid "Refresh"
msgstr "Odśwież" msgstr "Odśwież"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Preferencje" msgstr "Preferencje"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Skróty klawiszowe" msgstr "Skróty klawiszowe"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Pliki" msgstr "Pliki"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Nowy katalog" msgstr "Nowy katalog"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Wyślij pliki" msgstr "Wyślij pliki"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Wstecz/dalej" msgstr "Wstecz/dalej"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Katalog nadrzędny" msgstr "Katalog nadrzędny"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Siatka/lista" msgstr "Siatka/lista"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -356,7 +356,7 @@ msgstr "Siatka/lista"
msgid "Rename" msgid "Rename"
msgstr "Zmień nazwę" msgstr "Zmień nazwę"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -366,70 +366,83 @@ msgstr "Zmień nazwę"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Przenieś do kosza" msgstr "Przenieś do kosza"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Wyczyść zaznaczenie" msgstr "Wyczyść zaznaczenie"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Większe miniatury" msgstr "Większe miniatury"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Mniejsze miniatury" msgstr "Mniejsze miniatury"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Przywróć rozmiar miniatur" msgstr "Przywróć rozmiar miniatur"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Zaznacz wszystko" msgstr "Zaznacz wszystko"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Przeglądarka zdjęć" msgstr "Przeglądarka zdjęć"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Poprzednie/następne zdjęcie" msgstr "Poprzednie/następne zdjęcie"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Pierwsze/ostatnie zdjęcie" msgstr "Pierwsze/ostatnie zdjęcie"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Wyświetl szczegóły" msgstr "Wyświetl szczegóły"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Pełny ekran" msgstr "Pełny ekran"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Zamknij" msgstr "Zamknij"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Należy zaznaczyć jeden element, aby zmienić jego nazwę" msgstr "Należy zaznaczyć jeden element, aby zmienić jego nazwę"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Brak połączenia" msgstr "Brak połączenia"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "Usługa Proton Drive nie jest uruchomiona." msgstr "Usługa Proton Drive nie jest uruchomiona."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Nie można otworzyć Proton Drive" msgstr "Nie można otworzyć Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"„{path}” zawiera już pliki, które „Moje pliki” by ukryły. Proton Drive sam "
"ponowi próbę, gdy katalog będzie pusty. Możesz też wybrać inny katalog dla "
"„Moich plików” w Preferencjach."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -438,17 +451,56 @@ msgstr ""
"Usługa Proton Drive nie może się uruchomić i sama ponawia próby. Ostatni " "Usługa Proton Drive nie może się uruchomić i sama ponawia próby. Ostatni "
"błąd: {error}" "błąd: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Łączenie…" msgstr "Łączenie…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "Oczekiwanie na uruchomienie usługi Proton Drive." msgstr "Oczekiwanie na uruchomienie usługi Proton Drive."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Twój katalog Proton Drive nie jest pusty"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"„{path}” zawiera już {n} element. „Moje pliki” by go ukryły, więc Proton "
"Drive się tam nie otwiera. Przenieś element do innego katalogu albo wybierz "
"inny katalog dla „Moich plików”."
msgstr[1] ""
"„{path}” zawiera już {n} elementy. „Moje pliki” by je ukryły, więc Proton "
"Drive się tam nie otwiera. Przenieś elementy do innego katalogu albo wybierz "
"inny katalog dla „Moich plików”."
msgstr[2] ""
"„{path}” zawiera już {n} elementów. „Moje pliki” by je ukryły, więc Proton "
"Drive się tam nie otwiera. Przenieś elementy do innego katalogu albo wybierz "
"inny katalog dla „Moich plików”."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Nie teraz"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Otwórz katalog"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Wybierz inny katalog…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -671,7 +723,7 @@ msgstr[1] "Utworzono {n} katalogi"
msgstr[2] "Utworzono {n} katalogów" msgstr[2] "Utworzono {n} katalogów"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1338,7 +1390,7 @@ msgstr "Nie można wczytać albumów"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1613,7 +1665,7 @@ msgid "Make available offline"
msgstr "Oznacz jako dostępne offline" msgstr "Oznacz jako dostępne offline"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Oznacz jako tylko online" msgstr "Oznacz jako tylko online"
@@ -2230,7 +2282,7 @@ msgid "No files or folders match that search."
msgstr "Żadne pliki ani katalogi nie pasują do wyszukiwania." msgstr "Żadne pliki ani katalogi nie pasują do wyszukiwania."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2986,7 +3038,7 @@ msgid "Sync paused until you resume"
msgstr "Wstrzymano synchronizację do czasu wznowienia" msgstr "Wstrzymano synchronizację do czasu wznowienia"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Wstrzymano synchronizację" msgstr "Wstrzymano synchronizację"
@@ -5039,67 +5091,93 @@ msgstr "Nie można zapisać języka"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Proszę ponownie uruchomić Proton Drive, aby użyć nowego języka" msgstr "Proszę ponownie uruchomić Proton Drive, aby użyć nowego języka"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Wybierz katalog Proton Drive" msgstr "Wybierz katalog Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Nie można odczytać katalogu"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Wybierz pusty katalog"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"„{path}” zawiera już {n} element. „Moje pliki” by go ukryły, dopóki działa "
"Proton Drive, i nie zostałby wysłany."
msgstr[1] ""
"„{path}” zawiera już {n} elementy. „Moje pliki” by je ukryły, dopóki działa "
"Proton Drive, i nie zostałyby wysłane."
msgstr[2] ""
"„{path}” zawiera już {n} elementów. „Moje pliki” by je ukryły, dopóki działa "
"Proton Drive, i nie zostałyby wysłane."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Nie można zapisać katalogu" msgstr "Nie można zapisać katalogu"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Uruchomić ponownie Proton Drive?" msgstr "Uruchomić ponownie Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "" msgstr ""
"„Moje pliki” pojawią się w „{path}” po ponownym uruchomieniu Proton Drive." "„Moje pliki” pojawią się w „{path}” po ponownym uruchomieniu Proton Drive."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Później" msgstr "Później"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Uruchom ponownie teraz" msgstr "Uruchom ponownie teraz"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "Użyto {size}" msgstr "Użyto {size}"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "Użyto {used} z {total} ({percent}%)" msgstr "Użyto {used} z {total} ({percent}%)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Połączono z Proton Drive" msgstr "Połączono z Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Twoje pliki są dostępne." msgstr "Twoje pliki są dostępne."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Rozłączono z Proton Drive" msgstr "Rozłączono z Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"Usługa Proton Drive zatrzymała się. Pliki będą niedostępne do jej ponownego " "Usługa Proton Drive zatrzymała się. Pliki będą niedostępne do jej ponownego "
"uruchomienia." "uruchomienia."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Ukończono synchronizację" msgstr "Ukończono synchronizację"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5109,28 +5187,28 @@ msgstr[2] "Ukończono przesyłanie {n} plików."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title} — {done} z {total}" msgstr "{title} — {done} z {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} z {total})" msgstr "{title} — {detail} ({done} z {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title} — {detail}…" msgstr "{title} — {detail}…"
@@ -5138,7 +5216,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name} — {done} ({speed}/s)" msgstr "{arrow} {name} — {done} ({speed}/s)"
@@ -5146,74 +5224,74 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name} — {done} z {total} ({speed}/s)" msgstr "{arrow} {name} — {done} z {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} w pamięci podręcznej — bez limitu" msgstr "{used} w pamięci podręcznej — bez limitu"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "Użyto {used} z {limit}" msgstr "Użyto {used} z {limit}"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Sesja wygasła" msgstr "Sesja wygasła"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · zaloguj się ponownie, aby synchronizować" msgstr "{queued} · zaloguj się ponownie, aby synchronizować"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Zaloguj się ponownie, aby synchronizować" msgstr "Zaloguj się ponownie, aby synchronizować"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Logowanie nie zostało zapisane" msgstr "Logowanie nie zostało zapisane"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Odblokuj bazę kluczy, inaczej następne ponowne uruchomienie spowoduje " "Odblokuj bazę kluczy, inaczej następne ponowne uruchomienie spowoduje "
"wylogowanie" "wylogowanie"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Uruchom ponownie, aby dokończyć aktualizację" msgstr "Uruchom ponownie, aby dokończyć aktualizację"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "Nadal działa starsza wersja Proton Drive" msgstr "Nadal działa starsza wersja Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "Nadal działa Proton Drive {version}" msgstr "Nadal działa Proton Drive {version}"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · wznowienie {time}" msgstr "{queued} · wznowienie {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Wznowienie {time}" msgstr "Wznowienie {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Do czasu wznowienia" msgstr "Do czasu wznowienia"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
@@ -5221,81 +5299,89 @@ msgstr[0] "{n} zmiana wymaga uwagi"
msgstr[1] "{n} zmiany wymagają uwagi" msgstr[1] "{n} zmiany wymagają uwagi"
msgstr[2] "{n} zmian wymaga uwagi" msgstr[2] "{n} zmian wymaga uwagi"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Tylko pliki w pamięci podręcznej" msgstr "Tylko pliki w pamięci podręcznej"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Synchronizowanie" msgstr "Synchronizowanie"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Aktualne" msgstr "Aktualne"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "Proton Drive nie jest uruchomiony" msgstr "Proton Drive nie jest uruchomiony"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Twój katalog Proton Drive nie jest pusty"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "Proton Drive wciąż próbuje się uruchomić"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Nie odpowiada" msgstr "Nie odpowiada"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "Proton Drive zbyt długo nie odpowiada" msgstr "Proton Drive zbyt długo nie odpowiada"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "później" msgstr "później"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "o %H:%M" msgstr "o %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a %H:%M" msgstr "%a %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "%-d %b" msgstr "%-d %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "Brak plików dostępnych offline" msgstr "Brak plików dostępnych offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
"Należy kliknąć plik lub katalog prawym przyciskiem myszy i wybrać „Dostępne " "Należy kliknąć plik lub katalog prawym przyciskiem myszy i wybrać „Dostępne "
"offline”." "offline”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Nie można oznaczyć jako tylko online" msgstr "Nie można oznaczyć jako tylko online"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Wyświetl mniej" msgstr "Wyświetl mniej"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6380,11 +6466,11 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Tylko online" msgstr "Tylko online"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosowo" msgstr "Kosowo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
@@ -6392,7 +6478,7 @@ msgstr[0] "{n} plik w kolejce do wysłania"
msgstr[1] "{n} pliki w kolejce do wysłania" msgstr[1] "{n} pliki w kolejce do wysłania"
msgstr[2] "{n} plików w kolejce do wysłania" msgstr[2] "{n} plików w kolejce do wysłania"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
@@ -6400,7 +6486,7 @@ msgstr[0] "{n} zmiana w kolejce"
msgstr[1] "{n} zmiany w kolejce" msgstr[1] "{n} zmiany w kolejce"
msgstr[2] "{n} zmian w kolejce" msgstr[2] "{n} zmian w kolejce"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
@@ -6408,12 +6494,12 @@ msgstr[0] "{n} plik do wysłania"
msgstr[1] "{n} pliki do wysłania" msgstr[1] "{n} pliki do wysłania"
msgstr[2] "{n} plików do wysłania" msgstr[2] "{n} plików do wysłania"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "W kolejce: {uploads}, {changes}" msgstr "W kolejce: {uploads}, {changes}"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6555,10 +6641,6 @@ msgstr "Otwórz Proton Drive"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Uruchom ponownie Proton Drive" msgstr "Uruchom ponownie Proton Drive"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Otwórz katalog"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Wznów synchronizację" msgstr "Wznów synchronizację"
@@ -6889,9 +6971,6 @@ msgstr "nie można połączyć się z usługą Proton Drive: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Zakończyć udostępnianie?" #~ msgstr "Zakończyć udostępnianie?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Wybór katalogu punktu montowania"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Nie można zapisać punktu montowania" #~ msgstr "Nie można zapisać punktu montowania"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n" "Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-31 19:26+0100\n" "POT-Creation-Date: 2026-11-01 17:51+0100\n"
"PO-Revision-Date: 2026-09-23 12:00+0200\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n"
"Last-Translator: Proton Drive for Linux contributors\n" "Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Portuguese (Brazil)\n" "Language-Team: Portuguese (Brazil)\n"
@@ -57,7 +57,7 @@ msgstr "%-d de %b de %Y"
msgid "%A, %B %-d, %Y, %H:%M" msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d de %B de %Y, %H:%M" msgstr "%A, %-d de %B de %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856 #: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454 #: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833 #: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
msgid "My files" msgid "My files"
msgstr "Meus arquivos" msgstr "Meus arquivos"
#: crates/pdfs-gui/src/app/main.rs:859 crates/pdfs-gui/src/app/main.rs:1528 #: crates/pdfs-gui/src/app/main.rs:863 crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/pages/albums.rs:638 #: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:845 #: crates/pdfs-gui/src/app/pages/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441 #: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos" msgid "Photos"
msgstr "Fotos" msgstr "Fotos"
#: crates/pdfs-gui/src/app/main.rs:864 #: crates/pdfs-gui/src/app/main.rs:868
#: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:484 #: crates/pdfs-gui/src/app/pages/shared.rs:484
msgid "Shared with me" msgid "Shared with me"
msgstr "Compartilhados comigo" msgstr "Compartilhados comigo"
#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/main.rs:873
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me" msgid "Shared by me"
msgstr "Compartilhados por mim" msgstr "Compartilhados por mim"
#: crates/pdfs-gui/src/app/main.rs:872 #: crates/pdfs-gui/src/app/main.rs:876
#: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:493 #: crates/pdfs-gui/src/app/pages/devices.rs:493
msgid "Computers" msgid "Computers"
msgstr "Computadores" msgstr "Computadores"
#: crates/pdfs-gui/src/app/main.rs:873 #: crates/pdfs-gui/src/app/main.rs:877
#: crates/pdfs-gui/src/app/pages/trash.rs:101 #: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash" msgid "Trash"
msgstr "Lixeira" msgstr "Lixeira"
#. Translators: sidebar entry for the page listing this computer's synced folders. #. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:875 #: crates/pdfs-gui/src/app/main.rs:879
msgid "Sync" msgid "Sync"
msgstr "Sincronização" msgstr "Sincronização"
#. Translators: a failed action's toast. {what} says what failed, such as #. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text #. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service. #. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1225 #: crates/pdfs-gui/src/app/main.rs:1229
#: crates/pdfs-gui/src/app/pages/takeout.rs:714 #: crates/pdfs-gui/src/app/pages/takeout.rs:714
#, rust-format #, rust-format
msgid "{what}: {detail}" msgid "{what}: {detail}"
msgstr "{what}: {detail}" msgstr "{what}: {detail}"
#: crates/pdfs-gui/src/app/main.rs:1248 #: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline" msgid "You're offline"
msgstr "Você está offline" msgstr "Você está offline"
#: crates/pdfs-gui/src/app/main.rs:1249 #: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more" msgid "That's not there any more"
msgstr "Isso não existe mais" msgstr "Isso não existe mais"
#: crates/pdfs-gui/src/app/main.rs:1250 #: crates/pdfs-gui/src/app/main.rs:1254
msgid "You don't have access to that" msgid "You don't have access to that"
msgstr "Você não tem acesso a isso" msgstr "Você não tem acesso a isso"
#: crates/pdfs-gui/src/app/main.rs:1251 #: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first" msgid "Something changed this first"
msgstr "Algo alterou isso antes" msgstr "Algo alterou isso antes"
#: crates/pdfs-gui/src/app/main.rs:1252 #: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full" msgid "Your Proton Drive is full"
msgstr "Seu Proton Drive está cheio" msgstr "Seu Proton Drive está cheio"
#: crates/pdfs-gui/src/app/main.rs:1339 #: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux" msgid "Proton Drive for Linux"
msgstr "Proton Drive for Linux" msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347 #: crates/pdfs-gui/src/app/main.rs:1351
msgid "" msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n" "Files-on-demand Proton Drive for the Linux desktop.\n"
"\n" "\n"
@@ -148,23 +148,23 @@ msgstr ""
"\n" "\n"
"Cliente não oficial — sem afiliação, endosso ou suporte da Proton AG." "Cliente não oficial — sem afiliação, endosso ou suporte da Proton AG."
#: crates/pdfs-gui/src/app/main.rs:1352 #: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code" msgid "Source Code"
msgstr "Código-fonte" msgstr "Código-fonte"
#: crates/pdfs-gui/src/app/main.rs:1356 #: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service" msgid "Proton Terms of Service"
msgstr "Termos de Serviço da Proton" msgstr "Termos de Serviço da Proton"
#: crates/pdfs-gui/src/app/main.rs:1360 #: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy" msgid "Proton Privacy Policy"
msgstr "Política de Privacidade da Proton" msgstr "Política de Privacidade da Proton"
#: crates/pdfs-gui/src/app/main.rs:1365 #: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer" msgid "Disclaimer"
msgstr "Aviso legal" msgstr "Aviso legal"
#: crates/pdfs-gui/src/app/main.rs:1369 #: crates/pdfs-gui/src/app/main.rs:1373
msgid "" msgid ""
"This is an unofficial, community-built client. It is not affiliated with, " "This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n" "endorsed by, or supported by Proton AG.\n"
@@ -187,7 +187,7 @@ msgstr ""
"Este software é fornecido “no estado em que se encontra”, sem garantia de " "Este software é fornecido “no estado em que se encontra”, sem garantia de "
"qualquer tipo. Mantenha uma cópia de todos os dados que você não pode perder." "qualquer tipo. Mantenha uma cópia de todos os dados que você não pode perder."
#: crates/pdfs-gui/src/app/main.rs:1377 #: crates/pdfs-gui/src/app/main.rs:1381
msgid "" msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/" "Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -197,7 +197,7 @@ msgstr ""
"\">GeoNames</a>, licenciados sob <a href=\"https://creativecommons.org/" "\">GeoNames</a>, licenciados sob <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>." "licenses/by/4.0/\">CC BY 4.0</a>."
#: crates/pdfs-gui/src/app/main.rs:1385 #: crates/pdfs-gui/src/app/main.rs:1389
msgid "" msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/" "The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the " "\">Natural Earth</a> land outlines and country borders, which are in the "
@@ -207,7 +207,7 @@ msgstr ""
"fronteiras de países do <a href=\"https://www.naturalearthdata.com/" "fronteiras de países do <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a>, que são de domínio público." "\">Natural Earth</a>, que são de domínio público."
#: crates/pdfs-gui/src/app/main.rs:1393 #: crates/pdfs-gui/src/app/main.rs:1397
msgid "" msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/" "The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/" "\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -223,15 +223,15 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one #. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog. #. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1404 #: crates/pdfs-gui/src/app/main.rs:1408
msgid "translator-credits" msgid "translator-credits"
msgstr "Colaboradores do Proton Drive for Linux" msgstr "Colaboradores do Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1448 #: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?" msgid "Stop Proton Drive?"
msgstr "Parar o Proton Drive?" msgstr "Parar o Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449 #: crates/pdfs-gui/src/app/main.rs:1453
msgid "" msgid ""
"My files goes offline and nothing syncs until you connect again. Proton " "My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login." "Drive starts again at your next login."
@@ -239,7 +239,7 @@ msgstr ""
"Meus arquivos fica offline e nada é sincronizado até você se conectar " "Meus arquivos fica offline e nada é sincronizado até você se conectar "
"novamente. O Proton Drive será iniciado de novo no seu próximo login." "novamente. O Proton Drive será iniciado de novo no seu próximo login."
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1726 #: 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:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428 #: 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:1917
@@ -274,30 +274,30 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: crates/pdfs-gui/src/app/main.rs:1452 #: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb" msgctxt "verb"
msgid "Stop" msgid "Stop"
msgstr "Parar" msgstr "Parar"
#: crates/pdfs-gui/src/app/main.rs:1469 #: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive" msgid "Couldn't stop Proton Drive"
msgstr "Não foi possível parar o Proton Drive" msgstr "Não foi possível parar o Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1470 #: crates/pdfs-gui/src/app/main.rs:1474
msgid "The Proton Drive service did not stop." msgid "The Proton Drive service did not stop."
msgstr "O serviço do Proton Drive não parou." msgstr "O serviço do Proton Drive não parou."
#: crates/pdfs-gui/src/app/main.rs:1506 #: crates/pdfs-gui/src/app/main.rs:1510
#: crates/pdfs-gui/src/app/pages/status.rs:269 #: crates/pdfs-gui/src/app/pages/status.rs:269
msgid "General" msgid "General"
msgstr "Geral" msgstr "Geral"
#: crates/pdfs-gui/src/app/main.rs:1508 #: crates/pdfs-gui/src/app/main.rs:1512
#: crates/pdfs-gui/src/app/pages/browser.rs:247 #: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive" msgid "Search Drive"
msgstr "Pesquisar no Drive" msgstr "Pesquisar no Drive"
#: crates/pdfs-gui/src/app/main.rs:1509 #: crates/pdfs-gui/src/app/main.rs:1513
#: crates/pdfs-gui/src/app/pages/browser.rs:984 #: crates/pdfs-gui/src/app/pages/browser.rs:984
#: crates/pdfs-gui/src/app/pages/devices.rs:559 #: crates/pdfs-gui/src/app/pages/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581 #: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -306,43 +306,43 @@ msgstr "Pesquisar no Drive"
msgid "Refresh" msgid "Refresh"
msgstr "Atualizar" msgstr "Atualizar"
#: crates/pdfs-gui/src/app/main.rs:1510 #: crates/pdfs-gui/src/app/main.rs:1514
#: crates/pdfs-gui/src/app/pages/status.rs:407 #: crates/pdfs-gui/src/app/pages/status.rs:407
msgid "Preferences" msgid "Preferences"
msgstr "Preferências" msgstr "Preferências"
#: crates/pdfs-gui/src/app/main.rs:1511 #: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Atalhos de teclado" msgstr "Atalhos de teclado"
#: crates/pdfs-gui/src/app/main.rs:1515 #: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files" msgid "Files"
msgstr "Arquivos" msgstr "Arquivos"
#: crates/pdfs-gui/src/app/main.rs:1517 #: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/pages/browser.rs:294 #: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder" msgid "New folder"
msgstr "Nova pasta" msgstr "Nova pasta"
#: crates/pdfs-gui/src/app/main.rs:1518 #: crates/pdfs-gui/src/app/main.rs:1522
#: crates/pdfs-gui/src/app/pages/browser.rs:290 #: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files" msgid "Upload files"
msgstr "Enviar arquivos" msgstr "Enviar arquivos"
#: crates/pdfs-gui/src/app/main.rs:1519 #: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward" msgid "Back / forward"
msgstr "Voltar / avançar" msgstr "Voltar / avançar"
#: crates/pdfs-gui/src/app/main.rs:1520 #: 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:2014
msgid "Parent folder" msgid "Parent folder"
msgstr "Pasta superior" msgstr "Pasta superior"
#: crates/pdfs-gui/src/app/main.rs:1521 #: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list" msgid "Grid / list"
msgstr "Grade / lista" msgstr "Grade / lista"
#: crates/pdfs-gui/src/app/main.rs:1522 #: crates/pdfs-gui/src/app/main.rs:1526
#: crates/pdfs-gui/src/app/pages/albums.rs:298 #: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1896 #: crates/pdfs-gui/src/app/pages/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918 #: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -351,7 +351,7 @@ msgstr "Grade / lista"
msgid "Rename" msgid "Rename"
msgstr "Renomear" msgstr "Renomear"
#: crates/pdfs-gui/src/app/main.rs:1523 crates/pdfs-gui/src/app/main.rs:1543 #: crates/pdfs-gui/src/app/main.rs:1527 crates/pdfs-gui/src/app/main.rs:1547
#: crates/pdfs-gui/src/app/pages/browser.rs:357 #: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:924 #: crates/pdfs-gui/src/app/pages/browser.rs:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959 #: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -361,70 +361,83 @@ msgstr "Renomear"
msgid "Move to Trash" msgid "Move to Trash"
msgstr "Mover para a lixeira" msgstr "Mover para a lixeira"
#: crates/pdfs-gui/src/app/main.rs:1524 #: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection" msgid "Clear the selection"
msgstr "Limpar a seleção" msgstr "Limpar a seleção"
#: crates/pdfs-gui/src/app/main.rs:1530 #: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails" msgid "Larger thumbnails"
msgstr "Miniaturas maiores" msgstr "Miniaturas maiores"
#: crates/pdfs-gui/src/app/main.rs:1531 #: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails" msgid "Smaller thumbnails"
msgstr "Miniaturas menores" msgstr "Miniaturas menores"
#: crates/pdfs-gui/src/app/main.rs:1532 #: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size" msgid "Reset thumbnail size"
msgstr "Redefinir tamanho das miniaturas" msgstr "Redefinir tamanho das miniaturas"
#: crates/pdfs-gui/src/app/main.rs:1533 #: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all" msgid "Select all"
msgstr "Selecionar tudo" msgstr "Selecionar tudo"
#: crates/pdfs-gui/src/app/main.rs:1537 #: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer" msgid "Photo Viewer"
msgstr "Visualizador de fotos" msgstr "Visualizador de fotos"
#: crates/pdfs-gui/src/app/main.rs:1539 #: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo" msgid "Previous / next photo"
msgstr "Foto anterior / próxima" msgstr "Foto anterior / próxima"
#: crates/pdfs-gui/src/app/main.rs:1540 #: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo" msgid "First / last photo"
msgstr "Primeira / última foto" msgstr "Primeira / última foto"
#: crates/pdfs-gui/src/app/main.rs:1541 #: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details" msgid "Show details"
msgstr "Mostrar detalhes" msgstr "Mostrar detalhes"
#: crates/pdfs-gui/src/app/main.rs:1542 #: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen" msgid "Fullscreen"
msgstr "Tela cheia" msgstr "Tela cheia"
#: crates/pdfs-gui/src/app/main.rs:1544 #: crates/pdfs-gui/src/app/main.rs:1548
#: crates/pdfs-gui/src/app/pages/status.rs:855
msgid "Close" msgid "Close"
msgstr "Fechar" msgstr "Fechar"
#: crates/pdfs-gui/src/app/main.rs:1634 #: crates/pdfs-gui/src/app/main.rs:1638
msgid "Select a single item to rename it" msgid "Select a single item to rename it"
msgstr "Selecione um único item para renomeá-lo" msgstr "Selecione um único item para renomeá-lo"
#: crates/pdfs-gui/src/app/main.rs:1794 #: crates/pdfs-gui/src/app/main.rs:1798
#: crates/pdfs-gui/src/app/pages/albums.rs:85 #: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104 #: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492 #: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected" msgid "Not connected"
msgstr "Não conectado" msgstr "Não conectado"
#: crates/pdfs-gui/src/app/main.rs:1795 #: crates/pdfs-gui/src/app/main.rs:1799
msgid "The Proton Drive service isn't running." msgid "The Proton Drive service isn't running."
msgstr "O serviço do Proton Drive não está em execução." msgstr "O serviço do Proton Drive não está em execução."
#: crates/pdfs-gui/src/app/main.rs:1813 #: crates/pdfs-gui/src/app/main.rs:1819 crates/pdfs-gui/src/app/main.rs:1834
#: crates/pdfs-gui/src/app/pages/status.rs:1577
msgid "Can't open your Drive" msgid "Can't open your Drive"
msgstr "Não foi possível abrir o Proton Drive" msgstr "Não foi possível abrir o Proton Drive"
#: crates/pdfs-gui/src/app/main.rs:1816 #: crates/pdfs-gui/src/app/main.rs:1822
#, rust-format
msgid ""
"“{path}” already has files in it, and My files would hide them. Proton Drive "
"tries again on its own once the folder is empty. You can also choose another "
"folder for My files in Preferences."
msgstr ""
"“{path}” já tem arquivos, e Meus arquivos os esconderia. O Proton Drive "
"tenta de novo sozinho quando a pasta estiver vazia. Você também pode "
"escolher outra pasta para Meus arquivos em Preferências."
#: crates/pdfs-gui/src/app/main.rs:1837
#, rust-format #, rust-format
msgid "" msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. " "The Proton Drive service keeps failing to start and tries again on its own. "
@@ -433,17 +446,52 @@ msgstr ""
"O serviço do Proton Drive não consegue iniciar e tenta de novo sozinho. " "O serviço do Proton Drive não consegue iniciar e tenta de novo sozinho. "
"Último erro: {error}" "Último erro: {error}"
#: crates/pdfs-gui/src/app/main.rs:1824 #: crates/pdfs-gui/src/app/main.rs:1845
#: crates/pdfs-gui/src/app/pages/status.rs:355 #: crates/pdfs-gui/src/app/pages/status.rs:355
#: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579 #: crates/pdfs-gui/src/hud/mod.rs:269 crates/pdfs-gui/src/hud/mod.rs:579
#: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535 #: crates/pdfs-gui/src/main.rs:493 crates/pdfs-gui/src/main.rs:535
msgid "Connecting…" msgid "Connecting…"
msgstr "Conectando…" msgstr "Conectando…"
#: crates/pdfs-gui/src/app/main.rs:1825 #: crates/pdfs-gui/src/app/main.rs:1846
msgid "Waiting for the Proton Drive service to start." msgid "Waiting for the Proton Drive service to start."
msgstr "Aguardando o serviço do Proton Drive iniciar." msgstr "Aguardando o serviço do Proton Drive iniciar."
#: crates/pdfs-gui/src/app/main.rs:1864
msgid "Your Proton Drive Folder Isn't Empty"
msgstr "Sua pasta do Proton Drive não está vazia"
#: crates/pdfs-gui/src/app/main.rs:1868
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it, so Proton Drive "
"does not open there. Move the item to another folder, or choose another "
"folder for My files."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them, so Proton "
"Drive does not open there. Move the items to another folder, or choose "
"another folder for My files."
msgstr[0] ""
"“{path}” já tem {n} item. Meus arquivos o esconderia, por isso o Proton "
"Drive não abre ali. Mova o item para outra pasta ou escolha outra pasta para "
"Meus arquivos."
msgstr[1] ""
"“{path}” já tem {n} itens. Meus arquivos os esconderia, por isso o Proton "
"Drive não abre ali. Mova os itens para outra pasta ou escolha outra pasta "
"para Meus arquivos."
#: crates/pdfs-gui/src/app/main.rs:1874
msgid "Not Now"
msgstr "Agora não"
#: crates/pdfs-gui/src/app/main.rs:1875 crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Abrir pasta"
#: crates/pdfs-gui/src/app/main.rs:1876
msgid "Choose Another Folder…"
msgstr "Escolher outra pasta…"
#: crates/pdfs-gui/src/app/pages/activity.rs:87 #: crates/pdfs-gui/src/app/pages/activity.rs:87
msgctxt "activity filter" msgctxt "activity filter"
msgid "All" msgid "All"
@@ -654,7 +702,7 @@ msgstr[0] "{n} pasta criada"
msgstr[1] "{n} pastas criadas" msgstr[1] "{n} pastas criadas"
#: crates/pdfs-gui/src/app/pages/activity.rs:983 #: crates/pdfs-gui/src/app/pages/activity.rs:983
#: crates/pdfs-gui/src/i18n.rs:191 #: crates/pdfs-gui/src/i18n.rs:195
#, rust-format #, rust-format
msgid "{n} change" msgid "{n} change"
msgid_plural "{n} changes" msgid_plural "{n} changes"
@@ -1308,7 +1356,7 @@ msgstr "Não foi possível carregar os álbuns"
#: crates/pdfs-gui/src/app/pages/shared.rs:1003 #: crates/pdfs-gui/src/app/pages/shared.rs:1003
#: crates/pdfs-gui/src/app/pages/shared.rs:1119 #: crates/pdfs-gui/src/app/pages/shared.rs:1119
#: crates/pdfs-gui/src/app/pages/status.rs:802 #: crates/pdfs-gui/src/app/pages/status.rs:802
#: crates/pdfs-gui/src/app/pages/status.rs:1642 #: crates/pdfs-gui/src/app/pages/status.rs:1731
#: crates/pdfs-gui/src/app/pages/takeout.rs:424 #: crates/pdfs-gui/src/app/pages/takeout.rs:424
#: crates/pdfs-gui/src/app/pages/takeout.rs:618 #: crates/pdfs-gui/src/app/pages/takeout.rs:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516 #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1578,7 +1626,7 @@ msgid "Make available offline"
msgstr "Disponibilizar offline" msgstr "Disponibilizar offline"
#: crates/pdfs-gui/src/app/pages/browser.rs:347 #: crates/pdfs-gui/src/app/pages/browser.rs:347
#: crates/pdfs-gui/src/app/pages/status.rs:1618 #: crates/pdfs-gui/src/app/pages/status.rs:1707
msgid "Make online only" msgid "Make online only"
msgstr "Tornar somente online" msgstr "Tornar somente online"
@@ -2174,7 +2222,7 @@ msgid "No files or folders match that search."
msgstr "Nenhum arquivo ou pasta corresponde a essa pesquisa." msgstr "Nenhum arquivo ou pasta corresponde a essa pesquisa."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096 #: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248 #: crates/pdfs-gui/src/i18n.rs:252
#, rust-format #, rust-format
msgid "{n} file" msgid "{n} file"
msgid_plural "{n} files" msgid_plural "{n} files"
@@ -2916,7 +2964,7 @@ msgid "Sync paused until you resume"
msgstr "Sincronização pausada até você retomar" msgstr "Sincronização pausada até você retomar"
#: crates/pdfs-gui/src/app/pages/locations.rs:570 #: crates/pdfs-gui/src/app/pages/locations.rs:570
#: crates/pdfs-gui/src/app/pages/status.rs:1445 crates/pdfs-gui/src/main.rs:308 #: crates/pdfs-gui/src/app/pages/status.rs:1524 crates/pdfs-gui/src/main.rs:308
msgid "Sync paused" msgid "Sync paused"
msgstr "Sincronização pausada" msgstr "Sincronização pausada"
@@ -4945,67 +4993,90 @@ msgstr "Não foi possível salvar o idioma"
msgid "Restart Proton Drive to use the new language" msgid "Restart Proton Drive to use the new language"
msgstr "Reinicie o Proton Drive para usar o novo idioma" msgstr "Reinicie o Proton Drive para usar o novo idioma"
#: crates/pdfs-gui/src/app/pages/status.rs:813 #: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder" msgid "Choose Proton Drive Folder"
msgstr "Escolher a pasta do Proton Drive" msgstr "Escolher a pasta do Proton Drive"
#: crates/pdfs-gui/src/app/pages/status.rs:825 #: crates/pdfs-gui/src/app/pages/status.rs:835
msgid "Couldn't read the folder"
msgstr "Não foi possível ler a pasta"
#: crates/pdfs-gui/src/app/pages/status.rs:845
msgid "Choose an Empty Folder"
msgstr "Escolha uma pasta vazia"
#: crates/pdfs-gui/src/app/pages/status.rs:849
#, rust-format
msgid ""
"“{path}” already has {n} item in it. My files would hide it while Proton "
"Drive runs, and it would not be uploaded."
msgid_plural ""
"“{path}” already has {n} items in it. My files would hide them while Proton "
"Drive runs, and they would not be uploaded."
msgstr[0] ""
"“{path}” já tem {n} item. Meus arquivos o esconderia enquanto o Proton Drive "
"estiver em execução, e ele não seria enviado."
msgstr[1] ""
"“{path}” já tem {n} itens. Meus arquivos os esconderia enquanto o Proton "
"Drive estiver em execução, e eles não seriam enviados."
#: crates/pdfs-gui/src/app/pages/status.rs:870
msgid "Couldn't save the folder" msgid "Couldn't save the folder"
msgstr "Não foi possível salvar a pasta" msgstr "Não foi possível salvar a pasta"
#: crates/pdfs-gui/src/app/pages/status.rs:837 #: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?" msgid "Restart Proton Drive?"
msgstr "Reiniciar o Proton Drive?" msgstr "Reiniciar o Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840 #: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format #, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts." msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr "" msgstr ""
"Meus arquivos aparecerá em “{path}” depois que o Proton Drive reiniciar." "Meus arquivos aparecerá em “{path}” depois que o Proton Drive reiniciar."
#: crates/pdfs-gui/src/app/pages/status.rs:844 #: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later" msgid "Later"
msgstr "Mais tarde" msgstr "Mais tarde"
#: crates/pdfs-gui/src/app/pages/status.rs:845 #: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now" msgid "Restart Now"
msgstr "Reiniciar agora" msgstr "Reiniciar agora"
#. Translators: {size} is an amount of storage, such as "1.2 GiB". #. Translators: {size} is an amount of storage, such as "1.2 GiB".
#: crates/pdfs-gui/src/app/pages/status.rs:972 #: crates/pdfs-gui/src/app/pages/status.rs:1016
#, rust-format #, rust-format
msgid "{size} used" msgid "{size} used"
msgstr "{size} usados" msgstr "{size} usados"
#: crates/pdfs-gui/src/app/pages/status.rs:983 #: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format #, rust-format
msgid "{used} of {total} used ({percent}%)" msgid "{used} of {total} used ({percent}%)"
msgstr "{used} de {total} usados ({percent}%)" msgstr "{used} de {total} usados ({percent}%)"
#: crates/pdfs-gui/src/app/pages/status.rs:1023 #: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected" msgid "Proton Drive connected"
msgstr "Proton Drive conectado" msgstr "Proton Drive conectado"
#: crates/pdfs-gui/src/app/pages/status.rs:1024 #: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available." msgid "Your files are available."
msgstr "Seus arquivos estão disponíveis." msgstr "Seus arquivos estão disponíveis."
#: crates/pdfs-gui/src/app/pages/status.rs:1029 #: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected" msgid "Proton Drive disconnected"
msgstr "Proton Drive desconectado" msgstr "Proton Drive desconectado"
#: crates/pdfs-gui/src/app/pages/status.rs:1030 #: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid "" msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts." "The Proton Drive service stopped. Files aren't available until it restarts."
msgstr "" msgstr ""
"O serviço do Proton Drive parou. Os arquivos ficarão indisponíveis até ele " "O serviço do Proton Drive parou. Os arquivos ficarão indisponíveis até ele "
"reiniciar." "reiniciar."
#: crates/pdfs-gui/src/app/pages/status.rs:1099 #: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete" msgid "Sync complete"
msgstr "Sincronização concluída" msgstr "Sincronização concluída"
#: crates/pdfs-gui/src/app/pages/status.rs:1101 #: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format #, rust-format
msgid "{n} file finished transferring." msgid "{n} file finished transferring."
msgid_plural "{n} files finished transferring." msgid_plural "{n} files finished transferring."
@@ -5014,28 +5085,28 @@ msgstr[1] "{n} arquivos terminaram de ser transferidos."
#. Translators: a background job's progress. {title} is the job, such as #. Translators: a background job's progress. {title} is the job, such as
#. "Scanning Photos"; {done} and {total} are counts. #. "Scanning Photos"; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1179 #: crates/pdfs-gui/src/app/pages/status.rs:1223
#, rust-format #, rust-format
msgid "{title} — {done} of {total}" msgid "{title} — {done} of {total}"
msgstr "{title} — {done} de {total}" msgstr "{title} — {done} de {total}"
#. Translators: a background job's progress. {title} is the job, {detail} #. Translators: a background job's progress. {title} is the job, {detail}
#. what it is working on; {done} and {total} are counts. #. what it is working on; {done} and {total} are counts.
#: crates/pdfs-gui/src/app/pages/status.rs:1182 #: crates/pdfs-gui/src/app/pages/status.rs:1226
#, rust-format #, rust-format
msgid "{title} — {detail} ({done} of {total})" msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} de {total})" msgstr "{title} — {detail} ({done} de {total})"
#. Translators: a background job still running. {title} is the job. #. Translators: a background job still running. {title} is the job.
#. Translators: {title} names a running job whose size is not known yet. #. Translators: {title} names a running job whose size is not known yet.
#: crates/pdfs-gui/src/app/pages/status.rs:1184 crates/pdfs-gui/src/main.rs:113 #: crates/pdfs-gui/src/app/pages/status.rs:1228 crates/pdfs-gui/src/main.rs:113
#, rust-format #, rust-format
msgid "{title}…" msgid "{title}…"
msgstr "{title}…" msgstr "{title}…"
#. Translators: a background job still running. {title} is the job, #. Translators: a background job still running. {title} is the job,
#. {detail} what it is working on. #. {detail} what it is working on.
#: crates/pdfs-gui/src/app/pages/status.rs:1187 #: crates/pdfs-gui/src/app/pages/status.rs:1231
#, rust-format #, rust-format
msgid "{title} — {detail}…" msgid "{title} — {detail}…"
msgstr "{title} — {detail}…" msgstr "{title} — {detail}…"
@@ -5043,7 +5114,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as #. file name, {done} the size moved so far and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1216 #: crates/pdfs-gui/src/app/pages/status.rs:1260
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} ({speed}/s)" msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr "{arrow} {name} — {done} ({speed}/s)" msgstr "{arrow} {name} — {done} ({speed}/s)"
@@ -5051,154 +5122,162 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the #. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as #. file name, {done} and {total} sizes and {speed} a size such as
#. "1.2 MiB"; "/s" means per second. #. "1.2 MiB"; "/s" means per second.
#: crates/pdfs-gui/src/app/pages/status.rs:1224 #: crates/pdfs-gui/src/app/pages/status.rs:1268
#, rust-format #, rust-format
msgid "{arrow} {name} — {done} of {total} ({speed}/s)" msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr "{arrow} {name} — {done} de {total} ({speed}/s)" msgstr "{arrow} {name} — {done} de {total} ({speed}/s)"
#: crates/pdfs-gui/src/app/pages/status.rs:1325 #: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format #, rust-format
msgid "{used} cached — no limit set" msgid "{used} cached — no limit set"
msgstr "{used} em cache — sem limite definido" msgstr "{used} em cache — sem limite definido"
#: crates/pdfs-gui/src/app/pages/status.rs:1331 #: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format #, rust-format
msgid "{used} of {limit} used" msgid "{used} of {limit} used"
msgstr "{used} de {limit} usados" msgstr "{used} de {limit} usados"
#: crates/pdfs-gui/src/app/pages/status.rs:1410 #: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired" msgid "Session expired"
msgstr "Sessão expirada" msgstr "Sessão expirada"
#: crates/pdfs-gui/src/app/pages/status.rs:1415 #: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format #, rust-format
msgid "{queued} · sign in again to sync" msgid "{queued} · sign in again to sync"
msgstr "{queued} · entre novamente para sincronizar" msgstr "{queued} · entre novamente para sincronizar"
#: crates/pdfs-gui/src/app/pages/status.rs:1417 #: crates/pdfs-gui/src/app/pages/status.rs:1496
msgid "Sign in again to sync" msgid "Sign in again to sync"
msgstr "Entre novamente para sincronizar" msgstr "Entre novamente para sincronizar"
#: crates/pdfs-gui/src/app/pages/status.rs:1423 #: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved" msgid "Sign-in not saved"
msgstr "Login não salvo" msgstr "Login não salvo"
#: crates/pdfs-gui/src/app/pages/status.rs:1425 #: crates/pdfs-gui/src/app/pages/status.rs:1504
msgid "Unlock your keyring, or the next reboot signs you out" msgid "Unlock your keyring, or the next reboot signs you out"
msgstr "" msgstr ""
"Desbloqueie o chaveiro, ou a próxima reinicialização encerrará sua sessão" "Desbloqueie o chaveiro, ou a próxima reinicialização encerrará sua sessão"
#: crates/pdfs-gui/src/app/pages/status.rs:1431 #: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating" msgid "Restart to finish updating"
msgstr "Reinicie para concluir a atualização" msgstr "Reinicie para concluir a atualização"
#: crates/pdfs-gui/src/app/pages/status.rs:1433 #: crates/pdfs-gui/src/app/pages/status.rs:1512
msgid "An older version of Proton Drive is still running" msgid "An older version of Proton Drive is still running"
msgstr "Uma versão anterior do Proton Drive ainda está em execução" msgstr "Uma versão anterior do Proton Drive ainda está em execução"
#: crates/pdfs-gui/src/app/pages/status.rs:1437 #: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format #, rust-format
msgid "Proton Drive {version} is still running" msgid "Proton Drive {version} is still running"
msgstr "O Proton Drive {version} ainda está em execução" msgstr "O Proton Drive {version} ainda está em execução"
#: crates/pdfs-gui/src/app/pages/status.rs:1450 #: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format #, rust-format
msgid "{queued} · resumes {time}" msgid "{queued} · resumes {time}"
msgstr "{queued} · retoma {time}" msgstr "{queued} · retoma {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30" #. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00". #. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455 #: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format #, rust-format
msgid "Resumes {time}" msgid "Resumes {time}"
msgstr "Retoma {time}" msgstr "Retoma {time}"
#: crates/pdfs-gui/src/app/pages/status.rs:1457 #: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume" msgid "Until you resume"
msgstr "Até você retomar" msgstr "Até você retomar"
#: crates/pdfs-gui/src/app/pages/status.rs:1464 crates/pdfs-gui/src/main.rs:310 #: crates/pdfs-gui/src/app/pages/status.rs:1543 crates/pdfs-gui/src/main.rs:310
#, rust-format #, rust-format
msgid "{n} change needs attention" msgid "{n} change needs attention"
msgid_plural "{n} changes need attention" msgid_plural "{n} changes need attention"
msgstr[0] "{n} alteração requer atenção" msgstr[0] "{n} alteração requer atenção"
msgstr[1] "{n} alterações requerem atenção" msgstr[1] "{n} alterações requerem atenção"
#: crates/pdfs-gui/src/app/pages/status.rs:1474 #: crates/pdfs-gui/src/app/pages/status.rs:1553
#: crates/pdfs-gui/src/app/widgets/details.rs:110 #: crates/pdfs-gui/src/app/widgets/details.rs:110
msgctxt "state" msgctxt "state"
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1475 #: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only" msgid "Cached files only"
msgstr "Somente arquivos em cache" msgstr "Somente arquivos em cache"
#: crates/pdfs-gui/src/app/pages/status.rs:1480 #: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state" msgctxt "state"
msgid "Syncing" msgid "Syncing"
msgstr "Sincronizando" msgstr "Sincronizando"
#: crates/pdfs-gui/src/app/pages/status.rs:1486 #: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date" msgid "Up to date"
msgstr "Atualizado" msgstr "Atualizado"
#: crates/pdfs-gui/src/app/pages/status.rs:1493 #: crates/pdfs-gui/src/app/pages/status.rs:1572
#: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606 #: crates/pdfs-gui/src/hud/mod.rs:592 crates/pdfs-gui/src/hud/mod.rs:606
msgid "Proton Drive isn't running" msgid "Proton Drive isn't running"
msgstr "O Proton Drive não está em execução" msgstr "O Proton Drive não está em execução"
#: crates/pdfs-gui/src/app/pages/status.rs:1498 #: crates/pdfs-gui/src/app/pages/status.rs:1579
msgid "Your Proton Drive folder isn't empty"
msgstr "Sua pasta do Proton Drive não está vazia"
#: crates/pdfs-gui/src/app/pages/status.rs:1581
msgid "Proton Drive keeps trying to start"
msgstr "O Proton Drive continua tentando iniciar"
#: crates/pdfs-gui/src/app/pages/status.rs:1587
msgid "Not responding" msgid "Not responding"
msgstr "Não está respondendo" msgstr "Não está respondendo"
#: crates/pdfs-gui/src/app/pages/status.rs:1499 #: crates/pdfs-gui/src/app/pages/status.rs:1588
msgid "Proton Drive is taking too long to answer" msgid "Proton Drive is taking too long to answer"
msgstr "O Proton Drive está demorando demais para responder" msgstr "O Proton Drive está demorando demais para responder"
#. Translators: stands in for a time that could not be read, as in #. Translators: stands in for a time that could not be read, as in
#. "Resumes later". #. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539 #: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1554 #: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later" msgid "later"
msgstr "mais tarde" msgstr "mais tarde"
#. Translators: strftime format for a time later today, such as "at 14:30". #. Translators: strftime format for a time later today, such as "at 14:30".
#: crates/pdfs-gui/src/app/pages/status.rs:1543 #: crates/pdfs-gui/src/app/pages/status.rs:1632
msgid "at %H:%M" msgid "at %H:%M"
msgstr "às %H:%M" msgstr "às %H:%M"
#. Translators: strftime format for a time within the next week, such as #. Translators: strftime format for a time within the next week, such as
#. "Tue 09:00". #. "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1547 #: crates/pdfs-gui/src/app/pages/status.rs:1636
msgid "%a %H:%M" msgid "%a %H:%M"
msgstr "%a às %H:%M" msgstr "%a às %H:%M"
#. Translators: strftime format for a date further ahead, such as "23 Sep". #. Translators: strftime format for a date further ahead, such as "23 Sep".
#: crates/pdfs-gui/src/app/pages/status.rs:1550 #: crates/pdfs-gui/src/app/pages/status.rs:1639
msgid "%e %b" msgid "%e %b"
msgstr "em %-d de %b" msgstr "em %-d de %b"
#: crates/pdfs-gui/src/app/pages/status.rs:1580 #: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline" msgid "No files kept offline"
msgstr "Nenhum arquivo mantido offline" msgstr "Nenhum arquivo mantido offline"
#: crates/pdfs-gui/src/app/pages/status.rs:1582 #: crates/pdfs-gui/src/app/pages/status.rs:1671
msgid "Right-click a file or folder and choose “Available offline”." msgid "Right-click a file or folder and choose “Available offline”."
msgstr "" msgstr ""
"Clique com o botão direito em um arquivo ou pasta e escolha “Disponível " "Clique com o botão direito em um arquivo ou pasta e escolha “Disponível "
"offline”." "offline”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634 #: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1641 #: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only" msgid "Couldn't make it online only"
msgstr "Não foi possível torná-lo somente online" msgstr "Não foi possível torná-lo somente online"
#: crates/pdfs-gui/src/app/pages/status.rs:1658 #: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer" msgid "Show fewer"
msgstr "Mostrar menos" msgstr "Mostrar menos"
#: crates/pdfs-gui/src/app/pages/status.rs:1661 #: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format #, rust-format
msgid "Show all {n} file" msgid "Show all {n} file"
msgid_plural "Show all {n} files" msgid_plural "Show all {n} files"
@@ -6270,37 +6349,37 @@ msgctxt "file state"
msgid "Online only" msgid "Online only"
msgstr "Somente online" msgstr "Somente online"
#: crates/pdfs-gui/src/i18n.rs:84 #: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo" msgid "Kosovo"
msgstr "Kosovo" msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178 #: crates/pdfs-gui/src/i18n.rs:182
#, rust-format #, rust-format
msgid "{n} upload queued" msgid "{n} upload queued"
msgid_plural "{n} uploads queued" msgid_plural "{n} uploads queued"
msgstr[0] "{n} envio na fila" msgstr[0] "{n} envio na fila"
msgstr[1] "{n} envios na fila" msgstr[1] "{n} envios na fila"
#: crates/pdfs-gui/src/i18n.rs:184 #: crates/pdfs-gui/src/i18n.rs:188
#, rust-format #, rust-format
msgid "{n} change queued" msgid "{n} change queued"
msgid_plural "{n} changes queued" msgid_plural "{n} changes queued"
msgstr[0] "{n} alteração na fila" msgstr[0] "{n} alteração na fila"
msgstr[1] "{n} alterações na fila" msgstr[1] "{n} alterações na fila"
#: crates/pdfs-gui/src/i18n.rs:190 #: crates/pdfs-gui/src/i18n.rs:194
#, rust-format #, rust-format
msgid "{n} upload" msgid "{n} upload"
msgid_plural "{n} uploads" msgid_plural "{n} uploads"
msgstr[0] "{n} envio" msgstr[0] "{n} envio"
msgstr[1] "{n} envios" msgstr[1] "{n} envios"
#: crates/pdfs-gui/src/i18n.rs:194 #: crates/pdfs-gui/src/i18n.rs:198
#, rust-format #, rust-format
msgid "{uploads}, {changes} queued" msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} na fila" msgstr "{uploads}, {changes} na fila"
#: crates/pdfs-gui/src/i18n.rs:251 #: crates/pdfs-gui/src/i18n.rs:255
#, rust-format #, rust-format
msgid "{n} file in {dir}" msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}" msgid_plural "{n} files in {dir}"
@@ -6435,10 +6514,6 @@ msgstr "Abrir o Proton Drive"
msgid "Restart Proton Drive" msgid "Restart Proton Drive"
msgstr "Reiniciar o Proton Drive" msgstr "Reiniciar o Proton Drive"
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr "Abrir pasta"
#: crates/pdfs-gui/src/main.rs:512 #: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync" msgid "Resume Sync"
msgstr "Retomar sincronização" msgstr "Retomar sincronização"
@@ -6768,9 +6843,6 @@ msgstr "não foi possível acessar o daemon do Proton Drive: {error}"
#~ msgid "Stop sharing?" #~ msgid "Stop sharing?"
#~ msgstr "Parar de compartilhar?" #~ msgstr "Parar de compartilhar?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Escolher a pasta do ponto de montagem"
#~ msgid "Couldn't save mountpoint" #~ msgid "Couldn't save mountpoint"
#~ msgstr "Não foi possível salvar o ponto de montagem" #~ msgstr "Não foi possível salvar o ponto de montagem"