Compare commits

..
35 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 b3ea564c6b docs(bugs): keep the index newest first 2026-10-31 19:29:29 +01:00
nvrl 463c97a14d Merge branch 'chore/sdk-0.10.1' into fix/clean-stop-runtime
# Conflicts:
#	docs/BUGS.md
2026-10-31 19:29:05 +01:00
nvrl 176112a9cb fix(cli): leave the runtime running on a stop so stragglers cannot panic
A stop shut the tokio runtime down after joining the workers it owns.
Threads it never joins, such as a size lookup or a profile backup that
a request started during the stop, then panicked on their next timer
with "A Tokio 1.x context was found, but it is being shutdown". The
process exits right after a stop, so the runtime is now left for the
exit to end. A mount that is retried still shuts its runtime down with
the 2 s limit.

The acceptance journal check now counts panics, and no longer counts
the ENOENT reply errors a stop causes by aborting its FUSE connections.

docs/BUGS.md B276.
2026-10-31 19:09:23 +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
46 changed files with 3323 additions and 1753 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"]
[workspace.package]
version = "3.6.0"
version = "3.7.0"
edition = "2024"
license = "MIT"
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
# pool alive, and `std::sync::Mutex` would defeat that by poisoning the state
# the recovered worker needs.
parking_lot = "0.12"
parking_lot = "0.13"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
directories = "6"
@@ -41,7 +41,7 @@ ignore = "0.4"
sha2 = "0.11"
# Google Takeout exports are zip sets; the importer reads their central
# 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
# import has to speak SHA-1 whatever its age.
sha1 = "0.11"
@@ -49,7 +49,7 @@ sha1 = "0.11"
# formats a camera or phone actually produces — the rest of the crate's codecs
# would be dead weight in the daemon.
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
# 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.
+115 -33
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 } => {
for d in items {
let sync = d
.last_sync
.map(|t| t.to_string())
.unwrap_or_else(|| "never".to_string());
let sync = last_synced(d.last_sync);
let tag = match (d.adopted, d.this_device) {
(true, _) => " *adopted*",
(false, true) => " *this machine*",
@@ -1130,11 +1127,7 @@ fn cmd_sync(action: SyncCmd) -> Result<()> {
}
CtlResponse::SyncFolders { items } => {
for f in items {
let sync = if f.last_sync == 0 {
"never".to_string()
} else {
f.last_sync.to_string()
};
let sync = last_synced(Some(f.last_sync));
// A queued switch is reported as the mode the folder is moving
// to, so `sync list` never reads as if the request was dropped.
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}")
}
/// 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<()> {
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),
attempts,
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) {
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`
/// failures in a row.
///
@@ -2527,14 +2547,30 @@ fn mount_once(mountpoint: Option<PathBuf>) -> Result<pdfs_fuse::MountOutcome> {
"could not save the refreshed session tokens; the next start may need `pdfs login`"
);
}
// Dropping the runtime waits for every blocking task, however long; a call
// still stuck on Drive would hold the stop until systemd kills it (B165).
rt.shutdown_timeout(std::time::Duration::from_secs(2));
release_runtime(rt, matches!(result, Ok(pdfs_fuse::MountOutcome::Shutdown)));
let outcome = result.context("mount failed")?;
Ok(outcome)
}
/// Let go of a mount's runtime once the mount has ended.
///
/// On a stop the process exits right after, so the runtime is left running
/// for it to end with. Shutting it down first broke every thread the mount
/// does not join, such as a size lookup or a profile backup a request started
/// during the stop: its next call to Drive panicked with "A Tokio 1.x context
/// was found, but it is being shutdown" (`docs/BUGS.md` B276). A mount that
/// is about to be tried again does shut it down, because a new runtime
/// replaces it. Dropping it would wait for every blocking task, however long;
/// a call still stuck on Drive would hold the retry (B165).
fn release_runtime(rt: tokio::runtime::Runtime, exiting: bool) {
if exiting {
std::mem::forget(rt);
} else {
rt.shutdown_timeout(std::time::Duration::from_secs(2));
}
}
fn cmd_pin(path: PathBuf) -> Result<()> {
match control_request(CtlRequest::Pin {
path: path_arg(&path)?,
@@ -3722,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.
fn writable_probe(dir: &Path) -> std::io::Result<()> {
let name = format!(".pdfs-diagnose-probe-{}", std::process::id());
@@ -3904,7 +3920,7 @@ fn cmd_diagnose() -> Result<()> {
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
.as_deref()
.is_some_and(|kind| kind.starts_with("fuse"));
@@ -4146,6 +4162,47 @@ fn control_request(req: CtlRequest) -> Result<CtlResponse> {
.with_context(|| format!("talk to mount daemon at {}", socket.display()))
}
#[cfg(test)]
mod release_runtime_tests {
use super::*;
use std::time::Duration;
/// A thread the mount never joined still reaches Drive after a stop. It
/// used to panic on its first timer once the runtime was shut down.
#[test]
fn a_thread_left_running_at_a_stop_can_still_use_the_runtime() {
let rt = tokio::runtime::Runtime::new().unwrap();
let handle = rt.handle().clone();
let (released_tx, released_rx) = std::sync::mpsc::channel();
let straggler = std::thread::spawn(move || {
released_rx.recv().unwrap();
handle.block_on(async {
tokio::time::sleep(Duration::from_millis(1)).await;
7
})
});
release_runtime(rt, true);
released_tx.send(()).unwrap();
assert_eq!(straggler.join().expect("the thread must not panic"), 7);
}
#[test]
fn a_mount_tried_again_shuts_its_runtime_down() {
let rt = tokio::runtime::Runtime::new().unwrap();
let (done_tx, done_rx) = std::sync::mpsc::channel::<()>();
rt.spawn(async move {
let _done = done_tx;
std::future::pending::<()>().await;
});
release_runtime(rt, false);
// The task is dropped with the runtime, and its sender with it.
assert_eq!(
done_rx.recv_timeout(Duration::from_secs(5)),
Err(std::sync::mpsc::RecvTimeoutError::Disconnected)
);
}
}
#[cfg(test)]
mod pause_tests {
use super::*;
@@ -4272,6 +4329,23 @@ mod login_wait_tests {
assert_eq!(secs, [5, 10, 20, 40, 80, 120, 120, 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;
#[test]
@@ -4380,6 +4454,14 @@ mod login_wait_tests {
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]
fn a_forged_looking_invitation_is_flagged_not_stated() {
let mut entry = pdfs_core::control::DirEntry {
+33 -1
View File
@@ -621,10 +621,20 @@ impl ContentCache {
for entry in rd.flatten() {
let name = entry.file_name();
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
// of bytes and not a cached block; like `.meta` it is neither
// budgeted nor evictable on its own.
if name.ends_with(".meta") || name.ends_with(".geom") {
if name.ends_with(".geom") {
continue;
}
// 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}");
}
/// 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]
fn stale_metadata_is_a_miss() {
let (c, _d) = cache();
+1
View File
@@ -16,6 +16,7 @@ pub mod keycheck;
pub mod localindex;
pub mod menu;
pub mod mountfail;
pub mod mountpoint;
pub mod mounts;
pub mod opener;
pub mod places;
+14
View File
@@ -24,6 +24,11 @@ pub struct MountFailure {
pub attempts: u32,
/// Unix seconds of the next attempt.
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`.
@@ -65,6 +70,7 @@ mod tests {
since: 1_700_000_000,
attempts: 3,
next_attempt: 1_700_000_040,
not_empty: None,
};
record(&dir, &failure).unwrap();
assert_eq!(read(&dir), Some(failure));
@@ -72,4 +78,12 @@ mod tests {
assert_eq!(read(&dir), None);
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 mut zip = zip::ZipWriter::new(file);
let options: zip::write::FileOptions<'_, ()> =
zip::write::FileOptions::default().compression_method(zip::CompressionMethod::Stored);
let options = zip::write::SimpleFileOptions::default()
.compression_method(zip::CompressionMethod::Stored);
for (name, body) in files {
zip.start_file(*name, options).unwrap();
zip.write_all(body).unwrap();
+1 -1
View File
@@ -110,7 +110,7 @@ struct ControlHandlerPermit;
impl ControlHandlerPermit {
fn acquire() -> Option<Self> {
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)
})
.ok()
+7
View File
@@ -1281,6 +1281,13 @@ impl Core {
sent: (&sent.0, &sent.1),
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)? {
CreateRetired::Withdrawn { trash } => {
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
// command returns. The same when the network goes
// 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(),
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
/// 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.
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)?;
// 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
@@ -4014,7 +4019,7 @@ impl Core {
error!(%uid, error = %e, "queueing trash failed");
Errno::EIO
})?;
let open_now = self.is_open_anywhere(uid);
let open_now = open || self.is_open_anywhere(uid);
if open_now {
let read_from = self.pending_blob(uid);
self.release_dropped_below(
@@ -5383,9 +5388,12 @@ impl Core {
/// `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).
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 uid = if is_local_uid(uid) {
if self.is_open_anywhere(uid) {
if open {
self.withdraw_queued_ops(uid)?;
} else {
self.discard_queued_ops(uid)?;
@@ -5410,7 +5418,7 @@ impl Core {
// Local-first or offline, or the network goes away under the call:
// queue the trash. The rename that follows queues as well, behind it.
if !self.sends_inline() {
return self.queue_trash(uid, name);
return self.queue_trash(uid, name, open);
}
self.require_uid_writable(uid)?;
if let Err(e) = self
@@ -5418,7 +5426,7 @@ impl Core {
.and_then(batch::into_unit)
{
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");
self.log_activity(ActivityKind::Trash, name, e.to_string(), false);
@@ -9258,7 +9266,7 @@ mod tests {
assert!(!replaced.contains("st.forget(uid)"));
assert_before(
replaced,
"if self.is_open_anywhere(uid)",
"let open = self.is_open_anywhere(uid)",
"self.discard_queued_ops(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
/// recover it from `nodes` without the API.
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`,
// so the age it reports is the daemon's own.
super::diagnostics::start_clock();
check_mountpoint(mountpoint)?;
let (root, start) = fetch_or_recall_root(drive.as_ref(), &rt, &db)?;
let online = start == Start::Online;
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 previous = self
.file_thumb_generation
.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |current| {
.try_update(Ordering::SeqCst, Ordering::SeqCst, |current| {
Some(next(current))
})
.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
/// it.
pub(crate) fn online(&self) -> io::Result<bool> {
@@ -393,6 +409,43 @@ mod tests {
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.
fn write_at(path: &Path, offset: u64, bytes: &[u8]) -> io::Result<()> {
use std::os::unix::fs::FileExt;
@@ -565,7 +618,7 @@ mod tests {
std::fs::write(&path, b"0123456789").unwrap();
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())))
}));
daemon.client.set_online(false);
@@ -692,6 +745,55 @@ mod tests {
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]
#[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() {
@@ -706,7 +808,7 @@ mod tests {
std::fs::write(&path, b"0123456789").unwrap();
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())))
}));
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
/// on Drive.
#[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"]
.iter()
.map(|r| ((*r).to_string(), ()))
@@ -2881,7 +2881,7 @@ mod tests {
);
assert!(
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
// 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
}
/// 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
/// mount or unreadable folder rather than a deliberate whole-tree deletion.
/// One surviving path is enough to clear the guard.
/// When the synced paths are all or nearly all absent locally, the likely
/// cause is an unavailable mount or unreadable folder rather than a deliberate
/// deletion of the whole tree.
pub(super) fn guard_local_wipe<B, L>(
baseline: &HashMap<String, B>,
local: &HashMap<String, L>,
) -> 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!(
"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 again, sync the folder from scratch.",
baseline.len()
@@ -200,20 +224,24 @@ pub(super) fn guard_local_wipe<B, L>(
Ok(())
}
/// Refuse to run a pass whose remote side has vanished in its entirety: the
/// remote twin of [`guard_local_wipe`].
/// Refuse to run a pass whose remote side has vanished in its entirety, or
/// nearly so: the remote twin of [`guard_local_wipe`].
///
/// 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
/// one synced path is left on Drive, a failed listing is far likelier than a
/// deliberate wipe of the whole folder, so the pass stops instead.
/// everything", which a pass answers by deleting the local copies. When all or
/// nearly all synced paths are gone from Drive at once, a failed listing is far
/// likelier than a deliberate wipe of the folder, so the pass stops instead.
pub(super) fn guard_remote_wipe<B, R>(
baseline: &HashMap<String, B>,
remote: &HashMap<String, R>,
) -> 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!(
"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; \
to upload them again, sync the folder from scratch.",
baseline.len()
@@ -816,7 +844,7 @@ mod file_plan_tests {
/// An empty or failed remote listing must not read as "Drive deleted
/// everything" and delete the local copies.
#[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 none: HashMap<String, RemoteItem> = HashMap::new();
assert!(guard_remote_wipe(&base, &none).is_err());
@@ -826,6 +854,37 @@ mod file_plan_tests {
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
/// listing did not return is left out, and nothing else.
#[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.
reqwest = { version = "0.13", default-features = false, features = ["rustls", "webpki-roots"] }
# 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
/// account, so a refresh never re-opens a dialog the user cancelled.
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
/// (which need the daemon to evict + re-hydrate) and every mutating action.
mounted: RefCell<bool>,
@@ -403,6 +406,7 @@ fn build_window(app: &adw::Application) {
opening: RefCell::new(HashSet::new()),
session: RefCell::new(startup_session),
unlock_offered: Cell::new(false),
not_empty_offered: Cell::new(0),
mounted: RefCell::new(false),
sidebar: sidebar_list.clone(),
nav: split.clone(),
@@ -1807,6 +1811,23 @@ pub(crate) fn service_unreachable(
.ok()
.flatten();
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(
&ui,
"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.
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
/// 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>) {
let win = ui_window(ui);
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| {
let Ok(folder) = res else { return };
let Some(path) = folder.path() else { return };
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());
// The folder My files is mounted at lists Drive's files, not its own,
// so picking it again is not checked.
if path == ui.dirs.resolved_mountpoint(&ui.dirs.load_config()) {
use_mountpoint(&ui, &path);
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, |_| {});
let ui = ui.clone();
glib::spawn_future_local(async move {
let checked = path.clone();
let found = gio::spawn_blocking(move || pdfs_core::mountpoint::not_empty(&checked))
.await
.unwrap_or_else(|_| Err(std::io::Error::other("the check did not finish")));
match found {
Ok(None) => use_mountpoint(&ui, &path),
Ok(Some(found)) => refuse_mountpoint(&ui, &found),
Err(e) => toast_error(&ui, &gettext("Couldn't read the folder"), &e.to_string()),
}
});
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`] /
/// [`gallery_unreachable`] when the mount is down): restart the systemd unit and
/// 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.
pub(crate) fn paint_disconnected(ui: &Rc<Ui>) {
set_mounted(ui, false);
paint_sync_status(ui, SyncState::Disconnected);
for r in ui.status.pin_rows.borrow().iter() {
if let Some(b) = &r.unpin {
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.
@@ -1392,6 +1463,11 @@ pub(crate) enum SyncState {
},
/// No mount daemon answered: still starting, or the service is down.
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.
NotResponding,
}
@@ -1400,7 +1476,10 @@ pub(crate) enum SyncState {
/// one-line state, and a detail line.
fn paint_sync_status(ui: &Rc<Ui>, state: SyncState) {
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 outdated = matches!(state, SyncState::Outdated { .. });
let (icon, class, title, detail) = match state {
@@ -1492,6 +1571,16 @@ fn paint_sync_status(ui: &Rc<Ui>, state: SyncState) {
gettext("Not connected"),
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 => (
"dialog-warning-symbolic",
Some("warning"),
+7 -3
View File
@@ -48,7 +48,8 @@ pub(crate) fn init() {
.ok()
.and_then(|dirs| dirs.load_config().language)
.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 {
apply_language(&code);
}
@@ -97,14 +98,17 @@ pub(crate) fn country_name(code: &str) -> String {
fn apply_language(code: &str) {
// SAFETY: `init` runs at the top of `main`, before any other thread exists.
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())
.unwrap_or_default();
if !is_c_locale(&current) {
return;
}
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.
unsafe { std::env::set_var("LC_MESSAGES", &candidate) };
return;
+191 -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 |
| [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 |
| [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 |
@@ -84,6 +83,7 @@ original wording.
| 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 |
| [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 |
@@ -109,17 +109,17 @@ a live account since.
| Entry | Title |
|---|---|
| [B265](#b265--address-keys-whose-token-is-for-an-inactive-account-key-never-open) | Address keys whose token is for an inactive account key never open |
| [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 |
| [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 |
| [B266](#b266--pin-unpin-search-and-node-loads-report-a-database-error-as-offline) | Pin, unpin, search and node loads report a database error as "offline" |
| [B265](#b265--address-keys-whose-token-is-for-an-inactive-account-key-never-open) | Address keys whose token is for an inactive account key never open |
| [B264](#b264--a-mount-that-fails-after-starting-its-workers-leaves-them-running) | A mount that fails after starting its workers leaves them running |
| [B261](#b261--a-folder-that-has-never-synced-reads-up-to-date) | A folder that has never synced reads "up to date" |
| [B272](#b272--after-a-folder-is-removed-and-added-again-its-file-events-go-to-the-old-id) | After a folder is removed and added again, its file events go to the old id |
| [B260](#b260--the-poll-pushes-a-new-folders-first-sync-behind-every-other-folder) | The poll pushes a new folder's first sync behind every other folder |
| [B258](#b258--journalctl--p-warning-shows-nothing-whatever-the-daemon-logged) | `journalctl -p warning` shows nothing, whatever the daemon logged |
| [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version |
| [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 |
| [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 |
| [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives |
| [B253](#b253--the-app-shows-the-sign-in-page-when-the-keyring-is-locked) | The app shows the sign-in page when the keyring is locked |
| [B252](#b252--computers-sharing-a-device-overwrite-each-others-profile) | Computers sharing a device overwrite each other's profile |
@@ -294,6 +294,10 @@ a live account since.
| 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 |
| [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 |
@@ -377,6 +381,127 @@ a live account since.
Newest first.
### B278 — `sync list` and `devices list` show the last sync as epoch seconds
**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
--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
`ERROR fuser::reply: Failed to send FUSE reply: No such file or directory (os error 2)` lines,
and after them a panic that the check did not report:
```
thread '<unnamed>' (1536340) panicked at .../tokio-1.53.1/src/runtime/time/entry.rs:539:9:
A Tokio 1.x context was found, but it is being shutdown.
```
The same panic is in the journal of a 3.6.0 stop on 2026-10-28, twice. B91 first saw it in a
meta worker.
**Where:** `mount_once` and `release_runtime` in `crates/pdfs-cli/src/main.rs`;
`JournalWatch` and `journal_problems` in `scripts/fuse-acceptance.py`.
**Cause.** A stop joins the drain workers, the sync engine and the FUSE worker pool, and then
`mount_once` shut the tokio runtime down. Other threads also use the runtime and are never
joined: a size lookup for a listing, a profile backup, a control request, a database vacuum.
A request still in progress when the stop began can start one of them. The thread id here is
nine below the next daemon's pid, so this thread started during the stop. Once the runtime is
shut down, that thread's next timer panics. Every call to Drive has a timer, because each one is
bounded.
The three `fuser::reply` lines are part of a correct stop. The stop aborts each mount's FUSE
connection so the unmount cannot hang. A request that was still running replies after that,
and the kernel answers a reply on an aborted connection with `ENOENT`.
The journal check matched only the `ERROR` token. A panic goes to stderr with no tracing level,
so the check did not see it.
**Fix.**
- On a stop, `release_runtime` leaves the runtime running for the process to end with, instead
of shutting it down. The process exits right after, so a thread the stop did not wait for
can finish its call or be ended by the exit, but it cannot panic. A mount that is about to
be tried again still shuts its runtime down with the 2 s limit from B165, because a new
runtime replaces it.
- The journal check counts `panicked at` lines.
- The journal check ignores the `ENOENT` reply error between the connection abort and the end
of that stop ("daemon stopping", or "control socket listening" for a mount that comes back).
At any other time the error still counts.
Making the bounded call helpers refuse new calls once the stop flag is set was rejected. The
stop sets that flag before it waits up to 10 s for the drain workers, so the refusal would cut
off the second half of an upload the stop is waiting for.
**Test:** `a_thread_left_running_at_a_stop_can_still_use_the_runtime` and
`a_mount_tried_again_shuts_its_runtime_down` in `crates/pdfs-cli/src/main.rs`. With the old
shutdown, the first one fails with the same panic at `entry.rs:539`. The new journal
filter was run on the journal of the run that found this: the three reply errors are no longer
counted, and the panic is.
---
### B275 — On a slow link, a file's last write can land only in a conflict copy
**Status:** Open
@@ -471,7 +596,9 @@ folder list has now.
**Status:** Fixed, not verified live
**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
`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`
**Repro:** Restore or add a mirror folder with tens of thousands of items on Drive, on a link
@@ -497,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
**Status:** Open
**Status:** Partly fixed
**Found:** 2026-10-31, code audit after issue #46, whose reporter emptied a synced folder
several times.
**Where:** `guard_local_wipe` and `guard_remote_wipe` in `crates/pdfs-fuse/src/sync/planner.rs`
@@ -511,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.
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
choice to the user: delete on the other side, or sync from scratch.
**Fix.** Both guards also refuse a pass when nine in ten or more of the tracked paths of a
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`.
---
@@ -851,7 +990,8 @@ is why it helps.
### 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
-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`
@@ -876,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
**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`
failing on most runs. The feature was not released yet.
**Where:** `release` in `crates/pdfs-fuse/src/filesystem.rs`; `copy_to` in
@@ -902,7 +1079,8 @@ A move checks the same set.
### B255 — A synced folder whose files are all gone here is stuck for good
**Status:** Fixed, not verified live
**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.
**Where:** `push_pass` in `crates/pdfs-fuse/src/sync.rs`; `reset_sync_folder` in
`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]
## [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
Schema: **44**, unchanged.
+1 -1
View File
@@ -76,7 +76,7 @@ fix it.
| 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 |
| `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 |
+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).
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?
+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:
```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.
+1 -1
View File
@@ -246,7 +246,7 @@ remaining cases are skipped. Cases that make many round trips by design get twic
| `--report-json PATH` | Every result and recorded observation. Attach it to a bug report |
| `--report-junit PATH` | JUnit XML. `known` is reported as skipped |
| `--budget SECONDS` | Flags cases that pass but take longer (`PDFS_ACCEPTANCE_BUDGET`) |
| `--journal-check` | Fails the run if `proton-drive.service` logged an error during it, or the warnings "queued write conflicts; keeping a conflict copy" and "a fuse worker has held the same job for a long time" |
| `--journal-check` | Fails the run if `proton-drive.service` logged an error or a panic during it, or the warnings "queued write conflicts; keeping a conflict copy" and "a fuse worker has held the same job for a long time". A `Failed to send FUSE reply: No such file or directory` during a stop does not count: it is a request answering after the stop aborted its connection |
| `--durability` | Restarts the service mid-suite and checks the bytes written before it. Proves the queue survives a restart. `PDFS_ACCEPTANCE_UNIT` names another unit |
| `--fail-fast` | Stops at the first failure |
| `--list` | Prints every case and its targets |
+18 -3
View File
@@ -141,6 +141,20 @@ fusermount3 -uz ~/ProtonDrive
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
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
The log says `every one of the N synced paths is missing locally; refusing to trash them on
Drive`. The folder synced before, and now none of its files are on this computer. The sync
stops so that it does not delete them on Proton Drive too. Check that the folder is the right
The log says `M of the N synced paths are missing locally; refusing to trash them on Drive`.
The folder synced before, and now all or nearly all of its files are gone from this computer:
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
folder's menu on **Sync → Folders**, or run:
+1 -1
View File
@@ -9,7 +9,7 @@
# Build + install: cd packaging && makepkg -fi
pkgname=proton-drive-linux
pkgver=3.6.0
pkgver=3.7.0
pkgrel=1
pkgdesc="Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app + tray"
arch=('x86_64')
@@ -1,6 +1,6 @@
pkgbase = proton-drive-for-linux-bin
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
url = https://proton-drive.narl.io
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 = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
provides = proton-drive-for-linux=3.6.0
provides = proton-drive-linux=3.6.0
provides = proton-drive-for-linux=3.7.0
provides = proton-drive-linux=3.7.0
provides = pdfs
conflicts = proton-drive-linux
conflicts = proton-drive-for-linux
conflicts = proton-drive-for-linux-git
options = !strip
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 = 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-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-3.6.0.svg::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.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 = LICENSE-3.6.0::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.6.0/LICENSE
sha256sums = 8e9b76b0df238af1c8978c33b4c27c0c548e1faa81b368d0d271ed564d0a76c7
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.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.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.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.7.0.service::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/packaging/proton-drive.service
source = LICENSE-3.7.0::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.7.0/LICENSE
sha256sums = 3f0d16c19b10b30e3f181e3c7fb439f0a8c38980e8ab7a4a96ae6596b349787c
sha256sums = d190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123
sha256sums = 1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0
sha256sums = e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828
@@ -1,7 +1,7 @@
# Maintainer: Nils Pukropp <contact@narl.io>
pkgname=proton-drive-for-linux-bin
pkgver=3.6.0
pkgver=3.7.0
pkgrel=1
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)"
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"
"proton-drive-$pkgver.service::$_raw/packaging/proton-drive.service"
"LICENSE-$pkgver::$_raw/LICENSE")
sha256sums=('8e9b76b0df238af1c8978c33b4c27c0c548e1faa81b368d0d271ed564d0a76c7'
sha256sums=('3f0d16c19b10b30e3f181e3c7fb439f0a8c38980e8ab7a4a96ae6596b349787c'
'd190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123'
'1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0'
'e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828'
@@ -1,6 +1,6 @@
pkgbase = proton-drive-for-linux-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
url = https://proton-drive.narl.io
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 = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
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-linux=3.6.0.r0.g2720191
provides = proton-drive-for-linux=3.7.0.r0.g7ab14bb
provides = proton-drive-linux=3.7.0.r0.g7ab14bb
provides = pdfs
conflicts = proton-drive-linux
conflicts = proton-drive-for-linux
@@ -1,7 +1,7 @@
# Maintainer: Nils Pukropp <contact@narl.io>
pkgname=proton-drive-for-linux-git
pkgver=3.6.0.r0.g2720191
pkgver=3.7.0.r0.g7ab14bb
pkgrel=1
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)"
arch=('x86_64')
@@ -1,6 +1,6 @@
pkgbase = proton-drive-for-linux
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
url = https://proton-drive.narl.io
install = proton-drive.install
@@ -24,13 +24,13 @@ pkgbase = proton-drive-for-linux
optdepends = xdg-utils: "Open folder" action in the tray menu
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
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
conflicts = proton-drive-linux
conflicts = proton-drive-for-linux-bin
conflicts = proton-drive-for-linux-git
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
sha256sums = d9b16b1027816a379d6a11c6396d779f751a6f94becaa16b17439420f561d13d
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 = 542c534976e335cde6658de127e1eefffade9057d5332fd33457bc371c7a2737
pkgname = proton-drive-for-linux
@@ -1,7 +1,7 @@
# Maintainer: Nils Pukropp <contact@narl.io>
pkgname=proton-drive-for-linux
pkgver=3.6.0
pkgver=3.7.0
pkgrel=1
pkgdesc="Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray"
arch=('x86_64')
@@ -26,7 +26,7 @@ options=('!lto')
# Stops the running daemon before removal, so the mount stops mirroring deletes.
install=proton-drive.install
source=("$pkgname-$pkgver.tar.gz::$_repo/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('d9b16b1027816a379d6a11c6396d779f751a6f94becaa16b17439420f561d13d')
sha256sums=('542c534976e335cde6658de127e1eefffade9057d5332fd33457bc371c7a2737')
_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.
%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
# Files come from the checkout, or from the unpacked tag archive.
%global src %{?git_dir}%{!?git_dir:.}
+206 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: German\n"
@@ -57,7 +57,7 @@ msgstr "%-d. %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d. %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A, %-d. %B %Y, %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "Computers"
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
msgid "Trash"
msgstr "Papierkorb"
#. 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"
msgstr "Synchronisierung"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -149,23 +149,23 @@ msgstr ""
"Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG "
"unterstützt oder befürwortet."
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code"
msgstr "Quellcode"
#: crates/pdfs-gui/src/app/main.rs:1356
#: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service"
msgstr "Nutzungsbedingungen von Proton"
#: crates/pdfs-gui/src/app/main.rs:1360
#: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy"
msgstr "Datenschutzerklärung von Proton"
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr "Haftungsausschluss"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n"
@@ -190,7 +190,7 @@ msgstr ""
"bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten "
"zusätzlich gesichert werden."
#: crates/pdfs-gui/src/app/main.rs:1377
#: crates/pdfs-gui/src/app/main.rs:1381
msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -200,7 +200,7 @@ msgstr ""
"\">GeoNames</a>, lizenziert unter <a href=\"https://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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"gemeinfrei sind."
#: crates/pdfs-gui/src/app/main.rs:1393
#: crates/pdfs-gui/src/app/main.rs:1397
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Proton Drive beenden?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -243,7 +243,7 @@ msgstr ""
"eine Verbindung hergestellt wird. Proton Drive startet bei der nächsten "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -278,30 +278,30 @@ msgstr ""
msgid "Cancel"
msgstr "Abbrechen"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr "Beenden"
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive"
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."
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
msgid "General"
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
msgid "Search Drive"
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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -310,43 +310,43 @@ msgstr "Drive durchsuchen"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Einstellungen"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Tastenkürzel"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr "Dateien hochladen"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr "Übergeordneter Ordner"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -355,7 +355,7 @@ msgstr "Raster / Liste"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -365,70 +365,84 @@ msgstr "Umbenennen"
msgid "Move to Trash"
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"
msgstr "Auswahl aufheben"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Größere Vorschaubilder"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr "Kleinere Vorschaubilder"
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
msgstr "Vorschaubildgröße zurücksetzen"
#: crates/pdfs-gui/src/app/main.rs:1533
#: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all"
msgstr "Alles auswählen"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Fotobetrachter"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
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"
msgstr "Erstes / letztes Foto"
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr "Details anzeigen"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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 "
"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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -658,7 +707,7 @@ msgstr[0] "{n} Ordner erstellt"
msgstr[1] "{n} Ordner erstellt"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1582,7 +1631,7 @@ msgid "Make available offline"
msgstr "Offline verfügbar machen"
#: 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"
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."
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2932,7 +2981,7 @@ msgid "Sync paused until you resume"
msgstr "Synchronisierung bis zur Fortsetzung pausiert"
#: 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"
msgstr "Synchronisierung pausiert"
@@ -4987,67 +5036,90 @@ msgstr "Die Sprache konnte nicht gespeichert werden"
msgid "Restart Proton Drive to use the new language"
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"
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"
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?"
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
msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr ""
"„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"
msgstr "Später"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Jetzt neu starten"
#. 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
msgid "{size} used"
msgstr "{size} belegt"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
msgstr "Proton Drive getrennt"
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"Der Proton-Drive-Dienst wurde beendet. Dateien sind erst nach seinem "
"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"
msgstr "Synchronisierung abgeschlossen"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title} – {done} von {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} – {detail} ({done} von {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title} …"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title} – {detail} …"
@@ -5085,7 +5157,7 @@ msgstr "{title} – {detail} …"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Sitzung abgelaufen"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"Entsperren Sie Ihren Schlüsselbund, sonst werden Sie beim nächsten Neustart "
"abgemeldet"
#: crates/pdfs-gui/src/app/pages/status.rs:1431
#: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating"
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"
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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · wird {time} fortgesetzt"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {time}"
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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} Änderung erfordert 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
msgctxt "state"
msgid "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"
msgstr "Nur zwischengespeicherte Dateien"
#: crates/pdfs-gui/src/app/pages/status.rs:1480
#: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state"
msgid "Syncing"
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"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "Proton Drive braucht zu lange für eine Antwort"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "später"
#. 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"
msgstr "um %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "am %a um %H:%M"
#. 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"
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"
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”."
msgstr ""
"Mit einem Rechtsklick auf eine Datei oder einen Ordner „Offline verfügbar“ "
"auswählen."
#: crates/pdfs-gui/src/app/pages/status.rs:1634
#: crates/pdfs-gui/src/app/pages/status.rs:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Weniger anzeigen"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6317,37 +6397,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "Nur online"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} Upload 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
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} Änderung 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
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} Upload"
msgstr[1] "{n} Uploads"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} in der Warteschlange"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6482,10 +6562,6 @@ msgstr "Proton Drive öffnen"
msgid "Restart Proton Drive"
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
msgid "Resume Sync"
msgstr "Synchronisierung fortsetzen"
@@ -6819,9 +6895,6 @@ msgstr "Proton-Drive-Hintergrunddienst nicht erreichbar: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Freigabe beenden?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Ordner für den Einhängepunkt auswählen"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Einhängepunkt konnte nicht gespeichert werden"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: English (United Kingdom)\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y, %H:%M"
msgid "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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "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:484
msgid "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
msgid "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:493
msgid "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
msgid "Trash"
msgstr "Trash"
#. 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"
msgstr "Sync"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -149,23 +149,23 @@ msgstr ""
"Unofficial client — not affiliated with, endorsed by, or supported by Proton "
"AG."
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "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"
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"
msgstr "Proton Privacy Policy"
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr "Disclaimer"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"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 "
"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 ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -197,7 +197,7 @@ msgstr ""
"\">GeoNames</a>, licensed under <a href=\"https://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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"public domain."
#: crates/pdfs-gui/src/app/main.rs:1393
#: crates/pdfs-gui/src/app/main.rs:1397
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Stop Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -239,7 +239,7 @@ msgstr ""
"My files goes offline and nothing syncs until you connect again. Proton "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -274,30 +274,30 @@ msgstr ""
msgid "Cancel"
msgstr "Cancel"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "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"
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."
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
msgid "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
msgid "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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -306,43 +306,43 @@ msgstr "Search Drive"
msgid "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
msgid "Preferences"
msgstr "Preferences"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Keyboard shortcuts"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "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
msgid "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
msgid "Upload files"
msgstr "Upload files"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "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
msgid "Parent folder"
msgstr "Parent folder"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -351,7 +351,7 @@ msgstr "Grid / list"
msgid "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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -361,70 +361,83 @@ msgstr "Rename"
msgid "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"
msgstr "Clear the selection"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Larger thumbnails"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "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"
msgstr "Reset thumbnail size"
#: crates/pdfs-gui/src/app/main.rs:1533
#: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all"
msgstr "Select all"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "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"
msgstr "Previous / next photo"
#: crates/pdfs-gui/src/app/main.rs:1540
#: crates/pdfs-gui/src/app/main.rs:1544
msgid "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"
msgstr "Show details"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "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."
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"
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
msgid ""
"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 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/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
msgid "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."
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
msgctxt "activity filter"
msgid "All"
@@ -650,7 +698,7 @@ msgstr[0] "Created {n} folder"
msgstr[1] "Created {n} folders"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1570,7 +1618,7 @@ msgid "Make available offline"
msgstr "Make available offline"
#: 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"
msgstr "Make online only"
@@ -2162,7 +2210,7 @@ msgid "No files or folders match that search."
msgstr "No files or folders match that search."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248
#: crates/pdfs-gui/src/i18n.rs:252
#, rust-format
msgid "{n} file"
msgid_plural "{n} files"
@@ -2893,7 +2941,7 @@ msgid "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/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"
msgstr "Sync paused"
@@ -4890,65 +4938,88 @@ msgstr "Couldn't save the language"
msgid "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"
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"
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?"
msgstr "Restart Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840
#: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format
msgid "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"
msgstr "Later"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Restart Now"
#. 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
msgid "{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
msgid "{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"
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."
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"
msgstr "Proton Drive disconnected"
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"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"
msgstr "Sync complete"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title} — {done} of {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} of {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title} — {detail}…"
@@ -4986,7 +5057,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{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
msgid "{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
msgid "{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"
msgstr "Session expired"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{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"
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"
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"
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"
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"
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
msgid "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
msgid "{queued} · resumes {time}"
msgstr "{queued} · resumes {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} change needs 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
msgctxt "state"
msgid "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"
msgstr "Cached files only"
#: crates/pdfs-gui/src/app/pages/status.rs:1480
#: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state"
msgid "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"
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
msgid "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"
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"
msgstr "Proton Drive is taking too long to answer"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "later"
#. 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"
msgstr "at %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a %H:%M"
#. 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"
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"
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”."
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:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "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"
msgstr "Show fewer"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6192,37 +6271,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "Online only"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} upload queued"
msgstr[1] "{n} uploads queued"
#: crates/pdfs-gui/src/i18n.rs:184
#: crates/pdfs-gui/src/i18n.rs:188
#, rust-format
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} change queued"
msgstr[1] "{n} changes queued"
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} upload"
msgstr[1] "{n} uploads"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} queued"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6357,10 +6436,6 @@ msgstr "Open Proton Drive"
msgid "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
msgid "Resume Sync"
msgstr "Resume Sync"
@@ -6688,9 +6763,6 @@ msgstr "cannot reach the Proton Drive daemon: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Stop sharing?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Choose mountpoint folder"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Couldn't save mountpoint"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Spanish\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d de %B de %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "Computers"
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
msgid "Trash"
msgstr "Papelera"
#. 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"
msgstr "Sincronización"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -149,23 +149,23 @@ msgstr ""
"Cliente no oficial: no está afiliado a Proton AG, ni respaldado ni mantenido "
"por esta."
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code"
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"
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"
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"
msgstr "Aviso legal"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"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 "
"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 ""
"Places are named with data from <a href=\"https://www.geonames.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://"
"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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"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 ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "¿Detener Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"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 "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -276,30 +276,30 @@ msgstr ""
msgid "Cancel"
msgstr "Cancelar"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr "Detener"
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop 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."
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
msgid "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
msgid "Search 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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -308,43 +308,43 @@ msgstr "Buscar en Drive"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Preferencias"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Atajos del teclado"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr "Subir archivos"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr "Carpeta superior"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -353,7 +353,7 @@ msgstr "Cuadrícula / lista"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -363,70 +363,83 @@ msgstr "Renombrar"
msgid "Move to Trash"
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"
msgstr "Anular la selección"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Miniaturas más grandes"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
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"
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"
msgstr "Seleccionar todo"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Visor de fotos"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
msgstr "Foto anterior / siguiente"
#: crates/pdfs-gui/src/app/main.rs:1540
#: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo"
msgstr "Primera / última foto"
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr "Mostrar detalles"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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 "
"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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -655,7 +703,7 @@ msgstr[0] "Se creó {n} carpeta"
msgstr[1] "Se crearon {n} carpetas"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1576,7 +1624,7 @@ msgid "Make available offline"
msgstr "Hacer disponible sin conexión"
#: 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"
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."
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2915,7 +2963,7 @@ msgid "Sync paused until you resume"
msgstr "Sincronización en pausa hasta que la reanude"
#: 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"
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"
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"
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"
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?"
msgstr "¿Reiniciar Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840
#: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts."
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"
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"
msgstr "Reiniciar ahora"
#. 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
msgid "{size} used"
msgstr "{size} usados"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
msgstr "Proton Drive desconectado"
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"El servicio de Proton Drive se detuvo. Los archivos no estarán disponibles "
"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"
msgstr "Sincronización completada"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title}: {done} de {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title}: {detail} ({done} de {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title}: {detail}…"
@@ -5045,7 +5116,7 @@ msgstr "{title}: {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Sesión caducada"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"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"
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"
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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · se reanuda {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} cambio requiere 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
msgctxt "state"
msgid "Offline"
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"
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"
msgid "Syncing"
msgstr "Sincronizando"
#: crates/pdfs-gui/src/app/pages/status.rs:1486
#: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "Proton Drive está tardando demasiado en responder"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "más tarde"
#. 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"
msgstr "a las %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a %H:%M"
#. 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"
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"
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”."
msgstr ""
"Pulse con el botón derecho en un archivo o una carpeta y elija “Disponible "
"sin conexión”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634
#: crates/pdfs-gui/src/app/pages/status.rs:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Mostrar menos"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6273,37 +6352,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "Solo en línea"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} subida en cola"
msgstr[1] "{n} subidas en cola"
#: crates/pdfs-gui/src/i18n.rs:184
#: crates/pdfs-gui/src/i18n.rs:188
#, rust-format
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} cambio en cola"
msgstr[1] "{n} cambios en cola"
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} subida"
msgstr[1] "{n} subidas"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads} y {changes} en cola"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6438,10 +6517,6 @@ msgstr "Abrir Proton Drive"
msgid "Restart 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
msgid "Resume Sync"
msgstr "Reanudar la sincronización"
@@ -6774,9 +6849,6 @@ msgstr "no se puede contactar con el demonio de Proton Drive: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "¿Dejar de compartir?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Elegir la carpeta del punto de montaje"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "No se pudo guardar el punto de montaje"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: French\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y à %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y à %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "Computers"
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
msgid "Trash"
msgstr "Corbeille"
#. 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"
msgstr "Synchronisation"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -149,23 +149,23 @@ msgstr ""
"Client non officiel — non affilié à Proton AG, ni approuvé ni pris en charge "
"par Proton AG."
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code"
msgstr "Code source"
#: crates/pdfs-gui/src/app/main.rs:1356
#: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service"
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"
msgstr "Politique de confidentialité de Proton"
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr "Avertissement"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"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 "
"perdre."
#: crates/pdfs-gui/src/app/main.rs:1377
#: crates/pdfs-gui/src/app/main.rs:1381
msgid ""
"Places are named with data from <a href=\"https://www.geonames.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://"
"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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"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 ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Arrêter Proton Drive ?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -243,7 +243,7 @@ msgstr ""
"vous reconnectez pas. Proton Drive redémarrera à votre prochaine ouverture "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -278,30 +278,30 @@ msgstr ""
msgid "Cancel"
msgstr "Annuler"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
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"
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."
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
msgid "General"
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
msgid "Search 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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -310,43 +310,43 @@ msgstr "Rechercher dans Drive"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Préférences"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Raccourcis clavier"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
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"
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
msgid "Parent folder"
msgstr "Dossier parent"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -355,7 +355,7 @@ msgstr "Grille / liste"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -365,70 +365,83 @@ msgstr "Renommer"
msgid "Move to Trash"
msgstr "Mettre à la corbeille"
#: crates/pdfs-gui/src/app/main.rs:1524
#: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection"
msgstr "Effacer la sélection"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Miniatures plus grandes"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr "Miniatures plus petites"
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
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"
msgstr "Tout sélectionner"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Visionneuse de photos"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
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"
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"
msgstr "Afficher les détails"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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. "
"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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -658,7 +706,7 @@ msgstr[0] "{n} dossier créé"
msgstr[1] "{n} dossiers créés"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1587,7 +1635,7 @@ msgid "Make available offline"
msgstr "Rendre disponible hors ligne"
#: 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"
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."
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2932,7 +2980,7 @@ msgid "Sync paused until you resume"
msgstr "Synchronisation en pause jusqu’à la reprise"
#: 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"
msgstr "Synchronisation en pause"
@@ -4987,68 +5035,91 @@ msgstr "Impossible d’enregistrer la langue"
msgid "Restart Proton Drive to use the new language"
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"
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"
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?"
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
msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr ""
"« Mes fichiers » apparaîtra dans « {path} » après le redémarrage de Proton "
"Drive."
#: crates/pdfs-gui/src/app/pages/status.rs:844
#: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later"
msgstr "Plus tard"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Redémarrer maintenant"
#. 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
msgid "{size} used"
msgstr "{size} utilisés"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
msgstr "Proton Drive déconnecté"
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"Le service Proton Drive s’est arrêté. Les fichiers ne sont pas disponibles "
"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"
msgstr "Synchronisation terminée"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title} — {done} sur {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} sur {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title} — {detail}…"
@@ -5086,7 +5157,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Session expirée"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"Déverrouillez votre trousseau, sinon le prochain redémarrage vous "
"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"
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"
msgstr ""
"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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · reprise {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} modification requiert 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
msgctxt "state"
msgid "Offline"
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"
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"
msgid "Syncing"
msgstr "Synchronisation"
#: crates/pdfs-gui/src/app/pages/status.rs:1486
#: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "Proton Drive met trop de temps à répondre"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "plus tard"
#. 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"
msgstr "à %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a %H:%M"
#. 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"
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"
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”."
msgstr ""
"Faites un clic droit sur un fichier ou un dossier et choisissez « Disponible "
"hors ligne »."
#: crates/pdfs-gui/src/app/pages/status.rs:1634
#: crates/pdfs-gui/src/app/pages/status.rs:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Afficher moins"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6321,37 +6400,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "En ligne uniquement"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} téléversement 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
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} modification en attente"
msgstr[1] "{n} modifications en attente"
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} téléversement"
msgstr[1] "{n} téléversements"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads} et {changes} en attente"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6486,10 +6565,6 @@ msgstr "Ouvrir Proton Drive"
msgid "Restart 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
msgid "Resume Sync"
msgstr "Reprendre la synchronisation"
@@ -6823,9 +6898,6 @@ msgstr "impossible de joindre le démon Proton Drive : {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Arrêter le partage ?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Choisir le dossier du point de montage"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Impossible d’enregistrer le point de montage"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Italian\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y, %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with 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
msgid "Shared by 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:493
msgid "Computers"
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
msgid "Trash"
msgstr "Cestino"
#. 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"
msgstr "Sincronizzazione"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -148,23 +148,23 @@ msgstr ""
"\n"
"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"
msgstr "Codice sorgente"
#: crates/pdfs-gui/src/app/main.rs:1356
#: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service"
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"
msgstr "Informativa sulla privacy di Proton"
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr "Esclusione di responsabilità"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n"
@@ -187,7 +187,7 @@ msgstr ""
"Questo software è fornito “così com’è”, senza alcuna garanzia. Conserva una "
"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 ""
"Places are named with data from <a href=\"https://www.geonames.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/"
"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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"Earth</a>, che sono di pubblico dominio."
#: crates/pdfs-gui/src/app/main.rs:1393
#: crates/pdfs-gui/src/app/main.rs:1397
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Arrestare Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -239,7 +239,7 @@ msgstr ""
"I miei file andranno offline e nulla verrà sincronizzato finché non ti "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -274,30 +274,30 @@ msgstr ""
msgid "Cancel"
msgstr "Annulla"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr "Arresta"
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop 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."
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
msgid "General"
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
msgid "Search 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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -306,43 +306,43 @@ msgstr "Cerca in Drive"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Preferenze"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Scorciatoie da tastiera"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr "Carica file"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr "Cartella superiore"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -351,7 +351,7 @@ msgstr "Griglia / elenco"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -361,70 +361,83 @@ msgstr "Rinomina"
msgid "Move to Trash"
msgstr "Sposta nel cestino"
#: crates/pdfs-gui/src/app/main.rs:1524
#: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection"
msgstr "Annulla la selezione"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Miniature più grandi"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr "Miniature più piccole"
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
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"
msgstr "Seleziona tutto"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Visualizzatore di foto"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
msgstr "Foto precedente / successiva"
#: crates/pdfs-gui/src/app/main.rs:1540
#: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo"
msgstr "Prima / ultima foto"
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr "Mostra dettagli"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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 "
"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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -654,7 +702,7 @@ msgstr[0] "Creata {n} cartella"
msgstr[1] "Create {n} cartelle"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1581,7 +1629,7 @@ msgid "Make available offline"
msgstr "Rendi disponibile offline"
#: 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"
msgstr "Rendi solo online"
@@ -2181,7 +2229,7 @@ msgid "No files or folders match that search."
msgstr "Nessun file o cartella corrisponde alla ricerca."
#: crates/pdfs-gui/src/app/pages/browser.rs:3096
#: crates/pdfs-gui/src/i18n.rs:248
#: crates/pdfs-gui/src/i18n.rs:252
#, rust-format
msgid "{n} file"
msgid_plural "{n} files"
@@ -2930,7 +2978,7 @@ msgid "Sync paused until you resume"
msgstr "Sincronizzazione in pausa finché non riprendi"
#: 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"
msgstr "Sincronizzazione in pausa"
@@ -4967,66 +5015,89 @@ msgstr "Impossibile salvare la lingua"
msgid "Restart Proton Drive to use the new language"
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"
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"
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?"
msgstr "Riavviare Proton Drive?"
#: crates/pdfs-gui/src/app/pages/status.rs:840
#: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts."
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"
msgstr "Più tardi"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Riavvia ora"
#. 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
msgid "{size} used"
msgstr "{size} utilizzati"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
msgstr "Proton Drive disconnesso"
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"Il servizio di Proton Drive si è arrestato. I file non sono disponibili "
"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"
msgstr "Sincronizzazione completata"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title}: {done} di {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title}: {detail} ({done} di {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title}: {detail}…"
@@ -5064,7 +5135,7 @@ msgstr "{title}: {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Sessione scaduta"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"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"
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"
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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · riprende {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} modifica richiede 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
msgctxt "state"
msgid "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"
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"
msgid "Syncing"
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"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "Proton Drive impiega troppo tempo a rispondere"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "più tardi"
#. 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"
msgstr "alle %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a %H:%M"
#. 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"
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"
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”."
msgstr ""
"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:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Mostra meno"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6297,37 +6376,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "Solo online"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} caricamento in coda"
msgstr[1] "{n} caricamenti in coda"
#: crates/pdfs-gui/src/i18n.rs:184
#: crates/pdfs-gui/src/i18n.rs:188
#, rust-format
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} modifica in coda"
msgstr[1] "{n} modifiche in coda"
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} caricamento"
msgstr[1] "{n} caricamenti"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} in coda"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6462,10 +6541,6 @@ msgstr "Apri Proton Drive"
msgid "Restart 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
msgid "Resume Sync"
msgstr "Riprendi sincronizzazione"
@@ -6795,9 +6870,6 @@ msgstr "impossibile raggiungere il demone di Proton Drive: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Interrompere la condivisione?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Scegli la cartella del punto di montaggio"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Impossibile salvare il punto di montaggio"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Dutch\n"
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A %-d %B %Y, %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "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
msgid "Trash"
msgstr "Prullenbak"
#. 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"
msgstr "Synchronisatie"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -149,23 +149,23 @@ msgstr ""
"Onofficiële client — niet gelieerd aan, onderschreven door of ondersteund "
"door Proton AG."
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code"
msgstr "Broncode"
#: crates/pdfs-gui/src/app/main.rs:1356
#: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service"
msgstr "Servicevoorwaarden van Proton"
#: crates/pdfs-gui/src/app/main.rs:1360
#: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy"
msgstr "Privacybeleid van Proton"
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr "Disclaimer"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n"
@@ -188,7 +188,7 @@ msgstr ""
"Deze software wordt geleverd “zoals ze is”, zonder enige garantie. Bewaar "
"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 ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -198,7 +198,7 @@ msgstr ""
"\">GeoNames</a>, gelicentieerd onder <a href=\"https://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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"publieke domein vallen."
#: crates/pdfs-gui/src/app/main.rs:1393
#: crates/pdfs-gui/src/app/main.rs:1397
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Proton Drive stoppen?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -240,7 +240,7 @@ msgstr ""
"Mijn bestanden gaat offline en er wordt niets gesynchroniseerd tot je weer "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -275,30 +275,30 @@ msgstr ""
msgid "Cancel"
msgstr "Annuleren"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr "Stoppen"
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive"
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."
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
msgid "General"
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
msgid "Search Drive"
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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -307,43 +307,43 @@ msgstr "Drive doorzoeken"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Voorkeuren"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Sneltoetsen"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr "Bestanden uploaden"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr "Bovenliggende map"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -352,7 +352,7 @@ msgstr "Raster / lijst"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -362,70 +362,83 @@ msgstr "Hernoemen"
msgid "Move to Trash"
msgstr "Naar prullenbak verplaatsen"
#: crates/pdfs-gui/src/app/main.rs:1524
#: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection"
msgstr "Selectie wissen"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Grotere miniaturen"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr "Kleinere miniaturen"
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
msgstr "Miniatuurgrootte herstellen"
#: crates/pdfs-gui/src/app/main.rs:1533
#: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all"
msgstr "Alles selecteren"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Fotoweergave"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
msgstr "Vorige / volgende foto"
#: crates/pdfs-gui/src/app/main.rs:1540
#: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo"
msgstr "Eerste / laatste foto"
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr "Details tonen"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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 "
"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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -655,7 +703,7 @@ msgstr[0] "{n} map aangemaakt"
msgstr[1] "{n} mappen aangemaakt"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1577,7 +1625,7 @@ msgid "Make available offline"
msgstr "Offline beschikbaar maken"
#: 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"
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."
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2920,7 +2968,7 @@ msgid "Sync paused until you resume"
msgstr "Synchronisatie gepauzeerd totdat je hervat"
#: 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"
msgstr "Synchronisatie gepauzeerd"
@@ -4960,67 +5008,90 @@ msgstr "Kon de taal niet opslaan"
msgid "Restart Proton Drive to use the new language"
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"
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"
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?"
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
msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr ""
"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"
msgstr "Later"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Nu opnieuw starten"
#. 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
msgid "{size} used"
msgstr "{size} gebruikt"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
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 ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"De Proton Drive-service is gestopt. Bestanden zijn pas weer beschikbaar als "
"hij opnieuw start."
#: crates/pdfs-gui/src/app/pages/status.rs:1099
#: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete"
msgstr "Synchronisatie voltooid"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title} — {done} van {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} van {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title} — {detail}…"
@@ -5058,7 +5129,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Sessie verlopen"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"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"
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"
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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · hervat {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} wijziging vereist 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
msgctxt "state"
msgid "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"
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"
msgid "Syncing"
msgstr "Synchroniseren"
#: crates/pdfs-gui/src/app/pages/status.rs:1486
#: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "Proton Drive doet er te lang over om te antwoorden"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "later"
#. 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"
msgstr "om %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a %H:%M"
#. 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"
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"
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”."
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:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Minder tonen"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6283,37 +6362,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "Alleen online"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} upload in wachtrij"
msgstr[1] "{n} uploads in wachtrij"
#: crates/pdfs-gui/src/i18n.rs:184
#: crates/pdfs-gui/src/i18n.rs:188
#, rust-format
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} wijziging in wachtrij"
msgstr[1] "{n} wijzigingen in wachtrij"
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} upload"
msgstr[1] "{n} uploads"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} in wachtrij"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6448,10 +6527,6 @@ msgstr "Proton Drive openen"
msgid "Restart Proton Drive"
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
msgid "Resume Sync"
msgstr "Synchronisatie hervatten"
@@ -6782,9 +6857,6 @@ msgstr "kan de achtergronddienst van Proton Drive niet bereiken: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Delen stoppen?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Map voor koppelpunt kiezen"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Kon koppelpunt niet opslaan"
+193 -131
View File
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
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"
"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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,7 +60,7 @@ msgstr ""
msgid "%A, %B %-d, %Y, %H:%M"
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/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -73,74 +73,74 @@ msgstr ""
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "Computers"
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
msgid "Trash"
msgstr ""
#. 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"
msgstr ""
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{what}: {detail}"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1248
#: crates/pdfs-gui/src/app/main.rs:1252
msgid "You're offline"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1249
#: crates/pdfs-gui/src/app/main.rs:1253
msgid "That's not there any more"
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"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1251
#: crates/pdfs-gui/src/app/main.rs:1255
msgid "Something changed this first"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1252
#: crates/pdfs-gui/src/app/main.rs:1256
msgid "Your Proton Drive is full"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1339
#: crates/pdfs-gui/src/app/main.rs:1343
msgid "Proton Drive for Linux"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -148,23 +148,23 @@ msgid ""
"AG."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1356
#: crates/pdfs-gui/src/app/main.rs:1360
msgid "Proton Terms of Service"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1360
#: crates/pdfs-gui/src/app/main.rs:1364
msgid "Proton Privacy Policy"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n"
@@ -177,21 +177,21 @@ msgid ""
"of any data you cannot afford to lose."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1377
#: crates/pdfs-gui/src/app/main.rs:1381
msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1385
#: crates/pdfs-gui/src/app/main.rs:1389
msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the "
"public domain."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1393
#: crates/pdfs-gui/src/app/main.rs:1397
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1448
#: crates/pdfs-gui/src/app/main.rs:1452
msgid "Stop Proton Drive?"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -251,30 +251,30 @@ msgstr ""
msgid "Cancel"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop Proton Drive"
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."
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
msgid "General"
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
msgid "Search Drive"
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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -283,43 +283,43 @@ msgstr ""
msgid "Refresh"
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
msgid "Preferences"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -328,7 +328,7 @@ msgstr ""
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -338,87 +338,126 @@ msgstr ""
msgid "Move to Trash"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1524
#: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1533
#: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1540
#: crates/pdfs-gui/src/app/main.rs:1544
msgid "First / last photo"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"The Proton Drive service keeps failing to start and tries again on its own. "
"The last error was: {error}"
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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -623,7 +662,7 @@ msgstr[0] ""
msgstr[1] ""
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1533,7 +1572,7 @@ msgid "Make available offline"
msgstr ""
#: 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"
msgstr ""
@@ -2125,7 +2164,7 @@ msgid "No files or folders match that search."
msgstr ""
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2810,7 +2849,7 @@ msgid "Sync paused until you resume"
msgstr ""
#: 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"
msgstr ""
@@ -4737,64 +4776,83 @@ msgstr ""
msgid "Restart Proton Drive to use the new language"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:813
#: crates/pdfs-gui/src/app/pages/status.rs:814
msgid "Choose Proton Drive Folder"
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"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:837
#: crates/pdfs-gui/src/app/pages/status.rs:882
msgid "Restart Proton Drive?"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:840
#: crates/pdfs-gui/src/app/pages/status.rs:885
#, rust-format
msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:844
#: crates/pdfs-gui/src/app/pages/status.rs:889
msgid "Later"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr ""
#. 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
msgid "{size} used"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({percent}%)"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1023
#: crates/pdfs-gui/src/app/pages/status.rs:1067
msgid "Proton Drive connected"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1024
#: crates/pdfs-gui/src/app/pages/status.rs:1068
msgid "Your files are available."
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1029
#: crates/pdfs-gui/src/app/pages/status.rs:1073
msgid "Proton Drive disconnected"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1099
#: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr ""
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr ""
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr ""
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr ""
@@ -4832,7 +4890,7 @@ msgstr ""
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} ({speed}/s)"
msgstr ""
@@ -4840,151 +4898,159 @@ msgstr ""
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1325
#: crates/pdfs-gui/src/app/pages/status.rs:1369
#, rust-format
msgid "{used} cached — no limit set"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1331
#: crates/pdfs-gui/src/app/pages/status.rs:1375
#, rust-format
msgid "{used} of {limit} used"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1410
#: crates/pdfs-gui/src/app/pages/status.rs:1489
msgid "Session expired"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1423
#: crates/pdfs-gui/src/app/pages/status.rs:1502
msgid "Sign-in not saved"
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"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1431
#: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating"
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"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1437
#: crates/pdfs-gui/src/app/pages/status.rs:1516
#, rust-format
msgid "Proton Drive {version} is still running"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1450
#: crates/pdfs-gui/src/app/pages/status.rs:1529
#, rust-format
msgid "{queued} · resumes {time}"
msgstr ""
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {time}"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1457
#: crates/pdfs-gui/src/app/pages/status.rs:1536
msgid "Until you resume"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] ""
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
msgctxt "state"
msgid "Offline"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1475
#: crates/pdfs-gui/src/app/pages/status.rs:1554
msgid "Cached files only"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1480
#: crates/pdfs-gui/src/app/pages/status.rs:1559
msgctxt "state"
msgid "Syncing"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1486
#: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr ""
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr ""
#. 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"
msgstr ""
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr ""
#. 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"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1580
#: crates/pdfs-gui/src/app/pages/status.rs:1669
msgid "No files kept offline"
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”."
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1634
#: crates/pdfs-gui/src/app/pages/status.rs:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1658
#: crates/pdfs-gui/src/app/pages/status.rs:1747
msgid "Show fewer"
msgstr ""
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6015,37 +6081,37 @@ msgctxt "file state"
msgid "Online only"
msgstr ""
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr ""
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] ""
msgstr[1] ""
#: crates/pdfs-gui/src/i18n.rs:184
#: crates/pdfs-gui/src/i18n.rs:188
#, rust-format
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] ""
msgstr[1] ""
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] ""
msgstr[1] ""
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr ""
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6180,10 +6246,6 @@ msgstr ""
msgid "Restart Proton Drive"
msgstr ""
#: crates/pdfs-gui/src/main.rs:500
msgid "Open Folder"
msgstr ""
#: crates/pdfs-gui/src/main.rs:512
msgid "Resume Sync"
msgstr ""
+212 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Polish\n"
@@ -59,7 +59,7 @@ msgstr "%-d %b %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d %B %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -72,74 +72,74 @@ msgstr "%A, %-d %B %Y, %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "Computers"
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
msgid "Trash"
msgstr "Kosz"
#. 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"
msgstr "Synchronizacja"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -151,23 +151,23 @@ msgstr ""
"Nieoficjalny klient — niepowiązany z Proton AG, niepopierany ani "
"niewspierany przez tę firmę."
#: crates/pdfs-gui/src/app/main.rs:1352
#: crates/pdfs-gui/src/app/main.rs:1356
msgid "Source Code"
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"
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"
msgstr "Polityka prywatności Proton"
#: crates/pdfs-gui/src/app/main.rs:1365
#: crates/pdfs-gui/src/app/main.rs:1369
msgid "Disclaimer"
msgstr "Zastrzeżenia"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"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 "
"pozwolić."
#: crates/pdfs-gui/src/app/main.rs:1377
#: crates/pdfs-gui/src/app/main.rs:1381
msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -201,7 +201,7 @@ msgstr ""
"\">GeoNames</a> udostępnionych na licencji <a href=\"https://"
"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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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 "
"publicznej."
#: crates/pdfs-gui/src/app/main.rs:1393
#: crates/pdfs-gui/src/app/main.rs:1397
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Zatrzymać Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -244,7 +244,7 @@ msgstr ""
"ponownego połączenia. Proton Drive uruchomi się ponownie przy następnym "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -279,30 +279,30 @@ msgstr ""
msgid "Cancel"
msgstr "Anuluj"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr "Zatrzymaj"
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop 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."
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
msgid "General"
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
msgid "Search 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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -311,43 +311,43 @@ msgstr "Przeszukaj Drive"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Preferencje"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Skróty klawiszowe"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr "Wyślij pliki"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr "Katalog nadrzędny"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -356,7 +356,7 @@ msgstr "Siatka/lista"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -366,70 +366,83 @@ msgstr "Zmień nazwę"
msgid "Move to Trash"
msgstr "Przenieś do kosza"
#: crates/pdfs-gui/src/app/main.rs:1524
#: crates/pdfs-gui/src/app/main.rs:1528
msgid "Clear the selection"
msgstr "Wyczyść zaznaczenie"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Większe miniatury"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr "Mniejsze miniatury"
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
msgstr "Przywróć rozmiar miniatur"
#: crates/pdfs-gui/src/app/main.rs:1533
#: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all"
msgstr "Zaznacz wszystko"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Przeglądarka zdjęć"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
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"
msgstr "Pierwsze/ostatnie zdjęcie"
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr "Wyświetl szczegóły"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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 "
"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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -671,7 +723,7 @@ msgstr[1] "Utworzono {n} katalogi"
msgstr[2] "Utworzono {n} katalogów"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1613,7 +1665,7 @@ msgid "Make available offline"
msgstr "Oznacz jako dostępne offline"
#: 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"
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."
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2986,7 +3038,7 @@ msgid "Sync paused until you resume"
msgstr "Wstrzymano synchronizację do czasu wznowienia"
#: 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"
msgstr "Wstrzymano synchronizację"
@@ -5039,67 +5091,93 @@ msgstr "Nie można zapisać języka"
msgid "Restart Proton Drive to use the new language"
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"
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"
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?"
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
msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr ""
"„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"
msgstr "Później"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Uruchom ponownie teraz"
#. 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
msgid "{size} used"
msgstr "Użyto {size}"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
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 ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"Usługa Proton Drive zatrzymała się. Pliki będą niedostępne do jej ponownego "
"uruchomienia."
#: crates/pdfs-gui/src/app/pages/status.rs:1099
#: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete"
msgstr "Ukończono synchronizację"
#: crates/pdfs-gui/src/app/pages/status.rs:1101
#: crates/pdfs-gui/src/app/pages/status.rs:1145
#, rust-format
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title} — {done} z {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} z {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title} — {detail}…"
@@ -5138,7 +5216,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Sesja wygasła"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"Odblokuj bazę kluczy, inaczej następne ponowne uruchomienie spowoduje "
"wylogowanie"
#: crates/pdfs-gui/src/app/pages/status.rs:1431
#: crates/pdfs-gui/src/app/pages/status.rs:1510
msgid "Restart to finish updating"
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"
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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · wznowienie {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
@@ -5221,81 +5299,89 @@ msgstr[0] "{n} zmiana wymaga uwagi"
msgstr[1] "{n} zmiany wymagają 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
msgctxt "state"
msgid "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"
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"
msgid "Syncing"
msgstr "Synchronizowanie"
#: crates/pdfs-gui/src/app/pages/status.rs:1486
#: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "Proton Drive zbyt długo nie odpowiada"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "później"
#. 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"
msgstr "o %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a %H:%M"
#. 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"
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"
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”."
msgstr ""
"Należy kliknąć plik lub katalog prawym przyciskiem myszy i wybrać „Dostępne "
"offline”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634
#: crates/pdfs-gui/src/app/pages/status.rs:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Wyświetl mniej"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6380,11 +6466,11 @@ msgctxt "file state"
msgid "Online only"
msgstr "Tylko online"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosowo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload 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[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
msgid "{n} change queued"
msgid_plural "{n} changes queued"
@@ -6400,7 +6486,7 @@ msgstr[0] "{n} zmiana w kolejce"
msgstr[1] "{n} zmiany w kolejce"
msgstr[2] "{n} zmian w kolejce"
#: crates/pdfs-gui/src/i18n.rs:190
#: crates/pdfs-gui/src/i18n.rs:194
#, rust-format
msgid "{n} upload"
msgid_plural "{n} uploads"
@@ -6408,12 +6494,12 @@ msgstr[0] "{n} plik do wysłania"
msgstr[1] "{n} pliki 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
msgid "{uploads}, {changes} queued"
msgstr "W kolejce: {uploads}, {changes}"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6555,10 +6641,6 @@ msgstr "Otwórz Proton Drive"
msgid "Restart 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
msgid "Resume Sync"
msgstr "Wznów synchronizację"
@@ -6889,9 +6971,6 @@ msgstr "nie można połączyć się z usługą Proton Drive: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Zakończyć udostępnianie?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Wybór katalogu punktu montowania"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Nie można zapisać punktu montowania"
+205 -133
View File
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 2.1.0\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-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"
"Last-Translator: Proton Drive for Linux contributors\n"
"Language-Team: Portuguese (Brazil)\n"
@@ -57,7 +57,7 @@ msgstr "%-d de %b de %Y"
msgid "%A, %B %-d, %Y, %H:%M"
msgstr "%A, %-d de %B de %Y, %H:%M"
#: crates/pdfs-gui/src/app/main.rs:856
#: crates/pdfs-gui/src/app/main.rs:860
#: crates/pdfs-gui/src/app/pages/activity_text.rs:543
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:833
@@ -70,74 +70,74 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
msgid "My files"
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/photos.rs:845
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
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:484
msgid "Shared with me"
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
msgid "Shared by me"
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:493
msgid "Computers"
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
msgid "Trash"
msgstr "Lixeira"
#. 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"
msgstr "Sincronização"
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. 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
#, rust-format
msgid "{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"
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"
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"
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"
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"
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"
msgstr "Proton Drive for Linux"
#: crates/pdfs-gui/src/app/main.rs:1347
#: crates/pdfs-gui/src/app/main.rs:1351
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -148,23 +148,23 @@ msgstr ""
"\n"
"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"
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"
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"
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"
msgstr "Aviso legal"
#: crates/pdfs-gui/src/app/main.rs:1369
#: crates/pdfs-gui/src/app/main.rs:1373
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"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 "
"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 ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
@@ -197,7 +197,7 @@ msgstr ""
"\">GeoNames</a>, licenciados sob <a href=\"https://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 ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">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/"
"\">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 ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
#. 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"
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?"
msgstr "Parar o Proton Drive?"
#: crates/pdfs-gui/src/app/main.rs:1449
#: crates/pdfs-gui/src/app/main.rs:1453
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
@@ -239,7 +239,7 @@ msgstr ""
"Meus arquivos fica offline e nada é sincronizado até você se conectar "
"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:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1917
@@ -274,30 +274,30 @@ msgstr ""
msgid "Cancel"
msgstr "Cancelar"
#: crates/pdfs-gui/src/app/main.rs:1452
#: crates/pdfs-gui/src/app/main.rs:1456
msgctxt "verb"
msgid "Stop"
msgstr "Parar"
#: crates/pdfs-gui/src/app/main.rs:1469
#: crates/pdfs-gui/src/app/main.rs:1473
msgid "Couldn't stop 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."
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
msgid "General"
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
msgid "Search 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/devices.rs:559
#: crates/pdfs-gui/src/app/pages/shared.rs:581
@@ -306,43 +306,43 @@ msgstr "Pesquisar no Drive"
msgid "Refresh"
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
msgid "Preferences"
msgstr "Preferências"
#: crates/pdfs-gui/src/app/main.rs:1511
#: crates/pdfs-gui/src/app/main.rs:1515
msgid "Keyboard shortcuts"
msgstr "Atalhos de teclado"
#: crates/pdfs-gui/src/app/main.rs:1515
#: crates/pdfs-gui/src/app/main.rs:1519
msgid "Files"
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
msgid "New folder"
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
msgid "Upload files"
msgstr "Enviar arquivos"
#: crates/pdfs-gui/src/app/main.rs:1519
#: crates/pdfs-gui/src/app/main.rs:1523
msgid "Back / forward"
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
msgid "Parent folder"
msgstr "Pasta superior"
#: crates/pdfs-gui/src/app/main.rs:1521
#: crates/pdfs-gui/src/app/main.rs:1525
msgid "Grid / list"
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/browser.rs:1896
#: crates/pdfs-gui/src/app/pages/browser.rs:1918
@@ -351,7 +351,7 @@ msgstr "Grade / lista"
msgid "Rename"
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:924
#: crates/pdfs-gui/src/app/pages/browser.rs:959
@@ -361,70 +361,83 @@ msgstr "Renomear"
msgid "Move to Trash"
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"
msgstr "Limpar a seleção"
#: crates/pdfs-gui/src/app/main.rs:1530
#: crates/pdfs-gui/src/app/main.rs:1534
msgid "Larger thumbnails"
msgstr "Miniaturas maiores"
#: crates/pdfs-gui/src/app/main.rs:1531
#: crates/pdfs-gui/src/app/main.rs:1535
msgid "Smaller thumbnails"
msgstr "Miniaturas menores"
#: crates/pdfs-gui/src/app/main.rs:1532
#: crates/pdfs-gui/src/app/main.rs:1536
msgid "Reset thumbnail size"
msgstr "Redefinir tamanho das miniaturas"
#: crates/pdfs-gui/src/app/main.rs:1533
#: crates/pdfs-gui/src/app/main.rs:1537
msgid "Select all"
msgstr "Selecionar tudo"
#: crates/pdfs-gui/src/app/main.rs:1537
#: crates/pdfs-gui/src/app/main.rs:1541
msgid "Photo Viewer"
msgstr "Visualizador de fotos"
#: crates/pdfs-gui/src/app/main.rs:1539
#: crates/pdfs-gui/src/app/main.rs:1543
msgid "Previous / next photo"
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"
msgstr "Primeira / última foto"
#: crates/pdfs-gui/src/app/main.rs:1541
#: crates/pdfs-gui/src/app/main.rs:1545
msgid "Show details"
msgstr "Mostrar detalhes"
#: crates/pdfs-gui/src/app/main.rs:1542
#: crates/pdfs-gui/src/app/main.rs:1546
msgid "Fullscreen"
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"
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"
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/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1492
#: crates/pdfs-gui/src/app/pages/status.rs:1571
msgid "Not connected"
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."
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"
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
msgid ""
"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. "
"Ú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/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
msgid "Connecting…"
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."
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
msgctxt "activity filter"
msgid "All"
@@ -654,7 +702,7 @@ msgstr[0] "{n} pasta criada"
msgstr[1] "{n} pastas criadas"
#: 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
msgid "{n} change"
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:1119
#: 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:618
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:516
@@ -1578,7 +1626,7 @@ msgid "Make available offline"
msgstr "Disponibilizar offline"
#: 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"
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."
#: 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
msgid "{n} file"
msgid_plural "{n} files"
@@ -2916,7 +2964,7 @@ msgid "Sync paused until you resume"
msgstr "Sincronização pausada até você retomar"
#: 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"
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"
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"
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"
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?"
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
msgid "My files now appears in “{path}” after Proton Drive restarts."
msgstr ""
"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"
msgstr "Mais tarde"
#: crates/pdfs-gui/src/app/pages/status.rs:845
#: crates/pdfs-gui/src/app/pages/status.rs:890
msgid "Restart Now"
msgstr "Reiniciar agora"
#. 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
msgid "{size} used"
msgstr "{size} usados"
#: crates/pdfs-gui/src/app/pages/status.rs:983
#: crates/pdfs-gui/src/app/pages/status.rs:1027
#, rust-format
msgid "{used} of {total} used ({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"
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."
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"
msgstr "Proton Drive desconectado"
#: crates/pdfs-gui/src/app/pages/status.rs:1030
#: crates/pdfs-gui/src/app/pages/status.rs:1074
msgid ""
"The Proton Drive service stopped. Files aren't available until it restarts."
msgstr ""
"O serviço do Proton Drive parou. Os arquivos ficarão indisponíveis até ele "
"reiniciar."
#: crates/pdfs-gui/src/app/pages/status.rs:1099
#: crates/pdfs-gui/src/app/pages/status.rs:1143
msgid "Sync complete"
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
msgid "{n} file 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
#. "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
msgid "{title} — {done} of {total}"
msgstr "{title} — {done} de {total}"
#. Translators: a background job's progress. {title} is the job, {detail}
#. 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
msgid "{title} — {detail} ({done} of {total})"
msgstr "{title} — {detail} ({done} de {total})"
#. Translators: a background job still running. {title} is the job.
#. 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
msgid "{title}…"
msgstr "{title}…"
#. Translators: a background job still running. {title} is the job,
#. {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
msgid "{title} — {detail}…"
msgstr "{title} — {detail}…"
@@ -5043,7 +5114,7 @@ msgstr "{title} — {detail}…"
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
#. file name, {done} the size moved so far and {speed} a size such as
#. "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
msgid "{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
#. file name, {done} and {total} sizes and {speed} a size such as
#. "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
msgid "{arrow} {name} — {done} of {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
msgid "{used} cached — no limit set"
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
msgid "{used} of {limit} used"
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"
msgstr "Sessão expirada"
#: crates/pdfs-gui/src/app/pages/status.rs:1415
#: crates/pdfs-gui/src/app/pages/status.rs:1494
#, rust-format
msgid "{queued} · sign in again to sync"
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"
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"
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"
msgstr ""
"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"
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"
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
msgid "Proton Drive {version} is still running"
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
msgid "{queued} · resumes {time}"
msgstr "{queued} · retoma {time}"
#. Translators: {time} is when syncing resumes, such as "at 14:30"
#. or "Tue 09:00".
#: crates/pdfs-gui/src/app/pages/status.rs:1455
#: crates/pdfs-gui/src/app/pages/status.rs:1534
#, rust-format
msgid "Resumes {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"
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
msgid "{n} change needs attention"
msgid_plural "{n} changes need attention"
msgstr[0] "{n} alteração requer 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
msgctxt "state"
msgid "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"
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"
msgid "Syncing"
msgstr "Sincronizando"
#: crates/pdfs-gui/src/app/pages/status.rs:1486
#: crates/pdfs-gui/src/app/pages/status.rs:1565
msgid "Up to date"
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
msgid "Proton Drive isn't running"
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"
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"
msgstr "O Proton Drive está demorando demais para responder"
#. Translators: stands in for a time that could not be read, as in
#. "Resumes later".
#: crates/pdfs-gui/src/app/pages/status.rs:1539
#: crates/pdfs-gui/src/app/pages/status.rs:1554
#: crates/pdfs-gui/src/app/pages/status.rs:1628
#: crates/pdfs-gui/src/app/pages/status.rs:1643
msgid "later"
msgstr "mais tarde"
#. 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"
msgstr "às %H:%M"
#. Translators: strftime format for a time within the next week, such as
#. "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"
msgstr "%a às %H:%M"
#. 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"
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"
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”."
msgstr ""
"Clique com o botão direito em um arquivo ou pasta e escolha “Disponível "
"offline”."
#: crates/pdfs-gui/src/app/pages/status.rs:1634
#: crates/pdfs-gui/src/app/pages/status.rs:1641
#: crates/pdfs-gui/src/app/pages/status.rs:1723
#: crates/pdfs-gui/src/app/pages/status.rs:1730
msgid "Couldn't make it online only"
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"
msgstr "Mostrar menos"
#: crates/pdfs-gui/src/app/pages/status.rs:1661
#: crates/pdfs-gui/src/app/pages/status.rs:1750
#, rust-format
msgid "Show all {n} file"
msgid_plural "Show all {n} files"
@@ -6270,37 +6349,37 @@ msgctxt "file state"
msgid "Online only"
msgstr "Somente online"
#: crates/pdfs-gui/src/i18n.rs:84
#: crates/pdfs-gui/src/i18n.rs:85
msgid "Kosovo"
msgstr "Kosovo"
#: crates/pdfs-gui/src/i18n.rs:178
#: crates/pdfs-gui/src/i18n.rs:182
#, rust-format
msgid "{n} upload queued"
msgid_plural "{n} uploads queued"
msgstr[0] "{n} envio na fila"
msgstr[1] "{n} envios na fila"
#: crates/pdfs-gui/src/i18n.rs:184
#: crates/pdfs-gui/src/i18n.rs:188
#, rust-format
msgid "{n} change queued"
msgid_plural "{n} changes queued"
msgstr[0] "{n} alteração 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
msgid "{n} upload"
msgid_plural "{n} uploads"
msgstr[0] "{n} envio"
msgstr[1] "{n} envios"
#: crates/pdfs-gui/src/i18n.rs:194
#: crates/pdfs-gui/src/i18n.rs:198
#, rust-format
msgid "{uploads}, {changes} queued"
msgstr "{uploads}, {changes} na fila"
#: crates/pdfs-gui/src/i18n.rs:251
#: crates/pdfs-gui/src/i18n.rs:255
#, rust-format
msgid "{n} file in {dir}"
msgid_plural "{n} files in {dir}"
@@ -6435,10 +6514,6 @@ msgstr "Abrir o Proton Drive"
msgid "Restart 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
msgid "Resume Sync"
msgstr "Retomar sincronização"
@@ -6768,9 +6843,6 @@ msgstr "não foi possível acessar o daemon do Proton Drive: {error}"
#~ msgid "Stop sharing?"
#~ msgstr "Parar de compartilhar?"
#~ msgid "Choose mountpoint folder"
#~ msgstr "Escolher a pasta do ponto de montagem"
#~ msgid "Couldn't save mountpoint"
#~ msgstr "Não foi possível salvar o ponto de montagem"
+29 -5
View File
@@ -3561,8 +3561,36 @@ JOURNAL_WARNINGS = (
"queued write conflicts; keeping a conflict copy",
"a fuse worker has held the same job for a long time",
"re-interned an authority missing from the local tree",
# A Rust panic goes to stderr without a tracing level, so the ERROR match
# does not see it (`docs/BUGS.md` B276).
"panicked at",
)
# A stop aborts each mount's FUSE connection so the unmount cannot hang. A
# request still running then replies into a connection the kernel has
# closed, and the kernel refuses that reply with ENOENT. While a stop is in
# progress that error is expected (`docs/BUGS.md` B276); at any other time it
# still counts.
STOP_STARTED = "aborted FUSE connection to unblock unmount"
STOP_ENDED = ("daemon stopping", "control socket listening")
LATE_REPLY = "Failed to send FUSE reply: No such file or directory"
def journal_problems(lines: list[str]) -> list[str]:
"""The lines of `lines` that count as problems."""
problems = []
stopping = False
for line in lines:
if STOP_STARTED in line:
stopping = True
elif any(marker in line for marker in STOP_ENDED):
stopping = False
if stopping and LATE_REPLY in line:
continue
if ERROR_LEVEL.search(line) or any(warning in line for warning in JOURNAL_WARNINGS):
problems.append(line)
return problems
def read_journal(unit: str, since: float) -> list[str] | None:
"""The unit's journal lines since `since`, or None without journalctl.
@@ -3621,11 +3649,7 @@ class JournalWatch:
# Filtering on syslog priority (`-p err`) finds nothing: the daemon writes
# tracing levels as text on stdout, which journald files at the unit's
# default priority. Match the level token instead.
return [
line
for line in lines
if ERROR_LEVEL.search(line) or any(warning in line for warning in JOURNAL_WARNINGS)
]
return journal_problems(lines)
# --------------------------------------------------------------------------