mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-04 08:56:59 +01:00
Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07d4ee42d9 | ||
|
|
0ac5e2e4fe | ||
|
|
7eb6aa0640 | ||
|
|
c0d211238b | ||
|
|
07c9b675d3 | ||
|
|
f82343b844 | ||
|
|
3e3dd7db41 | ||
|
|
d09e10dc7d |
No files matched your search
Generated
+18
-18
@@ -166,7 +166,7 @@ version = "1.1.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -177,7 +177,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"once_cell_polyfill",
|
"once_cell_polyfill",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1254,7 +1254,7 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
"option-ext",
|
"option-ext",
|
||||||
"redox_users",
|
"redox_users",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1433,7 +1433,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1896,7 +1896,7 @@ dependencies = [
|
|||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 9.0.0",
|
"system-deps 9.0.0",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3100,7 +3100,7 @@ version = "0.50.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -3778,9 +3778,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proton-drive-rs"
|
name = "proton-drive-rs"
|
||||||
version = "0.8.0"
|
version = "0.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5bde475139afb5fc2649621e1d283e243f9df2bb412f08802cdf3f4ffaf97c44"
|
checksum = "014165ed0f2d3847a4b8956ca94a82ba16c82f2d5c7fa139c3541c15150dba21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"base64 0.23.1",
|
"base64 0.23.1",
|
||||||
@@ -3805,9 +3805,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proton-sdk"
|
name = "proton-sdk"
|
||||||
version = "0.8.0"
|
version = "0.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "faf32d0a03f7d13bd9bdcc8c9503e35e9df9318ca9f2a100dcf06cf50cb7ac8c"
|
checksum = "9e16bf5592b7947708dd754defeaee7a58e9fa35988a6ea345b5b9a93765fd81"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes-gcm 0.11.1",
|
"aes-gcm 0.11.1",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -3926,7 +3926,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"socket2",
|
"socket2",
|
||||||
"tracing",
|
"tracing",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4374,7 +4374,7 @@ dependencies = [
|
|||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4431,7 +4431,7 @@ dependencies = [
|
|||||||
"security-framework",
|
"security-framework",
|
||||||
"security-framework-sys",
|
"security-framework-sys",
|
||||||
"webpki-root-certs",
|
"webpki-root-certs",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4764,7 +4764,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
|
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4932,10 +4932,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fastrand",
|
"fastrand",
|
||||||
"getrandom 0.4.3",
|
"getrandom 0.3.4",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5266,7 +5266,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"memoffset",
|
"memoffset",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5590,7 +5590,7 @@ version = "0.1.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
+2
-2
@@ -15,8 +15,8 @@ keywords = ["proton", "drive", "fuse", "sync", "linux"]
|
|||||||
categories = ["filesystem", "command-line-utilities"]
|
categories = ["filesystem", "command-line-utilities"]
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
proton-sdk = { version = "0.8.0" }
|
proton-sdk = { version = "0.8.1" }
|
||||||
proton-drive-rs = { version = "0.8.0" }
|
proton-drive-rs = { version = "0.8.1" }
|
||||||
|
|
||||||
# Internal crates.
|
# Internal crates.
|
||||||
pdfs-core = { path = "crates/pdfs-core" }
|
pdfs-core = { path = "crates/pdfs-core" }
|
||||||
|
|||||||
@@ -628,6 +628,15 @@ enum DeviceCmd {
|
|||||||
#[arg(long, conflicts_with = "uid")]
|
#[arg(long, conflicts_with = "uid")]
|
||||||
clear: bool,
|
clear: bool,
|
||||||
},
|
},
|
||||||
|
/// Move another computer's folders into this computer's backup and sync
|
||||||
|
/// them here. The other computer stays registered, without those folders.
|
||||||
|
Migrate {
|
||||||
|
/// Device uid (from `devices list`).
|
||||||
|
uid: String,
|
||||||
|
/// Skip the confirmation and accept every proposed local path.
|
||||||
|
#[arg(long)]
|
||||||
|
yes: bool,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
@@ -967,6 +976,24 @@ fn cmd_devices(action: DeviceCmd) -> Result<()> {
|
|||||||
let uid = if clear { None } else { uid };
|
let uid = if clear { None } else { uid };
|
||||||
ok_or_bail(control_request(CtlRequest::AdoptDevice { uid })?)?
|
ok_or_bail(control_request(CtlRequest::AdoptDevice { uid })?)?
|
||||||
}
|
}
|
||||||
|
DeviceCmd::Migrate { uid, yes } => {
|
||||||
|
if !yes {
|
||||||
|
println!(
|
||||||
|
"Every folder that device backs up moves into this computer's backup.\n\
|
||||||
|
The device stays registered, without those folders. Stop Proton Drive\n\
|
||||||
|
on that computer first, or it sees its folders disappear."
|
||||||
|
);
|
||||||
|
confirm("Move them here?")?;
|
||||||
|
}
|
||||||
|
let response = control_request(CtlRequest::MigrateDevice { uid })?;
|
||||||
|
// A script gets the one reply and runs `sync restore` itself.
|
||||||
|
if emit_json(&response)? {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
ok_or_bail(response)?;
|
||||||
|
// The folders are this device's now, so the plain restore offers them.
|
||||||
|
cmd_sync_restore(yes, None)?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -446,6 +446,13 @@ pub enum Request {
|
|||||||
/// of registering a duplicate. `uid: None` clears the pin.
|
/// of registering a duplicate. `uid: None` clears the pin.
|
||||||
/// Replies with [`Response::Ok`].
|
/// Replies with [`Response::Ok`].
|
||||||
AdoptDevice { uid: Option<String> },
|
AdoptDevice { uid: Option<String> },
|
||||||
|
/// Move every folder another device backs up into this machine's own
|
||||||
|
/// device, as server-side moves on the main volume. The other device stays
|
||||||
|
/// registered, without those folders. Sync folders here that already track
|
||||||
|
/// one of them follow it to its new share. Nothing is downloaded: the moved
|
||||||
|
/// folders are then offered by [`Request::ListRestorableFolders`].
|
||||||
|
/// Replies with [`Response::Ok`].
|
||||||
|
MigrateDevice { uid: String },
|
||||||
|
|
||||||
// ---- device folder sync ----------------------------------
|
// ---- device folder sync ----------------------------------
|
||||||
/// Add a local folder to this machine's device, uploading its tree and
|
/// Add a local folder to this machine's device, uploading its tree and
|
||||||
@@ -3082,6 +3089,9 @@ mod tests {
|
|||||||
uid: Some("dev-1".into()),
|
uid: Some("dev-1".into()),
|
||||||
},
|
},
|
||||||
Request::AdoptDevice { uid: None },
|
Request::AdoptDevice { uid: None },
|
||||||
|
Request::MigrateDevice {
|
||||||
|
uid: "dev-2".into(),
|
||||||
|
},
|
||||||
Request::ListRestorableFolders,
|
Request::ListRestorableFolders,
|
||||||
Request::RestoreSyncFolders {
|
Request::RestoreSyncFolders {
|
||||||
items: vec![RestoreItem {
|
items: vec![RestoreItem {
|
||||||
|
|||||||
@@ -139,6 +139,17 @@ impl Db {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Re-point a synced folder at the share that now holds its remote folder,
|
||||||
|
/// after the folder moved to another device without changing its uid.
|
||||||
|
pub fn sync_folder_set_share(&self, id: i64, share_id: &str) -> Result<()> {
|
||||||
|
let conn = self.conn.lock();
|
||||||
|
conn.execute(
|
||||||
|
"UPDATE sync_folder SET remote_share_id = ?2 WHERE id = ?1",
|
||||||
|
params![id, share_id],
|
||||||
|
)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Queue (or, with `None`, withdraw) a mode the folder should move to once it
|
/// Queue (or, with `None`, withdraw) a mode the folder should move to once it
|
||||||
/// is safe to switch.
|
/// is safe to switch.
|
||||||
pub fn sync_folder_set_pending_mode(&self, id: i64, mode: Option<&str>) -> Result<()> {
|
pub fn sync_folder_set_pending_mode(&self, id: i64, mode: Option<&str>) -> Result<()> {
|
||||||
|
|||||||
@@ -4940,6 +4940,28 @@ fn pending_mode_is_queued_until_the_mode_is_reached() {
|
|||||||
assert_eq!(folder.pending_mode, None);
|
assert_eq!(folder.pending_mode, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn moved_sync_folder_points_at_its_new_share() {
|
||||||
|
let db = Db::open_in_memory().unwrap();
|
||||||
|
let id = db
|
||||||
|
.sync_folder_add("/tmp/pdfs-moved-share", "vol~folder", "windows-share")
|
||||||
|
.unwrap();
|
||||||
|
let other = db
|
||||||
|
.sync_folder_add("/tmp/pdfs-unmoved-share", "vol~other", "windows-share")
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
db.sync_folder_set_share(id, "linux-share").unwrap();
|
||||||
|
|
||||||
|
let folder = db.sync_folder_get(id).unwrap().unwrap();
|
||||||
|
assert_eq!(folder.remote_share_id, "linux-share");
|
||||||
|
// A move keeps the uid, so nothing but the share changes.
|
||||||
|
assert_eq!(folder.remote_uid, "vol~folder");
|
||||||
|
assert_eq!(
|
||||||
|
db.sync_folder_get(other).unwrap().unwrap().remote_share_id,
|
||||||
|
"windows-share"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn mode_commit_clears_only_the_intent_it_satisfies() {
|
fn mode_commit_clears_only_the_intent_it_satisfies() {
|
||||||
let db = Db::open_in_memory().unwrap();
|
let db = Db::open_in_memory().unwrap();
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ fn touched_topics(request: &CtlRequest) -> &'static [Topic] {
|
|||||||
RefreshScope::Photos { .. } => &[],
|
RefreshScope::Photos { .. } => &[],
|
||||||
},
|
},
|
||||||
R::RenameDevice { .. } | R::DeleteDevice { .. } => &[Topic::Devices],
|
R::RenameDevice { .. } | R::DeleteDevice { .. } => &[Topic::Devices],
|
||||||
R::AdoptDevice { .. } => &[Topic::Devices, Topic::Locations],
|
R::AdoptDevice { .. } | R::MigrateDevice { .. } => &[Topic::Devices, Topic::Locations],
|
||||||
R::AddSyncFolder { .. }
|
R::AddSyncFolder { .. }
|
||||||
| R::RemoveSyncFolder { .. }
|
| R::RemoveSyncFolder { .. }
|
||||||
| R::SetSyncFolderMode { .. }
|
| R::SetSyncFolderMode { .. }
|
||||||
@@ -1297,6 +1297,10 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U
|
|||||||
Ok(message) => CtlResponse::Ok { message },
|
Ok(message) => CtlResponse::Ok { message },
|
||||||
Err(e) => CtlResponse::error(e),
|
Err(e) => CtlResponse::error(e),
|
||||||
},
|
},
|
||||||
|
Ok(CtlRequest::MigrateDevice { uid }) => match core.migrate_device(&uid) {
|
||||||
|
Ok(message) => CtlResponse::Ok { message },
|
||||||
|
Err(e) => CtlResponse::error(e),
|
||||||
|
},
|
||||||
Ok(CtlRequest::AddSyncFolder { local_path }) => {
|
Ok(CtlRequest::AddSyncFolder { local_path }) => {
|
||||||
// Registering the device and uploading a folder tree far outlasts the
|
// Registering the device and uploading a folder tree far outlasts the
|
||||||
// socket read timeout, so ack immediately and work on a background
|
// socket read timeout, so ack immediately and work on a background
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ use pdfs_core::control::{
|
|||||||
};
|
};
|
||||||
use pdfs_core::db::{StoredDevice, StoredSyncFolder};
|
use pdfs_core::db::{StoredDevice, StoredSyncFolder};
|
||||||
use pdfs_core::mounts::MountMode;
|
use pdfs_core::mounts::MountMode;
|
||||||
|
use pdfs_core::profile::PROFILE_DIR_NAME;
|
||||||
use pdfs_core::{CoreError, CoreResult};
|
use pdfs_core::{CoreError, CoreResult};
|
||||||
use proton_drive_rs::proton_sdk::ids::{DeviceUid, NodeUid};
|
use proton_drive_rs::proton_sdk::ids::{DeviceUid, NodeUid};
|
||||||
use proton_drive_rs::{DeviceType, Node};
|
use proton_drive_rs::{DeviceType, Node};
|
||||||
@@ -114,6 +115,22 @@ pub(crate) fn set_adopted_device_uid(uid: Option<&str>) -> CoreResult<()> {
|
|||||||
.map_err(|e| CoreError::internal(format!("write config: {e}")))
|
.map_err(|e| CoreError::internal(format!("write config: {e}")))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The name a folder moved in from `device` takes when `name` is already
|
||||||
|
/// taken under this device's root, or `None` when it can keep its own.
|
||||||
|
fn migrated_name(name: &str, device: &str, taken: &[String]) -> Option<String> {
|
||||||
|
let free = |candidate: &str| !taken.iter().any(|t| t == candidate);
|
||||||
|
if free(name) {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let base = format!("{name} ({device})");
|
||||||
|
if free(&base) {
|
||||||
|
return Some(base);
|
||||||
|
}
|
||||||
|
(2..)
|
||||||
|
.map(|n| format!("{base} {n}"))
|
||||||
|
.find(|candidate| free(candidate))
|
||||||
|
}
|
||||||
|
|
||||||
impl Core {
|
impl Core {
|
||||||
// ---- devices ----------------------------------------------------------
|
// ---- devices ----------------------------------------------------------
|
||||||
|
|
||||||
@@ -260,6 +277,107 @@ impl Core {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Move every folder another device backs up into this machine's own
|
||||||
|
/// device, so this machine carries on backing them up as itself. The other
|
||||||
|
/// device stays registered, without those folders.
|
||||||
|
///
|
||||||
|
/// Device roots all live on the main volume, so each folder is one
|
||||||
|
/// server-side move: nothing is downloaded or uploaded, and no quota is
|
||||||
|
/// used twice. A folder whose name is taken here keeps its content under
|
||||||
|
/// "<name> (<device>)". A failed folder does not stop the others, and a
|
||||||
|
/// second run picks up whatever is still left on the other device.
|
||||||
|
///
|
||||||
|
/// Nothing is synced to this disk here. The moved folders are now this
|
||||||
|
/// device's, so the ordinary restore offers them. Only folders that were
|
||||||
|
/// already synced here from the other device are touched: their uid
|
||||||
|
/// survives the move but their share does not.
|
||||||
|
pub(crate) fn migrate_device(&self, uid: &str) -> CoreResult<String> {
|
||||||
|
let source = self.restore_source(Some(uid))?;
|
||||||
|
let target = self.ensure_device()?;
|
||||||
|
if source.uid == target.uid {
|
||||||
|
return Err(CoreError::invalid(format!(
|
||||||
|
"{} is this computer's own device",
|
||||||
|
source.name
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
let bad_root = |d: &StoredDevice| {
|
||||||
|
parse_uid(&d.root_uid)
|
||||||
|
.ok_or_else(|| CoreError::internal(format!("bad device root uid: {}", d.root_uid)))
|
||||||
|
};
|
||||||
|
let (source_root, target_root) = (bad_root(&source)?, bad_root(&target)?);
|
||||||
|
if source_root.volume_id != target_root.volume_id {
|
||||||
|
return Err(CoreError::invalid(
|
||||||
|
"the two devices are on different Proton Drive volumes; copy it instead",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut taken: Vec<String> = self
|
||||||
|
.device_root_nodes(&target_root)?
|
||||||
|
.into_iter()
|
||||||
|
.filter(|n| !n.trashed)
|
||||||
|
.map(|n| n.name)
|
||||||
|
.collect();
|
||||||
|
let synced = self
|
||||||
|
.db
|
||||||
|
.sync_folder_list()
|
||||||
|
.map_err(|e| CoreError::internal(format!("db: {e:?}")))?;
|
||||||
|
|
||||||
|
let mut moved = 0usize;
|
||||||
|
let mut renamed: Vec<String> = Vec::new();
|
||||||
|
let mut left: Vec<String> = Vec::new();
|
||||||
|
let mut failed: Vec<String> = Vec::new();
|
||||||
|
for node in self.device_root_nodes(&source_root)? {
|
||||||
|
if node.trashed || node.name == PROFILE_DIR_NAME {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// A device root only ever holds folders (B68); anything else was
|
||||||
|
// put there by hand and is left for the user to deal with.
|
||||||
|
if !node.is_folder() {
|
||||||
|
left.push(node.name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let new_name = migrated_name(&node.name, &source.name, &taken);
|
||||||
|
if let Err(e) = self.move_rename_remote(&node.uid, &target_root, new_name.as_deref()) {
|
||||||
|
warn!(name = %node.name, error = %e, "migrate: could not move folder");
|
||||||
|
failed.push(format!("{}: {e}", node.name));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let landed = new_name.clone().unwrap_or_else(|| node.name.clone());
|
||||||
|
if new_name.is_some() {
|
||||||
|
renamed.push(format!("{} -> {landed}", node.name));
|
||||||
|
}
|
||||||
|
taken.push(landed);
|
||||||
|
moved += 1;
|
||||||
|
|
||||||
|
let uid = node.uid.to_string();
|
||||||
|
for folder in synced.iter().filter(|f| f.remote_uid == uid) {
|
||||||
|
if let Err(e) = self.db.sync_folder_set_share(folder.id, &target.share_id) {
|
||||||
|
warn!(id = folder.id, error = ?e, "migrate: could not re-point sync folder");
|
||||||
|
}
|
||||||
|
self.sync_now(Some(folder.id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.invalidate_children_of(&source_root);
|
||||||
|
self.invalidate_children_of(&target_root);
|
||||||
|
|
||||||
|
let mut message = format!("moved {moved} folder(s) from {}", source.name);
|
||||||
|
if !renamed.is_empty() {
|
||||||
|
message.push_str(&format!("; renamed: {}", renamed.join(", ")));
|
||||||
|
}
|
||||||
|
if !left.is_empty() {
|
||||||
|
message.push_str(&format!("; left behind: {}", left.join(", ")));
|
||||||
|
}
|
||||||
|
if !failed.is_empty() {
|
||||||
|
message.push_str(&format!("; failed: {}", failed.join(", ")));
|
||||||
|
}
|
||||||
|
info!(from = %source.name, to = %target.name, moved, failed = failed.len(),
|
||||||
|
"device migrated");
|
||||||
|
if moved == 0 && !failed.is_empty() {
|
||||||
|
return Err(CoreError::conflict(message));
|
||||||
|
}
|
||||||
|
Ok(message)
|
||||||
|
}
|
||||||
|
|
||||||
// ---- device folder sync -------------------------
|
// ---- device folder sync -------------------------
|
||||||
|
|
||||||
/// Auto-register (or recover) this machine as a Proton Drive Device, caching
|
/// Auto-register (or recover) this machine as a Proton Drive Device, caching
|
||||||
@@ -360,21 +478,25 @@ impl Core {
|
|||||||
root_uid: &NodeUid,
|
root_uid: &NodeUid,
|
||||||
name: &str,
|
name: &str,
|
||||||
) -> CoreResult<Option<NodeUid>> {
|
) -> CoreResult<Option<NodeUid>> {
|
||||||
|
Ok(self
|
||||||
|
.device_root_nodes(root_uid)?
|
||||||
|
.into_iter()
|
||||||
|
.find(|n| n.is_folder() && !n.trashed && n.name == name)
|
||||||
|
.map(|n| n.uid))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Everything directly under a device root, trashed nodes included.
|
||||||
|
fn device_root_nodes(&self, root_uid: &NodeUid) -> CoreResult<Vec<Node>> {
|
||||||
let uids = self
|
let uids = self
|
||||||
.rt
|
.rt
|
||||||
.block_on(self.drive.enumerate_folder_children_node_uids(root_uid))
|
.block_on(self.drive.enumerate_folder_children_node_uids(root_uid))
|
||||||
.map_err(|e| CoreError::from_api(&e, "list device root"))?;
|
.map_err(|e| CoreError::from_api(&e, "list device root"))?;
|
||||||
if uids.is_empty() {
|
if uids.is_empty() {
|
||||||
return Ok(None);
|
return Ok(Vec::new());
|
||||||
}
|
}
|
||||||
let nodes = self
|
self.rt
|
||||||
.rt
|
|
||||||
.block_on(self.drive.enumerate_nodes(&uids))
|
.block_on(self.drive.enumerate_nodes(&uids))
|
||||||
.map_err(|e| CoreError::from_api(&e, "resolve device root children"))?;
|
.map_err(|e| CoreError::from_api(&e, "resolve device root children"))
|
||||||
Ok(nodes
|
|
||||||
.into_iter()
|
|
||||||
.find(|n| n.is_folder() && !n.trashed && n.name == name)
|
|
||||||
.map(|n| n.uid))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a local folder to this device's sync set: register the device if
|
/// Add a local folder to this device's sync set: register the device if
|
||||||
@@ -842,6 +964,23 @@ impl Core {
|
|||||||
if folder.state != "idle" {
|
if folder.state != "idle" {
|
||||||
return Err(SwitchBlocked::NotNow);
|
return Err(SwitchBlocked::NotNow);
|
||||||
}
|
}
|
||||||
|
// `idle` only says the last pass applied everything it tried.
|
||||||
|
// It never tries an ignored path, a symlink or a folder it
|
||||||
|
// cannot read, it defers a file open for writing, and a file can
|
||||||
|
// change after it ends. The eviction below deletes all of those
|
||||||
|
// for good, so it waits until nothing here is missing from Drive
|
||||||
|
// (B198).
|
||||||
|
let baseline = self
|
||||||
|
.db
|
||||||
|
.sync_entries(id)
|
||||||
|
.map_err(|e| SwitchBlocked::Failed(format!("db: {e:?}")))?;
|
||||||
|
if let Some(reason) =
|
||||||
|
sync::mirror_tree_unsynced(&local, &baseline, &self.ignore_rules(&local))
|
||||||
|
{
|
||||||
|
return Err(SwitchBlocked::Failed(format!(
|
||||||
|
"going online-only would delete what is only on this computer: {reason}"
|
||||||
|
)));
|
||||||
|
}
|
||||||
let root_uid = parse_uid(&folder.remote_uid).ok_or_else(|| {
|
let root_uid = parse_uid(&folder.remote_uid).ok_or_else(|| {
|
||||||
SwitchBlocked::Failed(format!("bad remote uid: {}", folder.remote_uid))
|
SwitchBlocked::Failed(format!("bad remote uid: {}", folder.remote_uid))
|
||||||
})?;
|
})?;
|
||||||
@@ -1107,10 +1246,38 @@ mod tests {
|
|||||||
use pdfs_core::db::StoredSyncFolder;
|
use pdfs_core::db::StoredSyncFolder;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
ApplicableMountMode, commit_after_teardown, pending_intent_matches,
|
ApplicableMountMode, commit_after_teardown, migrated_name, pending_intent_matches,
|
||||||
restore_snapshot_matches, select_mode_transition,
|
restore_snapshot_matches, select_mode_transition,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn migrated_folder_keeps_its_name_when_it_is_free() {
|
||||||
|
let taken = vec!["Pictures".to_string()];
|
||||||
|
assert_eq!(migrated_name("Documents", "DESKTOP-1", &taken), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn migrated_folder_is_named_after_its_device_on_a_clash() {
|
||||||
|
let taken = vec!["Documents".to_string()];
|
||||||
|
assert_eq!(
|
||||||
|
migrated_name("Documents", "DESKTOP-1", &taken).as_deref(),
|
||||||
|
Some("Documents (DESKTOP-1)")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn migrated_folder_is_numbered_when_the_device_name_is_taken_too() {
|
||||||
|
let taken = vec![
|
||||||
|
"Documents".to_string(),
|
||||||
|
"Documents (DESKTOP-1)".to_string(),
|
||||||
|
"Documents (DESKTOP-1) 2".to_string(),
|
||||||
|
];
|
||||||
|
assert_eq!(
|
||||||
|
migrated_name("Documents", "DESKTOP-1", &taken).as_deref(),
|
||||||
|
Some("Documents (DESKTOP-1) 3")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn unknown_mode_cannot_select_a_destructive_transition() {
|
fn unknown_mode_cannot_select_a_destructive_transition() {
|
||||||
let mut unmounts = 0;
|
let mut unmounts = 0;
|
||||||
|
|||||||
@@ -744,6 +744,9 @@ struct Core {
|
|||||||
/// uploading that same tree — the engine would upload files as they vanish
|
/// uploading that same tree — the engine would upload files as they vanish
|
||||||
/// and then walk the FUSE mount as if it were local.
|
/// and then walk the FUSE mount as if it were local.
|
||||||
sync_locks: Arc<Mutex<HashMap<i64, Arc<Mutex<()>>>>>,
|
sync_locks: Arc<Mutex<HashMap<i64, Arc<Mutex<()>>>>>,
|
||||||
|
/// Per-sync-folder paths the last pass could not read, so the activity feed
|
||||||
|
/// says so when the set changes rather than on every poll (B196).
|
||||||
|
sync_unscanned: Arc<Mutex<HashMap<i64, Vec<String>>>>,
|
||||||
/// Nodes this daemon changed on the remote itself, and how many echoes of
|
/// Nodes this daemon changed on the remote itself, and how many echoes of
|
||||||
/// those changes the event feed still owes us.
|
/// those changes the event feed still owes us.
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -475,6 +475,7 @@ pub(crate) fn mount_with(
|
|||||||
sync_tx,
|
sync_tx,
|
||||||
mounts: Arc::new(Mutex::new(SecondaryMountRegistry::default())),
|
mounts: Arc::new(Mutex::new(SecondaryMountRegistry::default())),
|
||||||
sync_locks: Arc::new(Mutex::new(HashMap::new())),
|
sync_locks: Arc::new(Mutex::new(HashMap::new())),
|
||||||
|
sync_unscanned: Arc::new(Mutex::new(HashMap::new())),
|
||||||
states: Arc::new(StateRegistry::default()),
|
states: Arc::new(StateRegistry::default()),
|
||||||
};
|
};
|
||||||
// Before anything can queue work against it: the drain thread below reaches
|
// Before anything can queue work against it: the drain thread below reaches
|
||||||
|
|||||||
+529
-86
@@ -59,8 +59,9 @@ pub(crate) use planner::base_name;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use planner::conflict_path;
|
use planner::conflict_path;
|
||||||
use planner::{
|
use planner::{
|
||||||
FilePlan, classification_order, conflict_path_with_suffix, filter_baseline, guard_local_wipe,
|
FilePlan, Unscanned, classification_order, conflict_path_with_suffix, filter_baseline,
|
||||||
join_rel, parent_rel, plan_file, rel_to_path, remote_sig, unchanged_remote_size,
|
guard_local_wipe, join_rel, local_deletions, parent_rel, plan_file, rel_to_path, remote_sig,
|
||||||
|
tracked_baseline, unchanged_remote_size,
|
||||||
};
|
};
|
||||||
/// What a [`Pending`] op did, so the reconcile can update shared state on the
|
/// What a [`Pending`] op did, so the reconcile can update shared state on the
|
||||||
/// engine thread (never inside a task).
|
/// engine thread (never inside a task).
|
||||||
@@ -187,6 +188,7 @@ impl Core {
|
|||||||
"idle"
|
"idle"
|
||||||
};
|
};
|
||||||
let _ = self.db.sync_folder_set_state(folder.id, state, now_secs());
|
let _ = self.db.sync_folder_set_state(folder.id, state, now_secs());
|
||||||
|
self.report_unscanned(folder.id, name, &outcome.unscanned);
|
||||||
// Summarise a pass that actually moved something. A poll over an
|
// Summarise a pass that actually moved something. A poll over an
|
||||||
// unchanged folder does nothing and says nothing — otherwise the
|
// unchanged folder does nothing and says nothing — otherwise the
|
||||||
// feed would fill with "synced, 0 changes" every two minutes.
|
// feed would fill with "synced, 0 changes" every two minutes.
|
||||||
@@ -243,6 +245,37 @@ impl Core {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tell the activity feed what a pass over this folder had to leave out
|
||||||
|
/// because it cannot be read, once each time that changes. Every other path
|
||||||
|
/// in the folder still synced, so this does not make the folder's state an
|
||||||
|
/// error; but a folder the user has no permission for is never going to
|
||||||
|
/// reach Drive, and they should hear that once rather than not at all
|
||||||
|
/// (B196).
|
||||||
|
fn report_unscanned(&self, folder_id: i64, name: &str, unscanned: &[String]) {
|
||||||
|
let previous = {
|
||||||
|
let mut last = self.sync_unscanned.lock();
|
||||||
|
if unscanned.is_empty() {
|
||||||
|
last.remove(&folder_id)
|
||||||
|
} else {
|
||||||
|
last.insert(folder_id, unscanned.to_vec())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if unscanned.is_empty() || previous.as_deref() == Some(unscanned) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const SHOWN: usize = 3;
|
||||||
|
let mut detail = unscanned[..unscanned.len().min(SHOWN)].join(", ");
|
||||||
|
if unscanned.len() > SHOWN {
|
||||||
|
detail.push_str(&format!(" and {} more", unscanned.len() - SHOWN));
|
||||||
|
}
|
||||||
|
self.log_activity(
|
||||||
|
ActivityKind::Sync,
|
||||||
|
format!("{} item(s) in {name} cannot be synced", unscanned.len()),
|
||||||
|
detail,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// Compile the ignore rules for a synced folder: the global patterns from
|
/// Compile the ignore rules for a synced folder: the global patterns from
|
||||||
/// the config, plus any `.pdfsignore` at `local_root`.
|
/// the config, plus any `.pdfsignore` at `local_root`.
|
||||||
///
|
///
|
||||||
@@ -250,7 +283,7 @@ impl Core {
|
|||||||
/// than to "ignore nothing" — the defaults exclude build and VCS trees, and
|
/// than to "ignore nothing" — the defaults exclude build and VCS trees, and
|
||||||
/// silently uploading those because a config read failed is the outcome this
|
/// silently uploading those because a config read failed is the outcome this
|
||||||
/// feature exists to prevent.
|
/// feature exists to prevent.
|
||||||
fn ignore_rules(&self, local_root: &Path) -> IgnoreRules {
|
pub(crate) fn ignore_rules(&self, local_root: &Path) -> IgnoreRules {
|
||||||
let globals = match pdfs_core::config::AppDirs::new() {
|
let globals = match pdfs_core::config::AppDirs::new() {
|
||||||
Ok(dirs) => dirs.load_config().resolved_ignore_patterns(),
|
Ok(dirs) => dirs.load_config().resolved_ignore_patterns(),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@@ -313,15 +346,23 @@ impl Core {
|
|||||||
self.progress_scan_total(folder_id, baseline.len());
|
self.progress_scan_total(folder_id, baseline.len());
|
||||||
|
|
||||||
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
||||||
|
let mut unscanned = Unscanned::default();
|
||||||
let writing = open_for_write_set(local_root);
|
let writing = open_for_write_set(local_root);
|
||||||
self.walk_local(
|
self.walk_local(
|
||||||
folder_id, local_root, local_root, rules, &writing, &mut local,
|
folder_id,
|
||||||
|
local_root,
|
||||||
|
rules,
|
||||||
|
&writing,
|
||||||
|
&mut local,
|
||||||
|
&mut unscanned,
|
||||||
)?;
|
)?;
|
||||||
// The guard compares against the paths this pass could still see: an
|
// The guard compares against the paths this pass could still see: an
|
||||||
// ignored path is absent from `local` by rule, not by loss, and counting
|
// ignored or unreadable path is absent from `local` by rule or by
|
||||||
// those as missing would trip the guard on every pass — wedging the
|
// failure, not by loss, and counting those as missing would trip the
|
||||||
// folder's sync permanently — the moment a rule covers the whole tree.
|
// guard on every pass — wedging the folder's sync permanently — the
|
||||||
guard_local_wipe(&filter_baseline(&baseline, rules), &local)?;
|
// moment a rule covers the whole tree.
|
||||||
|
let tracked = tracked_baseline(&baseline, rules, &unscanned);
|
||||||
|
guard_local_wipe(&tracked, &local)?;
|
||||||
|
|
||||||
// The remote folder uids come from the baseline instead of a walk: every
|
// The remote folder uids come from the baseline instead of a walk: every
|
||||||
// directory this device has synced recorded its uid there when it was
|
// directory this device has synced recorded its uid there when it was
|
||||||
@@ -391,6 +432,7 @@ impl Core {
|
|||||||
|
|
||||||
let mut outcome = Outcome {
|
let mut outcome = Outcome {
|
||||||
deferred: local.values().filter(|item| item.open_for_write).count(),
|
deferred: local.values().filter(|item| item.open_for_write).count(),
|
||||||
|
unscanned: unscanned.report(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let mut order: Vec<&String> = local.keys().collect();
|
let mut order: Vec<&String> = local.keys().collect();
|
||||||
@@ -515,13 +557,8 @@ impl Core {
|
|||||||
// showing the folder's remote contents — otherwise everything they deleted
|
// showing the folder's remote contents — otherwise everything they deleted
|
||||||
// comes back the moment the switch lands. Shallowest first, skipping anything
|
// comes back the moment the switch lands. Shallowest first, skipping anything
|
||||||
// under a folder already trashed (its children went with it).
|
// under a folder already trashed (its children went with it).
|
||||||
let mut missing: Vec<&String> = baseline
|
|
||||||
.keys()
|
|
||||||
.filter(|rel| !local.contains_key(*rel))
|
|
||||||
.collect();
|
|
||||||
missing.sort_by_key(|p| p.matches('/').count());
|
|
||||||
let mut trashed: Vec<String> = Vec::new();
|
let mut trashed: Vec<String> = Vec::new();
|
||||||
for rel in missing {
|
for rel in &local_deletions(&tracked, &local) {
|
||||||
if trashed
|
if trashed
|
||||||
.iter()
|
.iter()
|
||||||
.any(|dir| rel.starts_with(&format!("{dir}/")))
|
.any(|dir| rel.starts_with(&format!("{dir}/")))
|
||||||
@@ -586,12 +623,18 @@ impl Core {
|
|||||||
self.progress_scan_total(folder_id, baseline.len() * 2);
|
self.progress_scan_total(folder_id, baseline.len() * 2);
|
||||||
|
|
||||||
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
||||||
|
let mut unscanned = Unscanned::default();
|
||||||
let writing = open_for_write_set(local_root);
|
let writing = open_for_write_set(local_root);
|
||||||
self.walk_local(
|
self.walk_local(
|
||||||
folder_id, local_root, local_root, rules, &writing, &mut local,
|
folder_id,
|
||||||
|
local_root,
|
||||||
|
rules,
|
||||||
|
&writing,
|
||||||
|
&mut local,
|
||||||
|
&mut unscanned,
|
||||||
)?;
|
)?;
|
||||||
// See `push_pass`: the guard must not count rule-excluded paths as lost.
|
// See `push_pass`: the guard must not count excluded paths as lost.
|
||||||
guard_local_wipe(&filter_baseline(&baseline, rules), &local)?;
|
guard_local_wipe(&tracked_baseline(&baseline, rules, &unscanned), &local)?;
|
||||||
|
|
||||||
let mut remote: HashMap<String, RemoteItem> = HashMap::new();
|
let mut remote: HashMap<String, RemoteItem> = HashMap::new();
|
||||||
let mut remote_dirs: HashMap<String, NodeUid> = HashMap::new();
|
let mut remote_dirs: HashMap<String, NodeUid> = HashMap::new();
|
||||||
@@ -605,9 +648,15 @@ impl Core {
|
|||||||
&baseline,
|
&baseline,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let order = classification_order(&local, &remote, &baseline, rules);
|
let mut order = classification_order(&local, &remote, &baseline, rules);
|
||||||
|
// A path the scan could not read is no more a local deletion than an
|
||||||
|
// ignored one, and a remote path under it has nowhere to be written.
|
||||||
|
order.retain(|rel| !unscanned.covers(rel));
|
||||||
|
|
||||||
let mut outcome = Outcome::default();
|
let mut outcome = Outcome {
|
||||||
|
unscanned: unscanned.report(),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
// Folders to delete, collected here and removed deepest-first at the end
|
// Folders to delete, collected here and removed deepest-first at the end
|
||||||
// so a parent is never removed before its children.
|
// so a parent is never removed before its children.
|
||||||
let mut delete_local_dirs: Vec<String> = Vec::new();
|
let mut delete_local_dirs: Vec<String> = Vec::new();
|
||||||
@@ -873,19 +922,19 @@ impl Core {
|
|||||||
Ok(outcome)
|
Ok(outcome)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Recursively walk a local directory into `out`, keyed by `/`-joined relative
|
/// Recursively walk a local tree into `out`, keyed by `/`-joined relative
|
||||||
/// path. Symlinks and other special files are skipped. Reports each entry to the
|
/// path. Symlinks and other special files are skipped, and paths that cannot
|
||||||
/// pass's scan progress.
|
/// be read go to `unscanned`. Reports each entry to the pass's scan progress.
|
||||||
fn walk_local(
|
fn walk_local(
|
||||||
&self,
|
&self,
|
||||||
folder_id: i64,
|
folder_id: i64,
|
||||||
root: &Path,
|
root: &Path,
|
||||||
dir: &Path,
|
|
||||||
rules: &IgnoreRules,
|
rules: &IgnoreRules,
|
||||||
writing: &HashSet<PathBuf>,
|
writing: &HashSet<PathBuf>,
|
||||||
out: &mut HashMap<String, LocalItem>,
|
out: &mut HashMap<String, LocalItem>,
|
||||||
|
unscanned: &mut Unscanned,
|
||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
walk_local_tree(root, dir, rules, writing, out, &mut |rel| {
|
walk_local_tree(root, rules, writing, out, unscanned, &mut |rel| {
|
||||||
self.progress_scanned(folder_id, base_name(rel))
|
self.progress_scanned(folder_id, base_name(rel))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -1582,51 +1631,120 @@ fn removed_locally(result: std::io::Result<()>) -> std::io::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The body of [`Core::walk_local`], without a `Core`: recursively collect the
|
/// The body of [`Core::walk_local`], without a `Core`: recursively collect the
|
||||||
/// local tree under `dir` into `out`, reporting each entry to `scanned`.
|
/// local tree under `root` into `out`, reporting each entry to `scanned`.
|
||||||
///
|
///
|
||||||
/// **Every failure here is fatal to the pass, deliberately.** A `read_dir` that
|
/// **A path the scan cannot read is left out and recorded in `unscanned`, never
|
||||||
/// fails, an entry that cannot be stat-ed, a name that is not UTF-8 — each of
|
/// silently dropped.** Every pass drops what `unscanned` covers from
|
||||||
/// them would, if skipped, leave `out` describing a *smaller* tree than the one
|
/// classification, so a baseline row under it is neither a local deletion nor a
|
||||||
/// on disk. Reconciliation reads a path present in the baseline and absent from
|
/// download target (`docs/BUGS.md` B55). That covers a subfolder the pass has no
|
||||||
/// the scan as "the user deleted this", and propagates that to Drive. So an
|
/// permission for, an entry that vanished between the listing and its `stat`,
|
||||||
/// unreadable subdirectory would trash its remote counterpart, and the deeper
|
/// and a name that is not UTF-8. Failing the whole pass on any of them, as this
|
||||||
/// the failure, the more it takes with it (`docs/BUGS.md` B55). Refusing the
|
/// did before, left one root-owned folder stopping everything else in the tree
|
||||||
/// whole pass keeps the previous baseline and leaves the remote alone; the next
|
/// from syncing, on every pass, for good (B196).
|
||||||
/// pass retries once the transient condition clears.
|
///
|
||||||
|
/// The root is the exception, and so is any other I/O error: an absent or
|
||||||
|
/// unreadable root fails the pass, since leaving the root out would leave
|
||||||
|
/// nothing in, and an error this cannot name a cause for is not one to guess
|
||||||
|
/// about.
|
||||||
///
|
///
|
||||||
/// Split out from the method so exactly that can be tested against a real tree
|
/// Split out from the method so exactly that can be tested against a real tree
|
||||||
/// with a real unreadable directory in it, which needs no `Core` at all.
|
/// with a real unreadable directory in it, which needs no `Core` at all.
|
||||||
fn walk_local_tree(
|
fn walk_local_tree(
|
||||||
|
root: &Path,
|
||||||
|
rules: &IgnoreRules,
|
||||||
|
writing: &HashSet<PathBuf>,
|
||||||
|
out: &mut HashMap<String, LocalItem>,
|
||||||
|
unscanned: &mut Unscanned,
|
||||||
|
scanned: &mut dyn FnMut(&str),
|
||||||
|
) -> Result<(), String> {
|
||||||
|
walk_local_dir(root, root, rules, writing, out, unscanned, scanned).map_err(|e| e.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Why [`walk_local_dir`] could not finish a folder.
|
||||||
|
enum ScanError {
|
||||||
|
/// An I/O error on `what`, which the caller may leave out of the pass.
|
||||||
|
Io { what: String, error: std::io::Error },
|
||||||
|
/// Anything else, which fails the pass.
|
||||||
|
Failed(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for ScanError {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
ScanError::Io { what, error } => write!(f, "{what}: {error}"),
|
||||||
|
ScanError::Failed(message) => f.write_str(message),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Leave `rel` out of the pass for `failure`, or hand it back when it is one
|
||||||
|
/// that fails the pass. Permission denied is reported to the user; an entry
|
||||||
|
/// that vanished mid-scan is not, since the next pass sees it settled.
|
||||||
|
fn leave_out(rel: &str, failure: ScanError, unscanned: &mut Unscanned) -> Result<(), ScanError> {
|
||||||
|
let ScanError::Io { what, error } = &failure else {
|
||||||
|
return Err(failure);
|
||||||
|
};
|
||||||
|
match error.kind() {
|
||||||
|
std::io::ErrorKind::PermissionDenied => {
|
||||||
|
warn!(%what, %error, "sync: cannot read; leaving it out of the pass");
|
||||||
|
unscanned.unreadable(rel.to_string(), &error.to_string());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
std::io::ErrorKind::NotFound => {
|
||||||
|
debug!(%what, "sync: gone mid-scan; leaving it out of the pass");
|
||||||
|
unscanned.vanished(rel.to_string());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
_ => Err(failure),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn walk_local_dir(
|
||||||
root: &Path,
|
root: &Path,
|
||||||
dir: &Path,
|
dir: &Path,
|
||||||
rules: &IgnoreRules,
|
rules: &IgnoreRules,
|
||||||
writing: &HashSet<PathBuf>,
|
writing: &HashSet<PathBuf>,
|
||||||
out: &mut HashMap<String, LocalItem>,
|
out: &mut HashMap<String, LocalItem>,
|
||||||
|
unscanned: &mut Unscanned,
|
||||||
scanned: &mut dyn FnMut(&str),
|
scanned: &mut dyn FnMut(&str),
|
||||||
) -> Result<(), String> {
|
) -> Result<(), ScanError> {
|
||||||
let entries = std::fs::read_dir(dir).map_err(|e| format!("read {}: {e}", dir.display()))?;
|
let io = |what: String| move |error| ScanError::Io { what, error };
|
||||||
|
let entries = std::fs::read_dir(dir).map_err(io(format!("read {}", dir.display())))?;
|
||||||
for entry in entries {
|
for entry in entries {
|
||||||
let entry = entry.map_err(|e| format!("read entry in {}: {e}", dir.display()))?;
|
let entry = entry.map_err(io(format!("read entry in {}", dir.display())))?;
|
||||||
let path = entry.path();
|
let path = entry.path();
|
||||||
let meta = std::fs::symlink_metadata(&path)
|
|
||||||
.map_err(|e| format!("stat {}: {e}", path.display()))?;
|
|
||||||
let stripped = path.strip_prefix(root).map_err(|e| {
|
let stripped = path.strip_prefix(root).map_err(|e| {
|
||||||
format!(
|
ScanError::Failed(format!(
|
||||||
"local path {} escaped sync root {}: {e}",
|
"local path {} escaped sync root {}: {e}",
|
||||||
path.display(),
|
path.display(),
|
||||||
root.display()
|
root.display()
|
||||||
)
|
))
|
||||||
})?;
|
|
||||||
let rel = stripped.to_str().ok_or_else(|| {
|
|
||||||
format!(
|
|
||||||
"local path {} is not valid UTF-8; refusing a destructive sync pass",
|
|
||||||
path.display()
|
|
||||||
)
|
|
||||||
})?;
|
})?;
|
||||||
|
let Some(rel) = stripped.to_str() else {
|
||||||
|
// Nothing can be keyed by this name: not the baseline, which only
|
||||||
|
// ever held paths this scan produced, and not Drive, whose names are
|
||||||
|
// UTF-8. Leaving it out cannot read as a deletion of anything.
|
||||||
|
warn!(path = %path.display(), "sync: name is not valid UTF-8; leaving it out of the pass");
|
||||||
|
unscanned.unreadable(
|
||||||
|
stripped.to_string_lossy().into_owned(),
|
||||||
|
"name is not valid UTF-8",
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
};
|
||||||
// Ignore our own in-flight download temp files.
|
// Ignore our own in-flight download temp files.
|
||||||
if rel.contains(".pdfs-tmp-") {
|
if rel.contains(".pdfs-tmp-") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
let meta = match std::fs::symlink_metadata(&path) {
|
||||||
|
Ok(meta) => meta,
|
||||||
|
// Gone since the listing, or in a folder that lists but does not
|
||||||
|
// allow `stat`. Either way this pass cannot say what it is.
|
||||||
|
Err(error) => {
|
||||||
|
let what = format!("stat {}", path.display());
|
||||||
|
leave_out(rel, ScanError::Io { what, error }, unscanned)?;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
// Ignored paths are dropped here as well as from the classification
|
// Ignored paths are dropped here as well as from the classification
|
||||||
// union — not for correctness (the union filter is what makes this
|
// union — not for correctness (the union filter is what makes this
|
||||||
// safe) but so an ignored `node_modules/` is never descended into or
|
// safe) but so an ignored `node_modules/` is never descended into or
|
||||||
@@ -1646,7 +1764,15 @@ fn walk_local_tree(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
scanned(rel);
|
scanned(rel);
|
||||||
walk_local_tree(root, &path, rules, writing, out, scanned)?;
|
if let Err(failure) =
|
||||||
|
walk_local_dir(root, &path, rules, writing, out, unscanned, scanned)
|
||||||
|
{
|
||||||
|
leave_out(rel, failure, unscanned)?;
|
||||||
|
// What the folder did list before failing goes with it: a
|
||||||
|
// half-read folder is as unknown as an unread one.
|
||||||
|
let prefix = format!("{rel}/");
|
||||||
|
out.retain(|k, _| k != rel && !k.starts_with(&prefix));
|
||||||
|
}
|
||||||
} else if meta.is_file() {
|
} else if meta.is_file() {
|
||||||
// Check whether any process holds this file open for writing.
|
// Check whether any process holds this file open for writing.
|
||||||
// The canonical path is used because /proc/*/fd links resolve
|
// The canonical path is used because /proc/*/fd links resolve
|
||||||
@@ -1684,7 +1810,7 @@ pub(crate) fn mirror_subtree_unsynced(
|
|||||||
baseline: &HashMap<String, StoredSyncEntry>,
|
baseline: &HashMap<String, StoredSyncEntry>,
|
||||||
) -> Option<String> {
|
) -> Option<String> {
|
||||||
let mut seen = HashSet::new();
|
let mut seen = HashSet::new();
|
||||||
if let Some(reason) = unsynced_local(root, rel, baseline, &mut seen) {
|
if let Some(reason) = unsynced_local(root, rel, baseline, None, &mut seen) {
|
||||||
return Some(reason);
|
return Some(reason);
|
||||||
}
|
}
|
||||||
let prefix = format!("{rel}/");
|
let prefix = format!("{rel}/");
|
||||||
@@ -1695,18 +1821,64 @@ pub(crate) fn mirror_subtree_unsynced(
|
|||||||
.map(|r| format!("{r} was deleted here but not on Proton Drive yet"))
|
.map(|r| format!("{r} was deleted here but not on Proton Drive yet"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [`mirror_subtree_unsynced`] for a whole mirror folder: why its local copy
|
||||||
|
/// holds something Proton Drive does not, or `None` when evicting it loses
|
||||||
|
/// nothing. The switch to on-demand asks this before it empties the folder.
|
||||||
|
///
|
||||||
|
/// A push pass that ends `idle` is not enough on its own. It never uploads an
|
||||||
|
/// ignored path, a symlink or a folder it cannot read, it defers a file open
|
||||||
|
/// for writing, and a file can change after it finishes; the eviction deleted
|
||||||
|
/// all of those for good (B198).
|
||||||
|
///
|
||||||
|
/// A tracked path deleted here but still in the baseline counts, since the
|
||||||
|
/// mount would show it again. An ignored one does not: ignoring never carries
|
||||||
|
/// a deletion to Drive, so its row stays in the baseline for good, and holding
|
||||||
|
/// the switch on it would hold it forever.
|
||||||
|
pub(crate) fn mirror_tree_unsynced(
|
||||||
|
root: &Path,
|
||||||
|
baseline: &HashMap<String, StoredSyncEntry>,
|
||||||
|
rules: &IgnoreRules,
|
||||||
|
) -> Option<String> {
|
||||||
|
let mut seen = HashSet::new();
|
||||||
|
if let Some(reason) = unsynced_local(root, "", baseline, Some(rules), &mut seen) {
|
||||||
|
return Some(reason);
|
||||||
|
}
|
||||||
|
let mut missing: Vec<String> = filter_baseline(baseline, rules)
|
||||||
|
.into_keys()
|
||||||
|
.filter(|r| !seen.contains(r.as_str()))
|
||||||
|
.collect();
|
||||||
|
missing.sort_unstable();
|
||||||
|
missing
|
||||||
|
.first()
|
||||||
|
.map(|r| format!("{r} was deleted here but not on Proton Drive yet"))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The walk behind both checks. `rules`, when given, only names an ignored
|
||||||
|
/// path as such in the reason; it is still something only this disk has.
|
||||||
fn unsynced_local(
|
fn unsynced_local(
|
||||||
root: &Path,
|
root: &Path,
|
||||||
rel: &str,
|
rel: &str,
|
||||||
baseline: &HashMap<String, StoredSyncEntry>,
|
baseline: &HashMap<String, StoredSyncEntry>,
|
||||||
|
rules: Option<&IgnoreRules>,
|
||||||
seen: &mut HashSet<String>,
|
seen: &mut HashSet<String>,
|
||||||
) -> Option<String> {
|
) -> Option<String> {
|
||||||
let path = root.join(rel_to_path(rel));
|
let path = if rel.is_empty() {
|
||||||
|
root.to_path_buf()
|
||||||
|
} else {
|
||||||
|
root.join(rel_to_path(rel))
|
||||||
|
};
|
||||||
|
// The folder itself has no baseline row; only what is in it does.
|
||||||
|
if !rel.is_empty() {
|
||||||
let meta = match std::fs::symlink_metadata(&path) {
|
let meta = match std::fs::symlink_metadata(&path) {
|
||||||
Ok(meta) => meta,
|
Ok(meta) => meta,
|
||||||
Err(e) => return Some(format!("cannot read {rel}: {e}")),
|
Err(e) => return Some(format!("cannot read {rel}: {e}")),
|
||||||
};
|
};
|
||||||
let Some(base) = baseline.get(rel) else {
|
let Some(base) = baseline.get(rel) else {
|
||||||
|
if rules.is_some_and(|rules| rules.is_ignored(rel, meta.is_dir())) {
|
||||||
|
return Some(format!(
|
||||||
|
"{rel} is excluded from sync, so it is only on this computer"
|
||||||
|
));
|
||||||
|
}
|
||||||
return Some(format!("{rel} is not on Proton Drive yet"));
|
return Some(format!("{rel} is not on Proton Drive yet"));
|
||||||
};
|
};
|
||||||
seen.insert(rel.to_string());
|
seen.insert(rel.to_string());
|
||||||
@@ -1717,23 +1889,25 @@ fn unsynced_local(
|
|||||||
if !meta.is_dir() {
|
if !meta.is_dir() {
|
||||||
return Some(format!("{rel} is not a regular file or folder"));
|
return Some(format!("{rel} is not a regular file or folder"));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
let shown = if rel.is_empty() { "the folder" } else { rel };
|
||||||
let entries = match std::fs::read_dir(&path) {
|
let entries = match std::fs::read_dir(&path) {
|
||||||
Ok(entries) => entries,
|
Ok(entries) => entries,
|
||||||
Err(e) => return Some(format!("cannot read {rel}: {e}")),
|
Err(e) => return Some(format!("cannot read {shown}: {e}")),
|
||||||
};
|
};
|
||||||
for entry in entries {
|
for entry in entries {
|
||||||
let name = match entry {
|
let name = match entry {
|
||||||
Ok(entry) => entry.file_name(),
|
Ok(entry) => entry.file_name(),
|
||||||
Err(e) => return Some(format!("cannot read {rel}: {e}")),
|
Err(e) => return Some(format!("cannot read {shown}: {e}")),
|
||||||
};
|
};
|
||||||
let Some(name) = name.to_str() else {
|
let Some(name) = name.to_str() else {
|
||||||
return Some(format!("{rel} holds a name that is not valid UTF-8"));
|
return Some(format!("{shown} holds a name that is not valid UTF-8"));
|
||||||
};
|
};
|
||||||
// A download the engine left half done; it is the engine's to clean up.
|
// A download the engine left half done; it is the engine's to clean up.
|
||||||
if name.contains(".pdfs-tmp-") {
|
if name.contains(".pdfs-tmp-") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if let Some(reason) = unsynced_local(root, &format!("{rel}/{name}"), baseline, seen) {
|
if let Some(reason) = unsynced_local(root, &join_rel(rel, name), baseline, rules, seen) {
|
||||||
return Some(reason);
|
return Some(reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2154,7 +2328,15 @@ mod tests {
|
|||||||
let writing = HashSet::new();
|
let writing = HashSet::new();
|
||||||
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
||||||
let mut progress = no_progress();
|
let mut progress = no_progress();
|
||||||
walk_local_tree(&root, &root, &rules, &writing, &mut local, &mut progress).unwrap();
|
walk_local_tree(
|
||||||
|
&root,
|
||||||
|
&rules,
|
||||||
|
&writing,
|
||||||
|
&mut local,
|
||||||
|
&mut Unscanned::default(),
|
||||||
|
&mut progress,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
assert!(local.is_empty(), "the replacement root is genuinely empty");
|
assert!(local.is_empty(), "the replacement root is genuinely empty");
|
||||||
|
|
||||||
for size in 1..=3 {
|
for size in 1..=3 {
|
||||||
@@ -2170,7 +2352,15 @@ mod tests {
|
|||||||
// remounted folder resumes rather than staying wedged.
|
// remounted folder resumes rather than staying wedged.
|
||||||
std::fs::write(root.join("file0.txt"), b"back").unwrap();
|
std::fs::write(root.join("file0.txt"), b"back").unwrap();
|
||||||
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
let mut local: HashMap<String, LocalItem> = HashMap::new();
|
||||||
walk_local_tree(&root, &root, &rules, &writing, &mut local, &mut progress).unwrap();
|
walk_local_tree(
|
||||||
|
&root,
|
||||||
|
&rules,
|
||||||
|
&writing,
|
||||||
|
&mut local,
|
||||||
|
&mut Unscanned::default(),
|
||||||
|
&mut progress,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
let baseline: HashMap<String, ()> = [("file0.txt".to_string(), ())].into_iter().collect();
|
let baseline: HashMap<String, ()> = [("file0.txt".to_string(), ())].into_iter().collect();
|
||||||
assert!(guard_local_wipe(&filter_baseline(&baseline, &rules), &local).is_ok());
|
assert!(guard_local_wipe(&filter_baseline(&baseline, &rules), &local).is_ok());
|
||||||
|
|
||||||
@@ -2475,33 +2665,176 @@ mod tests {
|
|||||||
|_: &str| {}
|
|_: &str| {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A directory the pass cannot read must fail the pass. Omitting it would
|
/// Scan `root` with no rules, returning what it found and left out.
|
||||||
/// hand reconciliation a baseline-minus-subtree, which it reads as the user
|
fn scan(root: &Path) -> Result<(HashMap<String, LocalItem>, Unscanned), String> {
|
||||||
/// having deleted that subtree and propagates to Drive (B55).
|
let mut out = HashMap::new();
|
||||||
|
let mut unscanned = Unscanned::default();
|
||||||
|
let mut progress = no_progress();
|
||||||
|
walk_local_tree(
|
||||||
|
root,
|
||||||
|
&rules_for(&[]),
|
||||||
|
&HashSet::new(),
|
||||||
|
&mut out,
|
||||||
|
&mut unscanned,
|
||||||
|
&mut progress,
|
||||||
|
)?;
|
||||||
|
Ok((out, unscanned))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sorted_keys<V>(map: &HashMap<String, V>) -> Vec<&str> {
|
||||||
|
let mut keys: Vec<&str> = map.keys().map(String::as_str).collect();
|
||||||
|
keys.sort_unstable();
|
||||||
|
keys
|
||||||
|
}
|
||||||
|
|
||||||
|
/// B196, the report in #33: a folder the user may not read, such as a
|
||||||
|
/// container's root-owned cache, is left out of the pass and named, and
|
||||||
|
/// everything around it still scans. It used to fail the whole pass, so
|
||||||
|
/// nothing else in the tree ever synced again.
|
||||||
#[test]
|
#[test]
|
||||||
fn an_unreadable_subdirectory_fails_the_scan_instead_of_shrinking_it() {
|
fn an_unreadable_subdirectory_is_left_out_and_the_rest_scans() {
|
||||||
use std::os::unix::fs::PermissionsExt as _;
|
use std::os::unix::fs::PermissionsExt as _;
|
||||||
|
|
||||||
let root = sync_test_dir("scan-eacces");
|
let root = sync_test_dir("scan-eacces");
|
||||||
std::fs::write(root.join("keep.txt"), b"a").unwrap();
|
std::fs::write(root.join("keep.txt"), b"a").unwrap();
|
||||||
let locked = root.join("locked");
|
std::fs::create_dir_all(root.join("docker/cache")).unwrap();
|
||||||
|
std::fs::write(root.join("docker/compose.yml"), b"c").unwrap();
|
||||||
|
let locked = root.join("docker/cache/locked");
|
||||||
std::fs::create_dir(&locked).unwrap();
|
std::fs::create_dir(&locked).unwrap();
|
||||||
std::fs::write(locked.join("inner.txt"), b"b").unwrap();
|
std::fs::write(locked.join("inner.txt"), b"b").unwrap();
|
||||||
std::fs::set_permissions(&locked, std::fs::Permissions::from_mode(0o000)).unwrap();
|
std::fs::set_permissions(&locked, std::fs::Permissions::from_mode(0o000)).unwrap();
|
||||||
|
|
||||||
let rules = rules_for(&[]);
|
let result = scan(&root);
|
||||||
let writing = HashSet::new();
|
|
||||||
let mut out = HashMap::new();
|
|
||||||
let mut progress = no_progress();
|
|
||||||
let result = walk_local_tree(&root, &root, &rules, &writing, &mut out, &mut progress);
|
|
||||||
|
|
||||||
std::fs::set_permissions(&locked, std::fs::Permissions::from_mode(0o700)).unwrap();
|
std::fs::set_permissions(&locked, std::fs::Permissions::from_mode(0o700)).unwrap();
|
||||||
std::fs::remove_dir_all(&root).unwrap();
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
|
||||||
let error = result.expect_err("an unreadable directory must abort the pass");
|
let (out, unscanned) = result.expect("one unreadable folder must not fail the pass");
|
||||||
assert!(
|
assert_eq!(
|
||||||
error.contains("locked"),
|
sorted_keys(&out),
|
||||||
"the error should name the subtree it could not read: {error}"
|
vec!["docker", "docker/cache", "docker/compose.yml", "keep.txt"]
|
||||||
|
);
|
||||||
|
assert!(unscanned.covers("docker/cache/locked"));
|
||||||
|
assert!(unscanned.covers("docker/cache/locked/inner.txt"));
|
||||||
|
assert!(!unscanned.covers("docker/cache"));
|
||||||
|
let report = unscanned.report();
|
||||||
|
assert_eq!(report.len(), 1);
|
||||||
|
assert!(report[0].starts_with("docker/cache/locked ("), "{report:?}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A folder with read but no search permission lists its names but cannot
|
||||||
|
/// `stat` them. Whatever it did list must go with it: a half-read folder
|
||||||
|
/// is as unknown as an unread one.
|
||||||
|
#[test]
|
||||||
|
fn a_listable_but_unsearchable_folder_is_left_out_whole() {
|
||||||
|
use std::os::unix::fs::PermissionsExt as _;
|
||||||
|
|
||||||
|
let root = sync_test_dir("scan-no-search");
|
||||||
|
std::fs::write(root.join("keep.txt"), b"a").unwrap();
|
||||||
|
let half = root.join("half");
|
||||||
|
std::fs::create_dir(&half).unwrap();
|
||||||
|
std::fs::write(half.join("one.txt"), b"1").unwrap();
|
||||||
|
std::fs::write(half.join("two.txt"), b"2").unwrap();
|
||||||
|
std::fs::set_permissions(&half, std::fs::Permissions::from_mode(0o400)).unwrap();
|
||||||
|
|
||||||
|
let result = scan(&root);
|
||||||
|
|
||||||
|
std::fs::set_permissions(&half, std::fs::Permissions::from_mode(0o700)).unwrap();
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
|
||||||
|
let (out, unscanned) = result.unwrap();
|
||||||
|
// Each entry fails its own `stat` and is left out by name.
|
||||||
|
assert_eq!(sorted_keys(&out), vec!["half", "keep.txt"]);
|
||||||
|
assert!(unscanned.covers("half/one.txt"));
|
||||||
|
assert!(unscanned.covers("half/two.txt"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The other half of B196: what was left out is not a deletion, and not a
|
||||||
|
/// download target either. Its baseline rows leave the wipe guard's set
|
||||||
|
/// and a push pass's deletions, and its paths leave classification.
|
||||||
|
#[test]
|
||||||
|
fn a_path_the_scan_left_out_is_never_a_local_deletion() {
|
||||||
|
let mut baseline = baseline_with("keep.txt", 1, 1);
|
||||||
|
baseline.extend(baseline_with("locked", 0, 0));
|
||||||
|
baseline.extend(baseline_with("locked/inner.txt", 1, 1));
|
||||||
|
baseline.extend(baseline_with("gone.txt", 1, 1));
|
||||||
|
let local: HashMap<String, LocalItem> = [("keep.txt".to_string(), local_item(false))]
|
||||||
|
.into_iter()
|
||||||
|
.collect();
|
||||||
|
let mut unscanned = Unscanned::default();
|
||||||
|
unscanned.unreadable("locked".to_string(), "Permission denied");
|
||||||
|
let rules = rules_for(&[]);
|
||||||
|
|
||||||
|
let tracked = tracked_baseline(&baseline, &rules, &unscanned);
|
||||||
|
assert_eq!(sorted_keys(&tracked), vec!["gone.txt", "keep.txt"]);
|
||||||
|
assert_eq!(local_deletions(&tracked, &local), vec!["gone.txt"]);
|
||||||
|
|
||||||
|
// Every tracked path but one is gone, and the guard still lets the
|
||||||
|
// pass run: one survivor proves the tree is there.
|
||||||
|
assert!(guard_local_wipe(&tracked, &local).is_ok());
|
||||||
|
// With everything readable left out, nothing is tracked, so nothing
|
||||||
|
// can be lost and the guard has nothing to object to.
|
||||||
|
let mut all = Unscanned::default();
|
||||||
|
all.unreadable("keep.txt".to_string(), "Permission denied");
|
||||||
|
all.unreadable("locked".to_string(), "Permission denied");
|
||||||
|
all.vanished("gone.txt".to_string());
|
||||||
|
assert!(tracked_baseline(&baseline, &rules, &all).is_empty());
|
||||||
|
|
||||||
|
let remote: HashMap<String, RemoteItem> = HashMap::new();
|
||||||
|
let mut order = classification_order(&local, &remote, &baseline, &rules);
|
||||||
|
order.retain(|rel| !unscanned.covers(rel));
|
||||||
|
order.sort_unstable();
|
||||||
|
assert_eq!(order, vec!["gone.txt", "keep.txt"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn unscanned_covers_a_path_and_what_is_under_it_but_not_its_siblings() {
|
||||||
|
let mut unscanned = Unscanned::default();
|
||||||
|
unscanned.unreadable("a/locked".to_string(), "Permission denied");
|
||||||
|
unscanned.vanished("b.txt".to_string());
|
||||||
|
|
||||||
|
assert!(unscanned.covers("a/locked"));
|
||||||
|
assert!(unscanned.covers("a/locked/x/y.txt"));
|
||||||
|
assert!(unscanned.covers("b.txt"));
|
||||||
|
assert!(!unscanned.covers("a"));
|
||||||
|
assert!(!unscanned.covers("a/locked2"));
|
||||||
|
assert!(!unscanned.covers("b.txt.bak"));
|
||||||
|
// A file that only vanished mid-scan is not worth telling anyone about.
|
||||||
|
assert_eq!(unscanned.report(), vec!["a/locked (Permission denied)"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// B197: a push pass read its deletions from the raw baseline, so a path
|
||||||
|
/// synced before it became ignored, which the walk skips, was trashed on
|
||||||
|
/// Drive, and the switch the push pass ran for then evicted the local copy.
|
||||||
|
#[test]
|
||||||
|
fn a_push_pass_never_reads_an_ignored_path_as_deleted() {
|
||||||
|
let mut baseline = baseline_with("notes.md", 1, 1);
|
||||||
|
baseline.extend(baseline_with("node_modules", 0, 0));
|
||||||
|
baseline.extend(baseline_with("node_modules/x/index.js", 1, 1));
|
||||||
|
baseline.extend(baseline_with("old.md", 1, 1));
|
||||||
|
let local: HashMap<String, LocalItem> = [("notes.md".to_string(), local_item(false))]
|
||||||
|
.into_iter()
|
||||||
|
.collect();
|
||||||
|
let rules = rules_for(&["node_modules/"]);
|
||||||
|
|
||||||
|
let tracked = tracked_baseline(&baseline, &rules, &Unscanned::default());
|
||||||
|
|
||||||
|
assert_eq!(local_deletions(&tracked, &local), vec!["old.md"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Deletions come out shallowest first, so a trashed folder can take its
|
||||||
|
/// children with it.
|
||||||
|
#[test]
|
||||||
|
fn local_deletions_come_out_shallowest_first() {
|
||||||
|
let mut baseline = baseline_with("d/e/f.txt", 1, 1);
|
||||||
|
baseline.extend(baseline_with("d", 0, 0));
|
||||||
|
baseline.extend(baseline_with("d/e", 0, 0));
|
||||||
|
let local: HashMap<String, LocalItem> = HashMap::new();
|
||||||
|
let tracked = tracked_baseline(&baseline, &rules_for(&[]), &Unscanned::default());
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
local_deletions(&tracked, &local),
|
||||||
|
vec!["d", "d/e", "d/e/f.txt"]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2593,6 +2926,94 @@ mod tests {
|
|||||||
assert_eq!(reason, None);
|
assert_eq!(reason, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---- B198: going online-only never evicts what Drive does not have -----
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_fully_synced_mirror_folder_may_go_online_only() {
|
||||||
|
let (root, baseline) = synced_subtree("evict-synced");
|
||||||
|
let reason = mirror_tree_unsynced(&root, &baseline, &rules_for(&[]));
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
assert_eq!(reason, None);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The case that lost data: `.git/` is ignored by default, so no pass ever
|
||||||
|
/// uploads it, and the eviction deleted it with the rest.
|
||||||
|
#[test]
|
||||||
|
fn an_ignored_folder_only_this_disk_has_holds_the_switch_back() {
|
||||||
|
let (root, baseline) = synced_subtree("evict-ignored");
|
||||||
|
std::fs::create_dir(root.join(".git")).unwrap();
|
||||||
|
std::fs::write(root.join(".git/HEAD"), b"ref").unwrap();
|
||||||
|
let reason = mirror_tree_unsynced(&root, &baseline, &rules_for(&[".git/"]));
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
let reason = reason.expect("an ignored folder is only on this disk");
|
||||||
|
assert!(
|
||||||
|
reason.contains(".git") && reason.contains("excluded"),
|
||||||
|
"{reason}"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An ignored row stays in the baseline for good once its file is gone, so
|
||||||
|
/// counting it as a deletion not carried up would hold the switch forever.
|
||||||
|
#[test]
|
||||||
|
fn a_deleted_ignored_path_does_not_hold_the_switch_back() {
|
||||||
|
let (root, mut baseline) = synced_subtree("evict-ignored-gone");
|
||||||
|
baseline.insert(
|
||||||
|
"build/out.o".to_string(),
|
||||||
|
StoredSyncEntry {
|
||||||
|
rel_path: "build/out.o".to_string(),
|
||||||
|
..baseline["dir/a.txt"].clone()
|
||||||
|
},
|
||||||
|
);
|
||||||
|
let rules = rules_for(&["build/"]);
|
||||||
|
let ignored = mirror_tree_unsynced(&root, &baseline, &rules);
|
||||||
|
let tracked = mirror_tree_unsynced(&root, &baseline, &rules_for(&[]));
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
assert_eq!(ignored, None);
|
||||||
|
assert!(tracked.unwrap().contains("build/out.o"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn an_edit_after_the_last_pass_holds_the_switch_back() {
|
||||||
|
let (root, baseline) = synced_subtree("evict-edit");
|
||||||
|
std::fs::write(root.join("dir/sub/b.txt"), b"edited since").unwrap();
|
||||||
|
let reason = mirror_tree_unsynced(&root, &baseline, &rules_for(&[]));
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
assert!(reason.unwrap().contains("dir/sub/b.txt"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_new_file_at_the_root_holds_the_switch_back() {
|
||||||
|
let (root, baseline) = synced_subtree("evict-new");
|
||||||
|
std::fs::write(root.join("new.txt"), b"n").unwrap();
|
||||||
|
let reason = mirror_tree_unsynced(&root, &baseline, &rules_for(&[]));
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
assert!(reason.unwrap().contains("new.txt"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The folder B196 now leaves out of the pass instead of failing it is,
|
||||||
|
/// by the same token, something the eviction must not delete.
|
||||||
|
#[test]
|
||||||
|
fn an_unreadable_folder_holds_the_switch_back() {
|
||||||
|
use std::os::unix::fs::PermissionsExt as _;
|
||||||
|
|
||||||
|
let (root, baseline) = synced_subtree("evict-eacces");
|
||||||
|
let locked = root.join("dir/sub");
|
||||||
|
std::fs::set_permissions(&locked, std::fs::Permissions::from_mode(0o000)).unwrap();
|
||||||
|
let reason = mirror_tree_unsynced(&root, &baseline, &rules_for(&[]));
|
||||||
|
std::fs::set_permissions(&locked, std::fs::Permissions::from_mode(0o700)).unwrap();
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
assert!(reason.unwrap().contains("dir/sub"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_symlink_holds_the_switch_back() {
|
||||||
|
let (root, baseline) = synced_subtree("evict-symlink");
|
||||||
|
std::os::unix::fs::symlink("dir/a.txt", root.join("link")).unwrap();
|
||||||
|
let reason = mirror_tree_unsynced(&root, &baseline, &rules_for(&[]));
|
||||||
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
assert!(reason.unwrap().contains("link"));
|
||||||
|
}
|
||||||
|
|
||||||
/// The same rule one level up: if the sync root itself cannot be read, the
|
/// The same rule one level up: if the sync root itself cannot be read, the
|
||||||
/// pass sees nothing, and "nothing" must never mean "delete everything".
|
/// pass sees nothing, and "nothing" must never mean "delete everything".
|
||||||
#[test]
|
#[test]
|
||||||
@@ -2607,7 +3028,14 @@ mod tests {
|
|||||||
let writing = HashSet::new();
|
let writing = HashSet::new();
|
||||||
let mut out = HashMap::new();
|
let mut out = HashMap::new();
|
||||||
let mut progress = no_progress();
|
let mut progress = no_progress();
|
||||||
let result = walk_local_tree(&root, &root, &rules, &writing, &mut out, &mut progress);
|
let result = walk_local_tree(
|
||||||
|
&root,
|
||||||
|
&rules,
|
||||||
|
&writing,
|
||||||
|
&mut out,
|
||||||
|
&mut Unscanned::default(),
|
||||||
|
&mut progress,
|
||||||
|
);
|
||||||
|
|
||||||
std::fs::set_permissions(&root, std::fs::Permissions::from_mode(0o700)).unwrap();
|
std::fs::set_permissions(&root, std::fs::Permissions::from_mode(0o700)).unwrap();
|
||||||
std::fs::remove_dir_all(&root).unwrap();
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
@@ -2628,30 +3056,40 @@ mod tests {
|
|||||||
let writing = HashSet::new();
|
let writing = HashSet::new();
|
||||||
let mut out = HashMap::new();
|
let mut out = HashMap::new();
|
||||||
let mut progress = no_progress();
|
let mut progress = no_progress();
|
||||||
assert!(walk_local_tree(&root, &root, &rules, &writing, &mut out, &mut progress).is_err());
|
assert!(
|
||||||
|
walk_local_tree(
|
||||||
|
&root,
|
||||||
|
&rules,
|
||||||
|
&writing,
|
||||||
|
&mut out,
|
||||||
|
&mut Unscanned::default(),
|
||||||
|
&mut progress
|
||||||
|
)
|
||||||
|
.is_err()
|
||||||
|
);
|
||||||
assert!(out.is_empty());
|
assert!(out.is_empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A name that is not valid UTF-8 cannot be keyed into the scan, so it
|
/// A name that is not valid UTF-8 cannot be keyed into the scan, but it
|
||||||
/// cannot be compared against the baseline either. Refusing the pass is the
|
/// cannot be in the baseline or on Drive either, so leaving it out reads as
|
||||||
/// only safe reading: skipping it would classify the file as deleted.
|
/// the deletion of nothing. It used to fail the pass (B196).
|
||||||
#[test]
|
#[test]
|
||||||
fn a_non_utf8_name_fails_the_scan() {
|
fn a_non_utf8_name_is_left_out_and_reported() {
|
||||||
use std::ffi::OsStr;
|
use std::ffi::OsStr;
|
||||||
use std::os::unix::ffi::OsStrExt as _;
|
use std::os::unix::ffi::OsStrExt as _;
|
||||||
|
|
||||||
let root = sync_test_dir("scan-non-utf8");
|
let root = sync_test_dir("scan-non-utf8");
|
||||||
std::fs::write(root.join(OsStr::from_bytes(b"bad\xffname")), b"x").unwrap();
|
std::fs::write(root.join(OsStr::from_bytes(b"bad\xffname")), b"x").unwrap();
|
||||||
|
std::fs::write(root.join("good.txt"), b"y").unwrap();
|
||||||
|
|
||||||
let rules = rules_for(&[]);
|
let result = scan(&root);
|
||||||
let writing = HashSet::new();
|
|
||||||
let mut out = HashMap::new();
|
|
||||||
let mut progress = no_progress();
|
|
||||||
let result = walk_local_tree(&root, &root, &rules, &writing, &mut out, &mut progress);
|
|
||||||
std::fs::remove_dir_all(&root).unwrap();
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
|
||||||
let error = result.expect_err("a name the scan cannot key must abort the pass");
|
let (out, unscanned) = result.unwrap();
|
||||||
assert!(error.contains("UTF-8"), "{error}");
|
assert_eq!(sorted_keys(&out), vec!["good.txt"]);
|
||||||
|
let report = unscanned.report();
|
||||||
|
assert_eq!(report.len(), 1);
|
||||||
|
assert!(report[0].contains("UTF-8"), "{report:?}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The complement: a scan that *can* read everything reports everything, so
|
/// The complement: a scan that *can* read everything reports everything, so
|
||||||
@@ -2670,9 +3108,14 @@ mod tests {
|
|||||||
let writing = HashSet::new();
|
let writing = HashSet::new();
|
||||||
let mut out = HashMap::new();
|
let mut out = HashMap::new();
|
||||||
let mut seen: Vec<String> = Vec::new();
|
let mut seen: Vec<String> = Vec::new();
|
||||||
let result = walk_local_tree(&root, &root, &rules, &writing, &mut out, &mut |rel| {
|
let result = walk_local_tree(
|
||||||
seen.push(rel.to_string())
|
&root,
|
||||||
});
|
&rules,
|
||||||
|
&writing,
|
||||||
|
&mut out,
|
||||||
|
&mut Unscanned::default(),
|
||||||
|
&mut |rel| seen.push(rel.to_string()),
|
||||||
|
);
|
||||||
std::fs::remove_dir_all(&root).unwrap();
|
std::fs::remove_dir_all(&root).unwrap();
|
||||||
|
|
||||||
result.unwrap();
|
result.unwrap();
|
||||||
|
|||||||
@@ -98,6 +98,11 @@ pub(super) struct Outcome {
|
|||||||
pub(super) errors: usize,
|
pub(super) errors: usize,
|
||||||
/// Files skipped because another process held them open for writing.
|
/// Files skipped because another process held them open for writing.
|
||||||
pub(super) deferred: usize,
|
pub(super) deferred: usize,
|
||||||
|
/// Paths the local scan could not read, left out of the pass. Not part of
|
||||||
|
/// [`is_empty`](Self::is_empty) or the summary: an unreadable folder stays
|
||||||
|
/// unreadable from one poll to the next, so the pass reports it once, when
|
||||||
|
/// the set changes, rather than on every poll.
|
||||||
|
pub(super) unscanned: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Outcome {
|
impl Outcome {
|
||||||
|
|||||||
@@ -90,6 +90,96 @@ pub(super) fn filter_baseline<'a, B>(
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The paths a local scan left out because it could not read them: a folder
|
||||||
|
/// it has no permission for, an entry that vanished between the listing and
|
||||||
|
/// its `stat`, a name that is not UTF-8.
|
||||||
|
///
|
||||||
|
/// A left-out path is not a deleted one. A pass drops everything an entry
|
||||||
|
/// covers from classification, exactly as it drops ignored paths, so a
|
||||||
|
/// baseline row under an unreadable folder is neither read as a local deletion
|
||||||
|
/// nor answered with a download into a folder the pass cannot write. Failing
|
||||||
|
/// the whole pass instead is what B55 did, and it left one root-owned folder
|
||||||
|
/// stopping every other file in the tree from syncing (B196).
|
||||||
|
#[derive(Default)]
|
||||||
|
pub(super) struct Unscanned {
|
||||||
|
covered: HashSet<String>,
|
||||||
|
/// The subset worth telling the user about, with why: an entry that only
|
||||||
|
/// vanished mid-scan is not, since the next pass sees it settled.
|
||||||
|
unreadable: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Unscanned {
|
||||||
|
/// Leave out `rel`, which vanished while the scan looked at it.
|
||||||
|
pub(super) fn vanished(&mut self, rel: String) {
|
||||||
|
self.covered.insert(rel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Leave out `rel`, which cannot be read for `reason`.
|
||||||
|
pub(super) fn unreadable(&mut self, rel: String, reason: &str) {
|
||||||
|
self.unreadable.push(format!("{rel} ({reason})"));
|
||||||
|
self.covered.insert(rel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Whether `rel` is a left-out path or lies under one.
|
||||||
|
pub(super) fn covers(&self, rel: &str) -> bool {
|
||||||
|
if self.covered.is_empty() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let mut at = rel;
|
||||||
|
loop {
|
||||||
|
if self.covered.contains(at) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
match at.rfind('/') {
|
||||||
|
Some(i) => at = &at[..i],
|
||||||
|
None => return false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The unreadable paths with their reasons, sorted, for the activity feed.
|
||||||
|
pub(super) fn report(&self) -> Vec<String> {
|
||||||
|
let mut lines = self.unreadable.clone();
|
||||||
|
lines.sort_unstable();
|
||||||
|
lines
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The baseline paths a pass can see: [`filter_baseline`], minus everything
|
||||||
|
/// under a path the scan could not read. This is the set [`guard_local_wipe`]
|
||||||
|
/// checks and the set a push pass reads deletions from, since a path outside
|
||||||
|
/// it is absent from the local walk by rule or by failure, never by loss.
|
||||||
|
pub(super) fn tracked_baseline<'a, B>(
|
||||||
|
baseline: &'a HashMap<String, B>,
|
||||||
|
rules: &IgnoreRules,
|
||||||
|
unscanned: &Unscanned,
|
||||||
|
) -> HashMap<String, &'a B> {
|
||||||
|
let mut tracked = filter_baseline(baseline, rules);
|
||||||
|
tracked.retain(|rel, _| !unscanned.covers(rel));
|
||||||
|
tracked
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The baseline paths a push pass has to trash on Drive: tracked, and gone
|
||||||
|
/// from the local walk. Shallowest first, so a trashed folder takes its
|
||||||
|
/// children with it.
|
||||||
|
///
|
||||||
|
/// Built from [`tracked_baseline`] rather than from the raw baseline. Reading
|
||||||
|
/// it raw trashed every synced path that later became ignored, because the walk
|
||||||
|
/// skips those, and the switch to on-demand that the push pass runs for then
|
||||||
|
/// deleted the local copy too (B197).
|
||||||
|
pub(super) fn local_deletions<B, L>(
|
||||||
|
tracked: &HashMap<String, &B>,
|
||||||
|
local: &HashMap<String, L>,
|
||||||
|
) -> Vec<String> {
|
||||||
|
let mut missing: Vec<String> = tracked
|
||||||
|
.keys()
|
||||||
|
.filter(|rel| !local.contains_key(*rel))
|
||||||
|
.cloned()
|
||||||
|
.collect();
|
||||||
|
missing.sort_by_key(|p| p.matches('/').count());
|
||||||
|
missing
|
||||||
|
}
|
||||||
|
|
||||||
/// Refuse to run a pass whose local side has vanished in its entirety.
|
/// Refuse to run a pass whose local side has vanished in its entirety.
|
||||||
///
|
///
|
||||||
/// When every baseline path is absent locally, the likely cause is an unavailable
|
/// When every baseline path is absent locally, the likely cause is an unavailable
|
||||||
|
|||||||
@@ -439,6 +439,10 @@ fn other_computer_row(ui: &Rc<Ui>, dev: &DeviceInfo) -> adw::ActionRow {
|
|||||||
menu.item(&gettext("Restore to This Computer…"), move || {
|
menu.item(&gettext("Restore to This Computer…"), move || {
|
||||||
prompt_restore_folders(&ui_c, Some((uid_c.clone(), name_c.clone())))
|
prompt_restore_folders(&ui_c, Some((uid_c.clone(), name_c.clone())))
|
||||||
});
|
});
|
||||||
|
let (ui_c, uid_c, name_c) = (ui.clone(), uid.clone(), name.clone());
|
||||||
|
menu.item(&gettext("Move to This Computer…"), move || {
|
||||||
|
prompt_migrate_device(&ui_c, &uid_c, &name_c)
|
||||||
|
});
|
||||||
menu.section();
|
menu.section();
|
||||||
let (ui_c, uid_c, name_c) = (ui.clone(), uid.clone(), name.clone());
|
let (ui_c, uid_c, name_c) = (ui.clone(), uid.clone(), name.clone());
|
||||||
menu.item(&gettext("Rename…"), move || {
|
menu.item(&gettext("Rename…"), move || {
|
||||||
@@ -1096,6 +1100,67 @@ pub(crate) fn prompt_adopt_device(ui: &Rc<Ui>, uid: &str, name: &str) {
|
|||||||
dialog.present(win.as_ref());
|
dialog.present(win.as_ref());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Ask before moving another computer's folders into this computer's backup,
|
||||||
|
/// then offer them for syncing here.
|
||||||
|
///
|
||||||
|
/// Destructive-looking on purpose: the other computer keeps its device but
|
||||||
|
/// loses its folders, and a copy of Proton Drive still running there would
|
||||||
|
/// watch them vanish.
|
||||||
|
pub(crate) fn prompt_migrate_device(ui: &Rc<Ui>, uid: &str, name: &str) {
|
||||||
|
let win = ui_window(ui);
|
||||||
|
let dialog = adw::AlertDialog::builder()
|
||||||
|
.heading(gettext("Move Backup to This Computer?"))
|
||||||
|
// Translators: {name} is the name of the other computer whose folders move to this one.
|
||||||
|
.body(gettext_f(
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton Drive, and you choose where they go on this computer. “{name}” stays in your account, without those folders.\n\nStop Proton Drive on “{name}” first. Otherwise it sees its folders disappear.",
|
||||||
|
&[("name", name)],
|
||||||
|
))
|
||||||
|
.build();
|
||||||
|
dialog.add_response("cancel", &gettext("Cancel"));
|
||||||
|
dialog.add_response("move", &gettext("Move Here"));
|
||||||
|
dialog.set_response_appearance("move", adw::ResponseAppearance::Destructive);
|
||||||
|
dialog.set_default_response(Some("cancel"));
|
||||||
|
dialog.set_close_response("cancel");
|
||||||
|
let ui = ui.clone();
|
||||||
|
let uid = uid.to_string();
|
||||||
|
// Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
let done = gettext_f("Moved the backup of “{name}”", &[("name", name)]);
|
||||||
|
dialog.connect_response(None, move |_, resp| {
|
||||||
|
if resp != "move" {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ui.busy_begin();
|
||||||
|
let rx = spawn_request(
|
||||||
|
ui.dirs.control_socket(),
|
||||||
|
Request::MigrateDevice { uid: uid.clone() },
|
||||||
|
);
|
||||||
|
let (ui, done) = (ui.clone(), done.clone());
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
|
let result = rx.recv().await;
|
||||||
|
ui.busy_end();
|
||||||
|
let failed = gettext("Couldn't move that backup");
|
||||||
|
match result {
|
||||||
|
Ok(Ok(Response::Ok { .. })) => {
|
||||||
|
reload_sync_pages(&ui);
|
||||||
|
toast(&ui, &done);
|
||||||
|
// The folders are this computer's now, so its own restore
|
||||||
|
// picker is where the user chooses their local paths.
|
||||||
|
prompt_restore_folders(&ui, None);
|
||||||
|
}
|
||||||
|
Ok(Ok(Response::Error { message, kind })) => {
|
||||||
|
toast_failure(&ui, &failed, &message, kind)
|
||||||
|
}
|
||||||
|
_ => toast_error(
|
||||||
|
&ui,
|
||||||
|
&failed,
|
||||||
|
&gettext("The Proton Drive service didn't respond."),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
dialog.present(win.as_ref());
|
||||||
|
}
|
||||||
|
|
||||||
/// Run a mutation raised from Computers or Locations and reload the page on success.
|
/// Run a mutation raised from Computers or Locations and reload the page on success.
|
||||||
pub(crate) fn run_devices_mutation(ui: &Rc<Ui>, req: Request, done: &str, failed: &str) {
|
pub(crate) fn run_devices_mutation(ui: &Rc<Ui>, req: Request, done: &str, failed: &str) {
|
||||||
ui.busy_begin();
|
ui.busy_begin();
|
||||||
|
|||||||
+10
-2
@@ -310,8 +310,10 @@ its changes go through the queue like My files.
|
|||||||
A filesystem watcher (`notify`) and a remote poll every 120 s feed a debounced pass (2 s, at most
|
A filesystem watcher (`notify`) and a remote poll every 120 s feed a debounced pass (2 s, at most
|
||||||
30 s). Passes are serialized per daemon. A pass:
|
30 s). Passes are serialized per daemon. A pass:
|
||||||
|
|
||||||
1. **Walks the local tree.** Any `readdir`, metadata or permission failure marks the scan
|
1. **Walks the local tree.** A path the user may not read, an entry that vanishes mid-scan and a
|
||||||
incomplete, and an incomplete scan cannot delete anything.
|
name that is not UTF-8 are left out, and the pass drops everything under them, as it drops
|
||||||
|
ignored paths, so a left-out path is never read as deleted. An unreadable root and any other
|
||||||
|
I/O error fail the pass.
|
||||||
2. **Walks the remote tree.**
|
2. **Walks the remote tree.**
|
||||||
3. **Loads the baseline**, the `sync_entry` rows: both sides as of the last successful pass.
|
3. **Loads the baseline**, the `sync_entry` rows: both sides as of the last successful pass.
|
||||||
4. **Classifies each path** by comparing local, remote and baseline, with `(mtime, size)` as the
|
4. **Classifies each path** by comparing local, remote and baseline, with `(mtime, size)` as the
|
||||||
@@ -377,6 +379,12 @@ Restore lists the device's folders, proposes a local path from the profile, and
|
|||||||
adds a synced folder bound to the remote uid. The download is an ordinary pass against an empty
|
adds a synced folder bound to the remote uid. The download is an ordinary pass against an empty
|
||||||
baseline. The user side is in [RECOVERY.md](RECOVERY.md).
|
baseline. The user side is in [RECOVERY.md](RECOVERY.md).
|
||||||
|
|
||||||
|
`Core::migrate_device` moves another device's top-level folders under this machine's device root.
|
||||||
|
Device roots are separate shares on the main volume, so each folder is one server-side move that
|
||||||
|
keeps its uid. A name already taken here gets the other device's name as a suffix. A synced folder
|
||||||
|
that already tracked one of them keeps its `remote_uid` and only has its `remote_share_id`
|
||||||
|
re-pointed. The moved folders are then offered by the ordinary restore.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. Control protocol
|
## 8. Control protocol
|
||||||
|
|||||||
@@ -100,6 +100,9 @@ a live account since.
|
|||||||
|
|
||||||
| Entry | Title |
|
| Entry | Title |
|
||||||
|---|---|
|
|---|---|
|
||||||
|
| [B198](#b198--switching-to-online-only-deletes-local-files-that-never-reached-drive) | Switching to online-only deletes local files that never reached Drive |
|
||||||
|
| [B197](#b197--switching-to-online-only-trashes-synced-files-that-became-ignored) | Switching to online-only trashes synced files that became ignored |
|
||||||
|
| [B196](#b196--one-unreadable-folder-stops-the-whole-synced-folder-from-syncing) | One unreadable folder stops the whole synced folder from syncing |
|
||||||
| [B195](#b195--the-app-crashes-when-proton-asks-for-a-captcha-on-secureblue) | The app crashes when Proton asks for a CAPTCHA on secureblue |
|
| [B195](#b195--the-app-crashes-when-proton-asks-for-a-captcha-on-secureblue) | The app crashes when Proton asks for a CAPTCHA on secureblue |
|
||||||
| [B193](#b193--deleting-a-file-whose-create-failed-can-trash-a-file-of-the-users-on-drive) | Deleting a file whose create failed can trash a file of the user's on Drive |
|
| [B193](#b193--deleting-a-file-whose-create-failed-can-trash-a-file-of-the-users-on-drive) | Deleting a file whose create failed can trash a file of the user's on Drive |
|
||||||
| [B191](#b191--a-file-deleted-after-its-create-failed-and-was-written-again-can-stay-on-drive) | A file deleted after its create failed and was written again can stay on Drive |
|
| [B191](#b191--a-file-deleted-after-its-create-failed-and-was-written-again-can-stay-on-drive) | A file deleted after its create failed and was written again can stay on Drive |
|
||||||
@@ -298,6 +301,95 @@ a live account since.
|
|||||||
|
|
||||||
Newest first.
|
Newest first.
|
||||||
|
|
||||||
|
### B198 — Switching to online-only deletes local files that never reached Drive
|
||||||
|
|
||||||
|
**Status:** Fixed (unverified).
|
||||||
|
**Found:** 2026-10-08, reading the switch while fixing B196.
|
||||||
|
**Where:** `crates/pdfs-fuse/src/devices.rs`, `Core::apply_sync_folder_mode`;
|
||||||
|
`crates/pdfs-fuse/src/sync.rs`, `mirror_tree_unsynced`
|
||||||
|
|
||||||
|
**Repro:** Mirror a project folder with a `.git/` in it, then switch it to **Online only**.
|
||||||
|
`.git/` is gone from the disk and was never on Drive.
|
||||||
|
|
||||||
|
**Cause.** The switch evicts the whole local tree once the folder is `idle`. `idle` only says the
|
||||||
|
last pass applied everything it tried, and a pass never tries an ignored path (`.git/` is ignored
|
||||||
|
by default), a symlink, or a folder it cannot read (B196). It also defers a file that is open for
|
||||||
|
writing without leaving `idle`, and a file can change after the pass ends. The eviction deleted
|
||||||
|
all of those.
|
||||||
|
|
||||||
|
**Fix.** Before the mode is written and anything is evicted, the switch walks the folder against
|
||||||
|
the baseline, as a move out of a mirror folder already does, and refuses when something is only on
|
||||||
|
this disk. The message names the path; an ignored one is called excluded from sync. A tracked file
|
||||||
|
deleted here but not yet on Drive also refuses. An ignored one does not, since its baseline row
|
||||||
|
stays for good and would hold the switch forever.
|
||||||
|
|
||||||
|
**Test:** unit tests `a_fully_synced_mirror_folder_may_go_online_only`,
|
||||||
|
`an_ignored_folder_only_this_disk_has_holds_the_switch_back`,
|
||||||
|
`a_deleted_ignored_path_does_not_hold_the_switch_back`,
|
||||||
|
`an_edit_after_the_last_pass_holds_the_switch_back`, `a_new_file_at_the_root_holds_the_switch_back`,
|
||||||
|
`an_unreadable_folder_holds_the_switch_back` and `a_symlink_holds_the_switch_back`. The switch
|
||||||
|
itself has not been driven against a live account.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### B197 — Switching to online-only trashes synced files that became ignored
|
||||||
|
|
||||||
|
**Status:** Fixed (unverified).
|
||||||
|
**Found:** 2026-10-08, reading the push pass while fixing B196.
|
||||||
|
**Where:** `crates/pdfs-fuse/src/sync.rs`, `Core::push_pass`; `crates/pdfs-fuse/src/sync/planner.rs`,
|
||||||
|
`local_deletions`
|
||||||
|
|
||||||
|
**Repro:** Mirror a folder until `build/` is on Drive, add `build/` to `.pdfsignore`, then switch
|
||||||
|
the folder to **Online only**. `build/` goes to the Drive trash, and the switch then deletes the
|
||||||
|
local copy.
|
||||||
|
|
||||||
|
**Cause.** The push pass that runs before the switch read its deletions as "in the baseline, not in
|
||||||
|
the local walk". The walk skips ignored paths, so every synced path that later became ignored read
|
||||||
|
as deleted. A full pass does not do this: it drops ignored paths from classification, which is
|
||||||
|
what the user guide promises ("Ignoring never deletes anything").
|
||||||
|
|
||||||
|
**Fix.** The push pass reads its deletions from the same filtered baseline the wipe guard checks:
|
||||||
|
without ignored paths, and without paths the scan could not read (B196).
|
||||||
|
|
||||||
|
**Test:** unit tests `a_push_pass_never_reads_an_ignored_path_as_deleted` and
|
||||||
|
`local_deletions_come_out_shallowest_first`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### B196 — One unreadable folder stops the whole synced folder from syncing
|
||||||
|
|
||||||
|
**Status:** Fixed (unverified). The reporter has not run the fix yet.
|
||||||
|
**Found:** 2026-10-08, [#33](https://github.com/narrrl/proton-drive-linux/issues/33). A synced
|
||||||
|
`~/Documents` held a restic cache a Docker container had created, which the user may not read.
|
||||||
|
Every pass failed with `Couldn't sync Documents: read …/restic/cache/…/snapshots: Permission
|
||||||
|
denied`, and nothing else in `Documents` synced.
|
||||||
|
**Where:** `crates/pdfs-fuse/src/sync.rs`, `walk_local_tree`; `crates/pdfs-fuse/src/sync/planner.rs`,
|
||||||
|
`Unscanned`
|
||||||
|
|
||||||
|
**Repro:** In a mirror folder, `sudo mkdir locked && sudo chmod 700 locked`, then sync.
|
||||||
|
|
||||||
|
**Cause.** B55 made every scan failure fatal to the pass, because a path left out of the scan read
|
||||||
|
as a local deletion and was trashed on Drive. That was safe, but a folder the user may not read is
|
||||||
|
not transient: the pass failed on every poll, for good. The same held for a file deleted between
|
||||||
|
the listing and its `stat`, which a busy folder hits now and then, and for a name that is not UTF-8.
|
||||||
|
|
||||||
|
**Fix.** The scan leaves such a path out and records it, and the pass drops everything under it
|
||||||
|
from classification, the wipe guard and the push pass's deletions, as it already did for ignored
|
||||||
|
paths. A left-out path is then neither deleted on Drive nor downloaded into. A folder that lists
|
||||||
|
but does not allow `stat` is left out whole. An unreadable or absent root, and every other I/O
|
||||||
|
error, still fails the pass. The activity feed names the unreadable paths once each time the set
|
||||||
|
changes, and the folder stays `idle`. Adding the folder to `.pdfsignore` was already a workaround
|
||||||
|
and still silences the report.
|
||||||
|
|
||||||
|
**Test:** unit tests `an_unreadable_subdirectory_is_left_out_and_the_rest_scans`,
|
||||||
|
`a_listable_but_unsearchable_folder_is_left_out_whole`,
|
||||||
|
`a_path_the_scan_left_out_is_never_a_local_deletion`,
|
||||||
|
`unscanned_covers_a_path_and_what_is_under_it_but_not_its_siblings` and
|
||||||
|
`a_non_utf8_name_is_left_out_and_reported`. `an_unreadable_root_fails_the_scan` and
|
||||||
|
`an_absent_root_fails_the_scan` still hold.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### B195 — The app crashes when Proton asks for a CAPTCHA on secureblue
|
### B195 — The app crashes when Proton asks for a CAPTCHA on secureblue
|
||||||
|
|
||||||
**Status:** Fixed (unverified). Nobody has run the fix on secureblue yet.
|
**Status:** Fixed (unverified). Nobody has run the fix on secureblue yet.
|
||||||
@@ -4822,6 +4914,10 @@ subdirectory holding a file, asserting the error names the subtree),
|
|||||||
strictness must not cost a working pass, so a healthy tree still reports every entry and still
|
strictness must not cost a working pass, so a healthy tree still reports every entry and still
|
||||||
skips symlinks by design.
|
skips symlinks by design.
|
||||||
|
|
||||||
|
B196 later relaxed this: a path the user may not read, an entry that vanishes mid-scan and a name
|
||||||
|
that is not UTF-8 are left out of the pass instead of failing it, and the pass drops everything
|
||||||
|
under them from classification, so the B55 guarantee holds without the wedge.
|
||||||
|
|
||||||
Not covered: transient I/O errors, and an entry that disappears between `read_dir` and `stat`.
|
Not covered: transient I/O errors, and an entry that disappears between `read_dir` and `stat`.
|
||||||
Both are races that would need a filesystem shim to force; the code path they take is the same
|
Both are races that would need a filesystem shim to force; the code path they take is the same
|
||||||
`symlink_metadata` failure the permission test drives.
|
`symlink_metadata` failure the permission test drives.
|
||||||
|
|||||||
@@ -11,6 +11,27 @@ scratch (user data in `staging/` and `recovery/` is never touched by this).
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **One unreadable folder stopped a synced folder from syncing at all.** A folder you may not
|
||||||
|
read, such as a cache a container created, failed every pass, so nothing else in the synced
|
||||||
|
folder reached Drive. Such a folder is now left out and named once in the activity feed, and
|
||||||
|
everything around it syncs. A file deleted during a scan, and a name that is not UTF-8, no
|
||||||
|
longer fail the pass either.
|
||||||
|
([#33](https://github.com/narrrl/proton-drive-linux/issues/33))
|
||||||
|
- **Switching a folder to online-only could delete files that were never on Drive.** Ignored
|
||||||
|
folders such as `.git/`, symlinks, unreadable folders and files changed after the last sync were
|
||||||
|
deleted with the local copy. The switch now refuses and names what is only on this computer.
|
||||||
|
- **Switching to online-only trashed synced files that had become ignored.** Adding a synced path
|
||||||
|
to `.pdfsignore` and then switching moved it to the Drive trash. Ignoring never deletes now, as
|
||||||
|
the user guide says.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **Move another computer's backup to this one.** **Move to This Computer…** on the Computers page,
|
||||||
|
or `pdfs devices migrate UID`, moves every folder another computer backs up, for example an old
|
||||||
|
Windows PC, into this computer's backup on Proton Drive. Then it offers them for syncing here. The
|
||||||
|
folders move on Proton Drive itself, so nothing is uploaded again. The other computer stays in the
|
||||||
|
account, without those folders.
|
||||||
|
|
||||||
## [3.1.2] — 2026-10-08
|
## [3.1.2] — 2026-10-08
|
||||||
|
|
||||||
Schema: **42**, unchanged.
|
Schema: **42**, unchanged.
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ commands are for scripts and for cases where the mount is not available.
|
|||||||
| `pdfs devices rename UID NAME` | Rename a computer. |
|
| `pdfs devices rename UID NAME` | Rename a computer. |
|
||||||
| `pdfs devices rm UID` | Remove a computer and its backup from the account. |
|
| `pdfs devices rm UID` | Remove a computer and its backup from the account. |
|
||||||
| `pdfs devices adopt UID` | Make this machine continue another computer's backup, for example after a reinstall. `--clear` returns to matching by hostname. |
|
| `pdfs devices adopt UID` | Make this machine continue another computer's backup, for example after a reinstall. `--clear` returns to matching by hostname. |
|
||||||
|
| `pdfs devices migrate UID [--yes]` | Move another computer's folders into this computer's backup, then restore them here like `pdfs sync restore`. The other computer stays registered, without those folders. `--yes` skips the confirmation and accepts every proposed path. See [RECOVERY.md](RECOVERY.md). |
|
||||||
|
|
||||||
## Trash
|
## Trash
|
||||||
|
|
||||||
|
|||||||
@@ -133,6 +133,29 @@ pdfs sync restore --device UID
|
|||||||
The folders stay part of the other computer's backup and sync in both directions. This machine
|
The folders stay part of the other computer's backup and sync in both directions. This machine
|
||||||
does not take over that computer's backup.
|
does not take over that computer's backup.
|
||||||
|
|
||||||
|
### Moving another computer's backup here
|
||||||
|
|
||||||
|
To switch computers for good, for example from a Windows PC to this Linux machine, move the old
|
||||||
|
computer's folders into this computer's backup instead. Use **Move to This Computer…** on that
|
||||||
|
computer's row, or:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pdfs devices list # find the old computer's UID
|
||||||
|
pdfs devices migrate UID
|
||||||
|
```
|
||||||
|
|
||||||
|
Each folder moves on Proton Drive itself, so nothing is uploaded again and no storage is used
|
||||||
|
twice. A folder whose name this computer already uses gets the old computer's name added, for
|
||||||
|
example `Documents (DESKTOP-1)`. The restore picker then opens, as in
|
||||||
|
[Step 3](#step-3-restore-the-folders), so you choose where each folder goes here.
|
||||||
|
|
||||||
|
The old computer stays in your account, without those folders. Unlike
|
||||||
|
[adoption](#step-2-continue-the-old-computers-backup), this machine keeps its own name and backup.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> Stop Proton Drive on the old computer first. A client still running there sees its folders
|
||||||
|
> disappear, and may upload them again as new.
|
||||||
|
|
||||||
## 3. How the restore works
|
## 3. How the restore works
|
||||||
|
|
||||||
This section is for the curious and for anyone debugging a restore.
|
This section is for the curious and for anyone debugging a restore.
|
||||||
|
|||||||
+9
-1
@@ -96,7 +96,9 @@ app and in the web app.
|
|||||||
Each synced folder can also be switched to **Online only**. The local copy is replaced by a mount
|
Each synced folder can also be switched to **Online only**. The local copy is replaced by a mount
|
||||||
of the folder, so the files stay visible but take no disk space until opened. Switch with the
|
of the folder, so the files stay visible but take no disk space until opened. Switch with the
|
||||||
**Synced / Online only** switch on the folder's card, or `pdfs sync mode <id> ondemand` and back
|
**Synced / Online only** switch on the folder's card, or `pdfs sync mode <id> ondemand` and back
|
||||||
with `pdfs sync mode <id> mirror`. `pdfs locations` lists every local place the service occupies.
|
with `pdfs sync mode <id> mirror`. The switch waits until everything in the folder is on Proton
|
||||||
|
Drive, and refuses while the folder holds something that never goes there: an ignored path such
|
||||||
|
as `.git/`, a symlink, or a folder you may not read. The message names it. `pdfs locations` lists every local place the service occupies.
|
||||||
|
|
||||||
### Moving between synced folders and My files
|
### Moving between synced folders and My files
|
||||||
|
|
||||||
@@ -146,6 +148,9 @@ places, and both apply:
|
|||||||
Rules are re-read on every pass. Ignoring never deletes anything: a file that becomes ignored is
|
Rules are re-read on every pass. Ignoring never deletes anything: a file that becomes ignored is
|
||||||
simply no longer tracked, and its copy on Proton Drive stays.
|
simply no longer tracked, and its copy on Proton Drive stays.
|
||||||
|
|
||||||
|
A folder you may not read, such as a cache a container created as root, is skipped the same way,
|
||||||
|
and the activity feed names it once. Add it to `.pdfsignore` to stop that message.
|
||||||
|
|
||||||
## Changes waiting for Proton Drive
|
## Changes waiting for Proton Drive
|
||||||
|
|
||||||
A change you made in the Proton Drive folder exists only on this computer until it reaches
|
A change you made in the Proton Drive folder exists only on this computer until it reaches
|
||||||
@@ -278,6 +283,9 @@ Proton Drive keeps earlier versions of every file. **Details → Versions…** i
|
|||||||
**Restore to This Computer…** downloads its folders here.
|
**Restore to This Computer…** downloads its folders here.
|
||||||
- **Continue This Backup Here…** makes this computer take over another computer's backup, for
|
- **Continue This Backup Here…** makes this computer take over another computer's backup, for
|
||||||
example after reinstalling or replacing a machine. See [RECOVERY.md](RECOVERY.md).
|
example after reinstalling or replacing a machine. See [RECOVERY.md](RECOVERY.md).
|
||||||
|
- **Move to This Computer…** moves another computer's folders into this computer's backup, for
|
||||||
|
example when you switch from Windows to Linux, and then offers them for syncing here. The other
|
||||||
|
computer stays in the list, without those folders.
|
||||||
|
|
||||||
## Search launcher
|
## Search launcher
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pkgbase = proton-drive-for-linux-bin
|
pkgbase = proton-drive-for-linux-bin
|
||||||
pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)
|
pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)
|
||||||
pkgver = 3.1.0
|
pkgver = 3.1.2
|
||||||
pkgrel = 1
|
pkgrel = 1
|
||||||
url = https://proton-drive.narl.io
|
url = https://proton-drive.narl.io
|
||||||
arch = x86_64
|
arch = x86_64
|
||||||
@@ -21,21 +21,21 @@ pkgbase = proton-drive-for-linux-bin
|
|||||||
optdepends = xdg-utils: "Open folder" action in the tray menu
|
optdepends = xdg-utils: "Open folder" action in the tray menu
|
||||||
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
|
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
|
||||||
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
|
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
|
||||||
provides = proton-drive-for-linux=3.1.0
|
provides = proton-drive-for-linux=3.1.2
|
||||||
provides = proton-drive-linux=3.1.0
|
provides = proton-drive-linux=3.1.2
|
||||||
provides = pdfs
|
provides = pdfs
|
||||||
conflicts = proton-drive-linux
|
conflicts = proton-drive-linux
|
||||||
conflicts = proton-drive-for-linux
|
conflicts = proton-drive-for-linux
|
||||||
conflicts = proton-drive-for-linux-git
|
conflicts = proton-drive-for-linux-git
|
||||||
options = !strip
|
options = !strip
|
||||||
options = !debug
|
options = !debug
|
||||||
source = proton-drive-linux-3.1.0-x86_64.tar.gz::https://github.com/narrrl/proton-drive-linux/releases/download/v3.1.0/proton-drive-linux-3.1.0-x86_64.tar.gz
|
source = proton-drive-linux-3.1.2-x86_64.tar.gz::https://github.com/narrrl/proton-drive-linux/releases/download/v3.1.2/proton-drive-linux-3.1.2-x86_64.tar.gz
|
||||||
source = io.narl.proton-drive-linux-3.1.0.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.0/packaging/io.narl.proton-drive-linux.desktop
|
source = io.narl.proton-drive-linux-3.1.2.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.2/packaging/io.narl.proton-drive-linux.desktop
|
||||||
source = io.narl.proton-drive-linux-tray-3.1.0.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.0/packaging/io.narl.proton-drive-linux-tray.desktop
|
source = io.narl.proton-drive-linux-tray-3.1.2.desktop::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.2/packaging/io.narl.proton-drive-linux-tray.desktop
|
||||||
source = io.narl.proton-drive-linux-3.1.0.svg::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.0/packaging/io.narl.proton-drive-linux.svg
|
source = io.narl.proton-drive-linux-3.1.2.svg::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.2/packaging/io.narl.proton-drive-linux.svg
|
||||||
source = proton-drive-3.1.0.service::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.0/packaging/proton-drive.service
|
source = proton-drive-3.1.2.service::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.2/packaging/proton-drive.service
|
||||||
source = LICENSE-3.1.0::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.0/LICENSE
|
source = LICENSE-3.1.2::https://raw.githubusercontent.com/narrrl/proton-drive-linux/v3.1.2/LICENSE
|
||||||
sha256sums = bd124e249089d2817101e4f8b705ac511decb79a410ab26b0eac9125888f7300
|
sha256sums = 71fc50775cbd795717ed17c4a3994d8fdfb5ab30a223dcbc7f0e313f9ab615f7
|
||||||
sha256sums = d190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123
|
sha256sums = d190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123
|
||||||
sha256sums = 1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0
|
sha256sums = 1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0
|
||||||
sha256sums = e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828
|
sha256sums = e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Nils Pukropp <contact@narl.io>
|
# Maintainer: Nils Pukropp <contact@narl.io>
|
||||||
|
|
||||||
pkgname=proton-drive-for-linux-bin
|
pkgname=proton-drive-for-linux-bin
|
||||||
pkgver=3.1.0
|
pkgver=3.1.2
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)"
|
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (binaries)"
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
@@ -34,7 +34,7 @@ source=("proton-drive-linux-$pkgver-x86_64.tar.gz::$_repo/releases/download/$_ta
|
|||||||
"io.narl.proton-drive-linux-$pkgver.svg::$_raw/packaging/io.narl.proton-drive-linux.svg"
|
"io.narl.proton-drive-linux-$pkgver.svg::$_raw/packaging/io.narl.proton-drive-linux.svg"
|
||||||
"proton-drive-$pkgver.service::$_raw/packaging/proton-drive.service"
|
"proton-drive-$pkgver.service::$_raw/packaging/proton-drive.service"
|
||||||
"LICENSE-$pkgver::$_raw/LICENSE")
|
"LICENSE-$pkgver::$_raw/LICENSE")
|
||||||
sha256sums=('bd124e249089d2817101e4f8b705ac511decb79a410ab26b0eac9125888f7300'
|
sha256sums=('71fc50775cbd795717ed17c4a3994d8fdfb5ab30a223dcbc7f0e313f9ab615f7'
|
||||||
'd190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123'
|
'd190d6771fff0b975271fb62fd3fb0fa8bbf17d7278c10853c18557855b0c123'
|
||||||
'1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0'
|
'1d95e250370220e3bb6aead6ce34d1d6cc759f42c4803b75f1667e78ff47c6c0'
|
||||||
'e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828'
|
'e598a93c2715c3a9fdc7fb937902083d4a1135e8fbdfe6fe7e37f0383ebbd828'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pkgbase = proton-drive-for-linux-git
|
pkgbase = proton-drive-for-linux-git
|
||||||
pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)
|
pkgdesc = Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)
|
||||||
pkgver = 3.1.0.r0.g274bfd0
|
pkgver = 3.1.2.r0.g07c9b67
|
||||||
pkgrel = 1
|
pkgrel = 1
|
||||||
url = https://proton-drive.narl.io
|
url = https://proton-drive.narl.io
|
||||||
arch = x86_64
|
arch = x86_64
|
||||||
@@ -24,8 +24,8 @@ pkgbase = proton-drive-for-linux-git
|
|||||||
optdepends = xdg-utils: "Open folder" action in the tray menu
|
optdepends = xdg-utils: "Open folder" action in the tray menu
|
||||||
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
|
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
|
||||||
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
|
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
|
||||||
provides = proton-drive-for-linux=3.1.0.r0.g274bfd0
|
provides = proton-drive-for-linux=3.1.2.r0.g07c9b67
|
||||||
provides = proton-drive-linux=3.1.0.r0.g274bfd0
|
provides = proton-drive-linux=3.1.2.r0.g07c9b67
|
||||||
provides = pdfs
|
provides = pdfs
|
||||||
conflicts = proton-drive-linux
|
conflicts = proton-drive-linux
|
||||||
conflicts = proton-drive-for-linux
|
conflicts = proton-drive-for-linux
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Nils Pukropp <contact@narl.io>
|
# Maintainer: Nils Pukropp <contact@narl.io>
|
||||||
|
|
||||||
pkgname=proton-drive-for-linux-git
|
pkgname=proton-drive-for-linux-git
|
||||||
pkgver=3.1.0.r0.g274bfd0
|
pkgver=3.1.2.r0.g07c9b67
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)"
|
pkgdesc="Unofficial Proton Drive client: FUSE files-on-demand mount, CLI, GTK4 app, tray (git)"
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pkgbase = proton-drive-for-linux
|
pkgbase = proton-drive-for-linux
|
||||||
pkgdesc = Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray
|
pkgdesc = Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray
|
||||||
pkgver = 3.1.0
|
pkgver = 3.1.2
|
||||||
pkgrel = 1
|
pkgrel = 1
|
||||||
url = https://proton-drive.narl.io
|
url = https://proton-drive.narl.io
|
||||||
arch = x86_64
|
arch = x86_64
|
||||||
@@ -23,13 +23,13 @@ pkgbase = proton-drive-for-linux
|
|||||||
optdepends = xdg-utils: "Open folder" action in the tray menu
|
optdepends = xdg-utils: "Open folder" action in the tray menu
|
||||||
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
|
optdepends = fzf: search-as-you-type launcher (pdfs-prompt --fzf)
|
||||||
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
|
optdepends = foot: terminal that hosts pdfs-prompt --fzf when started from a keybinding
|
||||||
provides = proton-drive-linux=3.1.0
|
provides = proton-drive-linux=3.1.2
|
||||||
provides = pdfs
|
provides = pdfs
|
||||||
conflicts = proton-drive-linux
|
conflicts = proton-drive-linux
|
||||||
conflicts = proton-drive-for-linux-bin
|
conflicts = proton-drive-for-linux-bin
|
||||||
conflicts = proton-drive-for-linux-git
|
conflicts = proton-drive-for-linux-git
|
||||||
options = !lto
|
options = !lto
|
||||||
source = proton-drive-for-linux-3.1.0.tar.gz::https://github.com/narrrl/proton-drive-linux/archive/refs/tags/v3.1.0.tar.gz
|
source = proton-drive-for-linux-3.1.2.tar.gz::https://github.com/narrrl/proton-drive-linux/archive/refs/tags/v3.1.2.tar.gz
|
||||||
sha256sums = c7c6710e6f55d2ae3dbc29dd4a552a3e676bf4ecb2ff47ac2486dd90bd354ce2
|
sha256sums = 260ed05c8b041cf38c5904f7543780de0d0cb06d9695a427a98250d2a9ec0eb1
|
||||||
|
|
||||||
pkgname = proton-drive-for-linux
|
pkgname = proton-drive-for-linux
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Nils Pukropp <contact@narl.io>
|
# Maintainer: Nils Pukropp <contact@narl.io>
|
||||||
|
|
||||||
pkgname=proton-drive-for-linux
|
pkgname=proton-drive-for-linux
|
||||||
pkgver=3.1.0
|
pkgver=3.1.2
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray"
|
pkgdesc="Unofficial Proton Drive client: files-on-demand FUSE mount, CLI, GTK4 app and tray"
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
@@ -24,7 +24,7 @@ conflicts=('proton-drive-linux' 'proton-drive-for-linux-bin' 'proton-drive-for-l
|
|||||||
# LTO has broken GTK/Rust links for this workspace; the release profile keeps it off.
|
# LTO has broken GTK/Rust links for this workspace; the release profile keeps it off.
|
||||||
options=('!lto')
|
options=('!lto')
|
||||||
source=("$pkgname-$pkgver.tar.gz::$_repo/archive/refs/tags/v$pkgver.tar.gz")
|
source=("$pkgname-$pkgver.tar.gz::$_repo/archive/refs/tags/v$pkgver.tar.gz")
|
||||||
sha256sums=('c7c6710e6f55d2ae3dbc29dd4a552a3e676bf4ecb2ff47ac2486dd90bd354ce2')
|
sha256sums=('260ed05c8b041cf38c5904f7543780de0d0cb06d9695a427a98250d2a9ec0eb1')
|
||||||
|
|
||||||
_srcname="proton-drive-linux-$pkgver"
|
_srcname="proton-drive-linux-$pkgver"
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Von mir geteilt"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computer"
|
msgstr "Computer"
|
||||||
|
|
||||||
@@ -266,11 +266,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -316,7 +317,7 @@ msgstr "Drive durchsuchen"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -358,7 +359,7 @@ msgstr "Raster / Liste"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Umbenennen"
|
msgstr "Umbenennen"
|
||||||
@@ -686,7 +687,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Synchronisierungsordner konnte nicht hinzugefügt werden"
|
msgstr "Synchronisierungsordner konnte nicht hinzugefügt werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Ordner konnten nicht wiederhergestellt werden"
|
msgstr "Ordner konnten nicht wiederhergestellt werden"
|
||||||
|
|
||||||
@@ -1266,10 +1267,11 @@ msgstr "Alben konnten nicht geladen werden"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1301,7 +1303,7 @@ msgstr "Der Proton-Drive-Dienst hat nicht geantwortet."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1315,7 +1317,7 @@ msgstr "Öffnen"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Umbenennen …"
|
msgstr "Umbenennen …"
|
||||||
|
|
||||||
@@ -1583,7 +1585,7 @@ msgstr "Symbolgröße"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1741,7 +1743,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Neuer Ordner …"
|
msgstr "Neuer Ordner …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1886,7 +1888,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Neuer Name"
|
msgstr "Neuer Name"
|
||||||
|
|
||||||
@@ -1916,6 +1918,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Den Zielordner auswählen."
|
msgstr "Den Zielordner auswählen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Hierher verschieben"
|
msgstr "Hierher verschieben"
|
||||||
|
|
||||||
@@ -2147,99 +2150,103 @@ msgstr "Dateien durchsuchen"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Auf diesem Computer wiederherstellen …"
|
msgstr "Auf diesem Computer wiederherstellen …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Auf diesen Computer verschieben …"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Diese Sicherung hier fortsetzen …"
|
msgstr "Diese Sicherung hier fortsetzen …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Entfernen …"
|
msgstr "Entfernen …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · letzte Sicherung {time}"
|
msgstr "{platform} · letzte Sicherung {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · noch keine Sicherungen"
|
msgstr "{platform} · noch keine Sicherungen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Noch keine Ordner gesichert"
|
msgstr "Noch keine Ordner gesichert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} Ordner gesichert"
|
msgstr[0] "{n} Ordner gesichert"
|
||||||
msgstr[1] "{n} Ordner gesichert"
|
msgstr[1] "{n} Ordner gesichert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} erfordert Aufmerksamkeit"
|
msgstr[0] "{folders} · {n} erfordert Aufmerksamkeit"
|
||||||
msgstr[1] "{folders} · {n} erfordern Aufmerksamkeit"
|
msgstr[1] "{folders} · {n} erfordern Aufmerksamkeit"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "wird synchronisiert …"
|
msgstr "wird synchronisiert …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "Synchronisierungsfehler"
|
msgstr "Synchronisierungsfehler"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "erfordert Aufmerksamkeit"
|
msgstr "erfordert Aufmerksamkeit"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "aktuell"
|
msgstr "aktuell"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "wird auf Änderungen geprüft …"
|
msgstr "wird auf Änderungen geprüft …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "wird auf Änderungen geprüft – {done} von {total}"
|
msgstr "wird auf Änderungen geprüft – {done} von {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "{done} von {total} wird synchronisiert"
|
msgstr "{done} von {total} wird synchronisiert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "{file} wird synchronisiert – {done} von {total}"
|
msgstr "{file} wird synchronisiert – {done} von {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Ordner zur Synchronisierung hinzufügen"
|
msgstr "Ordner zur Synchronisierung hinzufügen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Ordner wird synchronisiert …"
|
msgstr "Ordner wird synchronisiert …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Ordner konnte nicht hinzugefügt werden"
|
msgstr "Ordner konnte nicht hinzugefügt werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Wiederherstellbare Ordner konnten nicht aufgelistet werden"
|
msgstr "Wiederherstellbare Ordner konnten nicht aufgelistet werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2247,19 +2254,19 @@ msgstr ""
|
|||||||
"Die Ordner ankreuzen, die mit diesem Rechner synchronisiert werden sollen, "
|
"Die Ordner ankreuzen, die mit diesem Rechner synchronisiert werden sollen, "
|
||||||
"und für jeden den Speicherort anpassen."
|
"und für jeden den Speicherort anpassen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Ordner wiederherstellen"
|
msgstr "Ordner wiederherstellen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Wiederherstellen"
|
msgstr "Wiederherstellen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Ordner werden wiederhergestellt …"
|
msgstr "Ordner werden wiederhergestellt …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2268,37 +2275,37 @@ msgstr ""
|
|||||||
"Diese Ordner werden von „{name}“ gesichert. Wiederhergestellte Ordner werden "
|
"Diese Ordner werden von „{name}“ gesichert. Wiederhergestellte Ordner werden "
|
||||||
"weiterhin mit der Kopie dieses Computers synchronisiert."
|
"weiterhin mit der Kopie dieses Computers synchronisiert."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr "Diese Ordner werden in Proton Drive unter diesem Computer gesichert."
|
msgstr "Diese Ordner werden in Proton Drive unter diesem Computer gesichert."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nichts wiederherzustellen – alle Ordner von „{name}“ werden bereits hier "
|
"Nichts wiederherzustellen – alle Ordner von „{name}“ werden bereits hier "
|
||||||
"synchronisiert."
|
"synchronisiert."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nichts wiederherzustellen – alle Ordner dieses Computers werden bereits hier "
|
"Nichts wiederherzustellen – alle Ordner dieses Computers werden bereits hier "
|
||||||
"synchronisiert."
|
"synchronisiert."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "Ordner wird auf „Nur online“ umgestellt"
|
msgstr "Ordner wird auf „Nur online“ umgestellt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "Ordner wird heruntergeladen und bleibt synchronisiert"
|
msgstr "Ordner wird heruntergeladen und bleibt synchronisiert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Modus konnte nicht geändert werden"
|
msgstr "Modus konnte nicht geändert werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2316,7 +2323,7 @@ msgstr ""
|
|||||||
"Ordner auf „Synchronisiert“ umstellen und vor dem Entfernen warten, bis der "
|
"Ordner auf „Synchronisiert“ umstellen und vor dem Entfernen warten, bis der "
|
||||||
"Download abgeschlossen ist."
|
"Download abgeschlossen ist."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2330,68 +2337,68 @@ msgstr ""
|
|||||||
"mehr synchronisiert. Es kann zusätzlich ausgewählt werden, die Kopie in "
|
"mehr synchronisiert. Es kann zusätzlich ausgewählt werden, die Kopie in "
|
||||||
"Proton Drive zu löschen."
|
"Proton Drive zu löschen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Synchronisierung des Ordners beenden?"
|
msgstr "Synchronisierung des Ordners beenden?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Auch aus Proton Drive löschen"
|
msgstr "Auch aus Proton Drive löschen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Löscht die einzige Kopie dieser Dateien."
|
msgstr "Löscht die einzige Kopie dieser Dateien."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "Die lokale Kopie bleibt unverändert."
|
msgstr "Die lokale Kopie bleibt unverändert."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Synchronisierung beenden"
|
msgstr "Synchronisierung beenden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Synchronisierung des Ordners beendet"
|
msgstr "Synchronisierung des Ordners beendet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Synchronisierung des Ordners konnte nicht beendet werden"
|
msgstr "Synchronisierung des Ordners konnte nicht beendet werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Computer umbenennen"
|
msgstr "Computer umbenennen"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "„{name}“ umbenennen."
|
msgstr "„{name}“ umbenennen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Der Computer konnte nicht umbenannt werden"
|
msgstr "Der Computer konnte nicht umbenannt werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "Ein Name ist erforderlich."
|
msgstr "Ein Name ist erforderlich."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Computer umbenannt"
|
msgstr "Computer umbenannt"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Zur Bestätigung „{name}“ eingeben"
|
msgstr "Zur Bestätigung „{name}“ eingeben"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Computer entfernen?"
|
msgstr "Computer entfernen?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2406,25 +2413,25 @@ msgstr ""
|
|||||||
"gelöscht. Die Dateien auf dem Computer selbst bleiben unberührt – dies kann "
|
"gelöscht. Die Dateien auf dem Computer selbst bleiben unberührt – dies kann "
|
||||||
"jedoch von hier aus nicht rückgängig gemacht werden."
|
"jedoch von hier aus nicht rückgängig gemacht werden."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Entfernen"
|
msgstr "Entfernen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Computer entfernt"
|
msgstr "Computer entfernt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Der Computer konnte nicht entfernt werden"
|
msgstr "Der Computer konnte nicht entfernt werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Diese Sicherung hier fortsetzen?"
|
msgstr "Diese Sicherung hier fortsetzen?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2443,20 +2450,50 @@ msgstr ""
|
|||||||
"werden nicht verschoben. Mit „Auf diesem Computer wiederherstellen“ lässt "
|
"werden nicht verschoben. Mit „Auf diesem Computer wiederherstellen“ lässt "
|
||||||
"sich danach zurückholen, was „{name}“ synchronisiert hat."
|
"sich danach zurückholen, was „{name}“ synchronisiert hat."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Hier fortsetzen"
|
msgstr "Hier fortsetzen"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Sicherung jetzt als „{name}“"
|
msgstr "Sicherung jetzt als „{name}“"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Diese Sicherung konnte hier nicht fortgesetzt werden"
|
msgstr "Diese Sicherung konnte hier nicht fortgesetzt werden"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Sicherung auf diesen Computer verschieben?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"Die von „{name}“ gesicherten Ordner werden in Proton Drive in die Sicherung "
|
||||||
|
"dieses Computers verschoben, und Sie wählen, wo sie auf diesem Computer "
|
||||||
|
"liegen. „{name}“ bleibt in Ihrem Konto, ohne diese Ordner.\n"
|
||||||
|
"\n"
|
||||||
|
"Beenden Sie Proton Drive zuerst auf „{name}“. Sonst sieht es seine Ordner "
|
||||||
|
"verschwinden."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Sicherung von „{name}“ verschoben"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Diese Sicherung konnte nicht verschoben werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
+112
-76
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: English (United Kingdom)\n"
|
"Language-Team: English (United Kingdom)\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Shared by me"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computers"
|
msgstr "Computers"
|
||||||
|
|
||||||
@@ -262,11 +262,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -312,7 +313,7 @@ msgstr "Search Drive"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -354,7 +355,7 @@ msgstr "Grid / list"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Rename"
|
msgstr "Rename"
|
||||||
@@ -678,7 +679,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Couldn't add a sync folder"
|
msgstr "Couldn't add a sync folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Couldn't restore folders"
|
msgstr "Couldn't restore folders"
|
||||||
|
|
||||||
@@ -1254,10 +1255,11 @@ msgstr "Couldn't load albums"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1289,7 +1291,7 @@ msgstr "The Proton Drive service didn't respond."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1303,7 +1305,7 @@ msgstr "Open"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Rename…"
|
msgstr "Rename…"
|
||||||
|
|
||||||
@@ -1571,7 +1573,7 @@ msgstr "Icon size"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1725,7 +1727,7 @@ msgid "New Folder…"
|
|||||||
msgstr "New Folder…"
|
msgstr "New Folder…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1867,7 +1869,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "New name"
|
msgstr "New name"
|
||||||
|
|
||||||
@@ -1897,6 +1899,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Choose the folder to move into."
|
msgstr "Choose the folder to move into."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Move Here"
|
msgstr "Move Here"
|
||||||
|
|
||||||
@@ -2124,99 +2127,103 @@ msgstr "Browse Files"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Restore to This Computer…"
|
msgstr "Restore to This Computer…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Move to This Computer…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Continue This Backup Here…"
|
msgstr "Continue This Backup Here…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Remove…"
|
msgstr "Remove…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · last backup {time}"
|
msgstr "{platform} · last backup {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · no backups yet"
|
msgstr "{platform} · no backups yet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "No folders backed up yet"
|
msgstr "No folders backed up yet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} folder backed up"
|
msgstr[0] "{n} folder backed up"
|
||||||
msgstr[1] "{n} folders backed up"
|
msgstr[1] "{n} folders backed up"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} needs attention"
|
msgstr[0] "{folders} · {n} needs attention"
|
||||||
msgstr[1] "{folders} · {n} need attention"
|
msgstr[1] "{folders} · {n} need attention"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "syncing…"
|
msgstr "syncing…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "sync error"
|
msgstr "sync error"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "needs attention"
|
msgstr "needs attention"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "up to date"
|
msgstr "up to date"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "checking for changes…"
|
msgstr "checking for changes…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "checking for changes — {done} of {total}"
|
msgstr "checking for changes — {done} of {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "syncing {done} of {total}"
|
msgstr "syncing {done} of {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "syncing {file} — {done} of {total}"
|
msgstr "syncing {file} — {done} of {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Add Folder to Sync"
|
msgstr "Add Folder to Sync"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Syncing folder…"
|
msgstr "Syncing folder…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Couldn't add folder"
|
msgstr "Couldn't add folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Couldn't list folders to restore"
|
msgstr "Couldn't list folders to restore"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2224,19 +2231,19 @@ msgstr ""
|
|||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Restore Folders"
|
msgstr "Restore Folders"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Restore"
|
msgstr "Restore"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Restoring folders…"
|
msgstr "Restoring folders…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2245,33 +2252,33 @@ msgstr ""
|
|||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
"with that computer's copy."
|
"with that computer's copy."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr "These folders are backed up under this computer in Proton Drive."
|
msgstr "These folders are backed up under this computer in Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr "Nothing to restore — “{name}”'s folders are all synced here."
|
msgstr "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr "Nothing to restore — this computer's folders are all synced here."
|
msgstr "Nothing to restore — this computer's folders are all synced here."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "Folder will switch to online only"
|
msgstr "Folder will switch to online only"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "Folder will download and stay synced"
|
msgstr "Folder will download and stay synced"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Couldn't change mode"
|
msgstr "Couldn't change mode"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2288,7 +2295,7 @@ msgstr ""
|
|||||||
"copy, cancel, switch the folder to Synced, and wait for the download to "
|
"copy, cancel, switch the folder to Synced, and wait for the download to "
|
||||||
"finish before removing it."
|
"finish before removing it."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2301,68 +2308,68 @@ msgstr ""
|
|||||||
"The local files stay on this disk and simply stop being synced. Choose "
|
"The local files stay on this disk and simply stop being synced. Choose "
|
||||||
"whether to also delete the copy in Proton Drive."
|
"whether to also delete the copy in Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Stop Syncing Folder?"
|
msgstr "Stop Syncing Folder?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Also delete from Proton Drive"
|
msgstr "Also delete from Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Deletes the only copy of these files."
|
msgstr "Deletes the only copy of these files."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "The local copy is unaffected."
|
msgstr "The local copy is unaffected."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Stop Syncing"
|
msgstr "Stop Syncing"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Stopped syncing folder"
|
msgstr "Stopped syncing folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Couldn't stop syncing the folder"
|
msgstr "Couldn't stop syncing the folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Rename Computer"
|
msgstr "Rename Computer"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "Rename “{name}”."
|
msgstr "Rename “{name}”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Couldn't rename the computer"
|
msgstr "Couldn't rename the computer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "A name is required."
|
msgstr "A name is required."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Computer renamed"
|
msgstr "Computer renamed"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Type “{name}” to confirm"
|
msgstr "Type “{name}” to confirm"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Remove Computer?"
|
msgstr "Remove Computer?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2377,25 +2384,25 @@ msgstr ""
|
|||||||
"on that computer itself are not touched — but this cannot be undone from "
|
"on that computer itself are not touched — but this cannot be undone from "
|
||||||
"here."
|
"here."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Remove"
|
msgstr "Remove"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Computer removed"
|
msgstr "Computer removed"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Couldn't remove the computer"
|
msgstr "Couldn't remove the computer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Continue This Backup Here?"
|
msgstr "Continue This Backup Here?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2414,20 +2421,49 @@ msgstr ""
|
|||||||
"“Restore to This Computer” afterwards to bring back what “{name}” was "
|
"“Restore to This Computer” afterwards to bring back what “{name}” was "
|
||||||
"syncing."
|
"syncing."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Continue Here"
|
msgstr "Continue Here"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Now backing up as “{name}”"
|
msgstr "Now backing up as “{name}”"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Couldn't continue that backup here"
|
msgstr "Couldn't continue that backup here"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Move Backup to This Computer?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Moved the backup of “{name}”"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Couldn't move that backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Compartido por mí"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Equipos"
|
msgstr "Equipos"
|
||||||
|
|
||||||
@@ -264,11 +264,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -314,7 +315,7 @@ msgstr "Buscar en Drive"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -356,7 +357,7 @@ msgstr "Cuadrícula / lista"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Renombrar"
|
msgstr "Renombrar"
|
||||||
@@ -683,7 +684,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "No se pudo añadir una carpeta sincronizada"
|
msgstr "No se pudo añadir una carpeta sincronizada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "No se pudieron restaurar las carpetas"
|
msgstr "No se pudieron restaurar las carpetas"
|
||||||
|
|
||||||
@@ -1260,10 +1261,11 @@ msgstr "No se pudieron cargar los álbumes"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1295,7 +1297,7 @@ msgstr "El servicio de Proton Drive no respondió."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1309,7 +1311,7 @@ msgstr "Abrir"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Renombrar…"
|
msgstr "Renombrar…"
|
||||||
|
|
||||||
@@ -1577,7 +1579,7 @@ msgstr "Tamaño de los iconos"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1732,7 +1734,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Carpeta nueva…"
|
msgstr "Carpeta nueva…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1878,7 +1880,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Nombre nuevo"
|
msgstr "Nombre nuevo"
|
||||||
|
|
||||||
@@ -1908,6 +1910,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Elija la carpeta de destino."
|
msgstr "Elija la carpeta de destino."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Mover aquí"
|
msgstr "Mover aquí"
|
||||||
|
|
||||||
@@ -2136,99 +2139,103 @@ msgstr "Examinar archivos"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Restaurar en este equipo…"
|
msgstr "Restaurar en este equipo…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Mover a este equipo…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Continuar esta copia de seguridad aquí…"
|
msgstr "Continuar esta copia de seguridad aquí…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Quitar…"
|
msgstr "Quitar…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · última copia de seguridad {time}"
|
msgstr "{platform} · última copia de seguridad {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · aún no hay copias de seguridad"
|
msgstr "{platform} · aún no hay copias de seguridad"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Aún no hay carpetas con copia de seguridad"
|
msgstr "Aún no hay carpetas con copia de seguridad"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} carpeta con copia de seguridad"
|
msgstr[0] "{n} carpeta con copia de seguridad"
|
||||||
msgstr[1] "{n} carpetas con copia de seguridad"
|
msgstr[1] "{n} carpetas con copia de seguridad"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} requiere atención"
|
msgstr[0] "{folders} · {n} requiere atención"
|
||||||
msgstr[1] "{folders} · {n} requieren atención"
|
msgstr[1] "{folders} · {n} requieren atención"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "sincronizando…"
|
msgstr "sincronizando…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "error de sincronización"
|
msgstr "error de sincronización"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "requiere atención"
|
msgstr "requiere atención"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "actualizado"
|
msgstr "actualizado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "buscando cambios…"
|
msgstr "buscando cambios…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "buscando cambios: {done} de {total}"
|
msgstr "buscando cambios: {done} de {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "sincronizando {done} de {total}"
|
msgstr "sincronizando {done} de {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "sincronizando {file}: {done} de {total}"
|
msgstr "sincronizando {file}: {done} de {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Añadir carpeta para sincronizar"
|
msgstr "Añadir carpeta para sincronizar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Sincronizando la carpeta…"
|
msgstr "Sincronizando la carpeta…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "No se pudo añadir la carpeta"
|
msgstr "No se pudo añadir la carpeta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "No se pudieron listar las carpetas para restaurar"
|
msgstr "No se pudieron listar las carpetas para restaurar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2236,19 +2243,19 @@ msgstr ""
|
|||||||
"Marque las carpetas que sincronizar con esta máquina y ajuste dónde debe "
|
"Marque las carpetas que sincronizar con esta máquina y ajuste dónde debe "
|
||||||
"estar cada una."
|
"estar cada una."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Restaurar carpetas"
|
msgstr "Restaurar carpetas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Restaurar"
|
msgstr "Restaurar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Restaurando carpetas…"
|
msgstr "Restaurando carpetas…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2257,36 +2264,36 @@ msgstr ""
|
|||||||
"Estas carpetas tienen copia de seguridad desde “{name}”. Las carpetas "
|
"Estas carpetas tienen copia de seguridad desde “{name}”. Las carpetas "
|
||||||
"restauradas siguen sincronizándose con la copia de ese equipo."
|
"restauradas siguen sincronizándose con la copia de ese equipo."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Estas carpetas tienen copia de seguridad bajo este equipo en Proton Drive."
|
"Estas carpetas tienen copia de seguridad bajo este equipo en Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nada que restaurar: todas las carpetas de “{name}” ya se sincronizan aquí."
|
"Nada que restaurar: todas las carpetas de “{name}” ya se sincronizan aquí."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nada que restaurar: todas las carpetas de este equipo ya se sincronizan aquí."
|
"Nada que restaurar: todas las carpetas de este equipo ya se sincronizan aquí."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "La carpeta pasará a solo en línea"
|
msgstr "La carpeta pasará a solo en línea"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "La carpeta se descargará y permanecerá sincronizada"
|
msgstr "La carpeta se descargará y permanecerá sincronizada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "No se pudo cambiar el modo"
|
msgstr "No se pudo cambiar el modo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2303,7 +2310,7 @@ msgstr ""
|
|||||||
"Para conservar una copia local, cancele, cambie la carpeta a Sincronizada y "
|
"Para conservar una copia local, cancele, cambie la carpeta a Sincronizada y "
|
||||||
"espere a que termine la descarga antes de quitarla."
|
"espere a que termine la descarga antes de quitarla."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2316,68 +2323,68 @@ msgstr ""
|
|||||||
"Los archivos locales permanecen en este disco y simplemente dejan de "
|
"Los archivos locales permanecen en este disco y simplemente dejan de "
|
||||||
"sincronizarse. Elija si quiere eliminar también la copia en Proton Drive."
|
"sincronizarse. Elija si quiere eliminar también la copia en Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "¿Dejar de sincronizar la carpeta?"
|
msgstr "¿Dejar de sincronizar la carpeta?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Eliminar también de Proton Drive"
|
msgstr "Eliminar también de Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Elimina la única copia de estos archivos."
|
msgstr "Elimina la única copia de estos archivos."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "La copia local no se ve afectada."
|
msgstr "La copia local no se ve afectada."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Dejar de sincronizar"
|
msgstr "Dejar de sincronizar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Se dejó de sincronizar la carpeta"
|
msgstr "Se dejó de sincronizar la carpeta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "No se pudo dejar de sincronizar la carpeta"
|
msgstr "No se pudo dejar de sincronizar la carpeta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Renombrar equipo"
|
msgstr "Renombrar equipo"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "Renombrar “{name}”."
|
msgstr "Renombrar “{name}”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "No se pudo renombrar el equipo"
|
msgstr "No se pudo renombrar el equipo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "Se necesita un nombre."
|
msgstr "Se necesita un nombre."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Equipo renombrado"
|
msgstr "Equipo renombrado"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Escriba “{name}” para confirmar"
|
msgstr "Escriba “{name}” para confirmar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "¿Quitar el equipo?"
|
msgstr "¿Quitar el equipo?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2391,25 +2398,25 @@ msgstr ""
|
|||||||
"Todo lo que respaldó en Proton Drive se eliminará con él. Los archivos de "
|
"Todo lo que respaldó en Proton Drive se eliminará con él. Los archivos de "
|
||||||
"ese equipo no se tocan, pero esto no se puede deshacer desde aquí."
|
"ese equipo no se tocan, pero esto no se puede deshacer desde aquí."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Quitar"
|
msgstr "Quitar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Equipo quitado"
|
msgstr "Equipo quitado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "No se pudo quitar el equipo"
|
msgstr "No se pudo quitar el equipo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "¿Continuar esta copia de seguridad aquí?"
|
msgstr "¿Continuar esta copia de seguridad aquí?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2428,20 +2435,50 @@ msgstr ""
|
|||||||
"no se mueven. Después, use “Restaurar en este equipo” para recuperar lo que "
|
"no se mueven. Después, use “Restaurar en este equipo” para recuperar lo que "
|
||||||
"“{name}” sincronizaba."
|
"“{name}” sincronizaba."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Continuar aquí"
|
msgstr "Continuar aquí"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Ahora se hace copia de seguridad como “{name}”"
|
msgstr "Ahora se hace copia de seguridad como “{name}”"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "No se pudo continuar esa copia de seguridad aquí"
|
msgstr "No se pudo continuar esa copia de seguridad aquí"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "¿Mover la copia de seguridad a este equipo?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"Las carpetas de las que “{name}” hace copia de seguridad pasan a la copia de "
|
||||||
|
"seguridad de este equipo en Proton Drive, y tú eliges dónde van en este "
|
||||||
|
"equipo. “{name}” sigue en tu cuenta, sin esas carpetas.\n"
|
||||||
|
"\n"
|
||||||
|
"Cierra primero Proton Drive en “{name}”. Si no, verá desaparecer sus "
|
||||||
|
"carpetas."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Se movió la copia de seguridad de “{name}”"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "No se pudo mover esa copia de seguridad"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: French\n"
|
"Language-Team: French\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Partagés par moi"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Ordinateurs"
|
msgstr "Ordinateurs"
|
||||||
|
|
||||||
@@ -266,11 +266,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -316,7 +317,7 @@ msgstr "Rechercher dans Drive"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -358,7 +359,7 @@ msgstr "Grille / liste"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Renommer"
|
msgstr "Renommer"
|
||||||
@@ -686,7 +687,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Impossible d’ajouter un dossier synchronisé"
|
msgstr "Impossible d’ajouter un dossier synchronisé"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Impossible de restaurer les dossiers"
|
msgstr "Impossible de restaurer les dossiers"
|
||||||
|
|
||||||
@@ -1271,10 +1272,11 @@ msgstr "Impossible de charger les albums"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1306,7 +1308,7 @@ msgstr "Le service Proton Drive n’a pas répondu."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1320,7 +1322,7 @@ msgstr "Ouvrir"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Renommer…"
|
msgstr "Renommer…"
|
||||||
|
|
||||||
@@ -1588,7 +1590,7 @@ msgstr "Taille des icônes"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1744,7 +1746,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Nouveau dossier…"
|
msgstr "Nouveau dossier…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1890,7 +1892,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Nouveau nom"
|
msgstr "Nouveau nom"
|
||||||
|
|
||||||
@@ -1920,6 +1922,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Choisissez le dossier de destination."
|
msgstr "Choisissez le dossier de destination."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Déplacer ici"
|
msgstr "Déplacer ici"
|
||||||
|
|
||||||
@@ -2149,99 +2152,103 @@ msgstr "Parcourir les fichiers"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Restaurer sur cet ordinateur…"
|
msgstr "Restaurer sur cet ordinateur…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Déplacer vers cet ordinateur…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Continuer cette sauvegarde ici…"
|
msgstr "Continuer cette sauvegarde ici…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Retirer…"
|
msgstr "Retirer…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · dernière sauvegarde {time}"
|
msgstr "{platform} · dernière sauvegarde {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · aucune sauvegarde pour l’instant"
|
msgstr "{platform} · aucune sauvegarde pour l’instant"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Aucun dossier sauvegardé pour l’instant"
|
msgstr "Aucun dossier sauvegardé pour l’instant"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} dossier sauvegardé"
|
msgstr[0] "{n} dossier sauvegardé"
|
||||||
msgstr[1] "{n} dossiers sauvegardés"
|
msgstr[1] "{n} dossiers sauvegardés"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} requiert votre attention"
|
msgstr[0] "{folders} · {n} requiert votre attention"
|
||||||
msgstr[1] "{folders} · {n} requièrent votre attention"
|
msgstr[1] "{folders} · {n} requièrent votre attention"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "synchronisation…"
|
msgstr "synchronisation…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "erreur de synchronisation"
|
msgstr "erreur de synchronisation"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "attention requise"
|
msgstr "attention requise"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "à jour"
|
msgstr "à jour"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "recherche de modifications…"
|
msgstr "recherche de modifications…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "recherche de modifications — {done} sur {total}"
|
msgstr "recherche de modifications — {done} sur {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "synchronisation de {done} sur {total}"
|
msgstr "synchronisation de {done} sur {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "synchronisation de {file} — {done} sur {total}"
|
msgstr "synchronisation de {file} — {done} sur {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Ajouter un dossier à synchroniser"
|
msgstr "Ajouter un dossier à synchroniser"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Synchronisation du dossier…"
|
msgstr "Synchronisation du dossier…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Impossible d’ajouter le dossier"
|
msgstr "Impossible d’ajouter le dossier"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Impossible de lister les dossiers à restaurer"
|
msgstr "Impossible de lister les dossiers à restaurer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2249,19 +2256,19 @@ msgstr ""
|
|||||||
"Cochez les dossiers à synchroniser sur cette machine et ajustez "
|
"Cochez les dossiers à synchroniser sur cette machine et ajustez "
|
||||||
"l’emplacement de chacun."
|
"l’emplacement de chacun."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Restaurer les dossiers"
|
msgstr "Restaurer les dossiers"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Restaurer"
|
msgstr "Restaurer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Restauration des dossiers…"
|
msgstr "Restauration des dossiers…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2270,35 +2277,35 @@ msgstr ""
|
|||||||
"Ces dossiers sont sauvegardés depuis « {name} ». Les dossiers restaurés "
|
"Ces dossiers sont sauvegardés depuis « {name} ». Les dossiers restaurés "
|
||||||
"restent synchronisés avec la copie de cet ordinateur."
|
"restent synchronisés avec la copie de cet ordinateur."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr "Ces dossiers sont sauvegardés sous cet ordinateur dans Proton Drive."
|
msgstr "Ces dossiers sont sauvegardés sous cet ordinateur dans Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Rien à restaurer — les dossiers de « {name} » sont tous synchronisés ici."
|
"Rien à restaurer — les dossiers de « {name} » sont tous synchronisés ici."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Rien à restaurer — les dossiers de cet ordinateur sont tous synchronisés ici."
|
"Rien à restaurer — les dossiers de cet ordinateur sont tous synchronisés ici."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "Le dossier passera en ligne uniquement"
|
msgstr "Le dossier passera en ligne uniquement"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "Le dossier va être téléchargé et rester synchronisé"
|
msgstr "Le dossier va être téléchargé et rester synchronisé"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Impossible de changer de mode"
|
msgstr "Impossible de changer de mode"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2315,7 +2322,7 @@ msgstr ""
|
|||||||
"arrêtée. Pour conserver une copie locale, annulez, passez le dossier en "
|
"arrêtée. Pour conserver une copie locale, annulez, passez le dossier en "
|
||||||
"« Synchronisé » et attendez la fin du téléchargement avant de le retirer."
|
"« Synchronisé » et attendez la fin du téléchargement avant de le retirer."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2329,68 +2336,68 @@ msgstr ""
|
|||||||
"synchronisés. Choisissez s’il faut aussi supprimer la copie dans Proton "
|
"synchronisés. Choisissez s’il faut aussi supprimer la copie dans Proton "
|
||||||
"Drive."
|
"Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Arrêter la synchronisation du dossier ?"
|
msgstr "Arrêter la synchronisation du dossier ?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Supprimer aussi de Proton Drive"
|
msgstr "Supprimer aussi de Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Supprime l’unique copie de ces fichiers."
|
msgstr "Supprime l’unique copie de ces fichiers."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "La copie locale n’est pas affectée."
|
msgstr "La copie locale n’est pas affectée."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Arrêter la synchronisation"
|
msgstr "Arrêter la synchronisation"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Synchronisation du dossier arrêtée"
|
msgstr "Synchronisation du dossier arrêtée"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Impossible d’arrêter la synchronisation du dossier"
|
msgstr "Impossible d’arrêter la synchronisation du dossier"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Renommer l’ordinateur"
|
msgstr "Renommer l’ordinateur"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "Renommer « {name} »."
|
msgstr "Renommer « {name} »."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Impossible de renommer l’ordinateur"
|
msgstr "Impossible de renommer l’ordinateur"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "Un nom est requis."
|
msgstr "Un nom est requis."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Ordinateur renommé"
|
msgstr "Ordinateur renommé"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Saisissez « {name} » pour confirmer"
|
msgstr "Saisissez « {name} » pour confirmer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Retirer l’ordinateur ?"
|
msgstr "Retirer l’ordinateur ?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2405,25 +2412,25 @@ msgstr ""
|
|||||||
"fichiers présents sur cet ordinateur ne sont pas touchés — mais cette action "
|
"fichiers présents sur cet ordinateur ne sont pas touchés — mais cette action "
|
||||||
"ne peut pas être annulée d’ici."
|
"ne peut pas être annulée d’ici."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Retirer"
|
msgstr "Retirer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Ordinateur retiré"
|
msgstr "Ordinateur retiré"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Impossible de retirer l’ordinateur"
|
msgstr "Impossible de retirer l’ordinateur"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Continuer cette sauvegarde ici ?"
|
msgstr "Continuer cette sauvegarde ici ?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2442,20 +2449,50 @@ msgstr ""
|
|||||||
"ne sont pas déplacés. Utilisez ensuite « Restaurer sur cet ordinateur » pour "
|
"ne sont pas déplacés. Utilisez ensuite « Restaurer sur cet ordinateur » pour "
|
||||||
"récupérer ce que « {name} » synchronisait."
|
"récupérer ce que « {name} » synchronisait."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Continuer ici"
|
msgstr "Continuer ici"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Sauvegarde désormais en tant que « {name} »"
|
msgstr "Sauvegarde désormais en tant que « {name} »"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Impossible de continuer cette sauvegarde ici"
|
msgstr "Impossible de continuer cette sauvegarde ici"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Déplacer la sauvegarde vers cet ordinateur ?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"Les dossiers sauvegardés par « {name} » passent dans la sauvegarde de cet "
|
||||||
|
"ordinateur dans Proton Drive, et vous choisissez où les placer sur cet "
|
||||||
|
"ordinateur. « {name} » reste dans votre compte, sans ces dossiers.\n"
|
||||||
|
"\n"
|
||||||
|
"Arrêtez d'abord Proton Drive sur « {name} ». Sinon, il verra ses dossiers "
|
||||||
|
"disparaître."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Sauvegarde de « {name} » déplacée"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Impossible de déplacer cette sauvegarde"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: Italian\n"
|
"Language-Team: Italian\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Condivisi da me"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computer"
|
msgstr "Computer"
|
||||||
|
|
||||||
@@ -262,11 +262,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -312,7 +313,7 @@ msgstr "Cerca in Drive"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -354,7 +355,7 @@ msgstr "Griglia / elenco"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Rinomina"
|
msgstr "Rinomina"
|
||||||
@@ -682,7 +683,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Impossibile aggiungere una cartella sincronizzata"
|
msgstr "Impossibile aggiungere una cartella sincronizzata"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Impossibile ripristinare le cartelle"
|
msgstr "Impossibile ripristinare le cartelle"
|
||||||
|
|
||||||
@@ -1265,10 +1266,11 @@ msgstr "Impossibile caricare gli album"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1300,7 +1302,7 @@ msgstr "Il servizio di Proton Drive non ha risposto."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1314,7 +1316,7 @@ msgstr "Apri"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Rinomina…"
|
msgstr "Rinomina…"
|
||||||
|
|
||||||
@@ -1582,7 +1584,7 @@ msgstr "Dimensione icone"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1738,7 +1740,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Nuova cartella…"
|
msgstr "Nuova cartella…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1884,7 +1886,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Nuovo nome"
|
msgstr "Nuovo nome"
|
||||||
|
|
||||||
@@ -1914,6 +1916,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Scegli la cartella di destinazione."
|
msgstr "Scegli la cartella di destinazione."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Sposta qui"
|
msgstr "Sposta qui"
|
||||||
|
|
||||||
@@ -2143,99 +2146,103 @@ msgstr "Sfoglia file"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Ripristina su questo computer…"
|
msgstr "Ripristina su questo computer…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Sposta su questo computer…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Continua questo backup qui…"
|
msgstr "Continua questo backup qui…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Rimuovi…"
|
msgstr "Rimuovi…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · ultimo backup {time}"
|
msgstr "{platform} · ultimo backup {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · ancora nessun backup"
|
msgstr "{platform} · ancora nessun backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Ancora nessuna cartella sottoposta a backup"
|
msgstr "Ancora nessuna cartella sottoposta a backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} cartella sottoposta a backup"
|
msgstr[0] "{n} cartella sottoposta a backup"
|
||||||
msgstr[1] "{n} cartelle sottoposte a backup"
|
msgstr[1] "{n} cartelle sottoposte a backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} richiede attenzione"
|
msgstr[0] "{folders} · {n} richiede attenzione"
|
||||||
msgstr[1] "{folders} · {n} richiedono attenzione"
|
msgstr[1] "{folders} · {n} richiedono attenzione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "sincronizzazione…"
|
msgstr "sincronizzazione…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "errore di sincronizzazione"
|
msgstr "errore di sincronizzazione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "richiede attenzione"
|
msgstr "richiede attenzione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "aggiornato"
|
msgstr "aggiornato"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "controllo delle modifiche…"
|
msgstr "controllo delle modifiche…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "controllo delle modifiche: {done} di {total}"
|
msgstr "controllo delle modifiche: {done} di {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "sincronizzazione {done} di {total}"
|
msgstr "sincronizzazione {done} di {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "sincronizzazione di {file}: {done} di {total}"
|
msgstr "sincronizzazione di {file}: {done} di {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Aggiungi cartella da sincronizzare"
|
msgstr "Aggiungi cartella da sincronizzare"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Sincronizzazione della cartella…"
|
msgstr "Sincronizzazione della cartella…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Impossibile aggiungere la cartella"
|
msgstr "Impossibile aggiungere la cartella"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Impossibile elencare le cartelle da ripristinare"
|
msgstr "Impossibile elencare le cartelle da ripristinare"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2243,19 +2250,19 @@ msgstr ""
|
|||||||
"Seleziona le cartelle da sincronizzare su questa macchina e regola dove deve "
|
"Seleziona le cartelle da sincronizzare su questa macchina e regola dove deve "
|
||||||
"trovarsi ciascuna."
|
"trovarsi ciascuna."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Ripristina cartelle"
|
msgstr "Ripristina cartelle"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Ripristina"
|
msgstr "Ripristina"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Ripristino delle cartelle…"
|
msgstr "Ripristino delle cartelle…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2264,39 +2271,39 @@ msgstr ""
|
|||||||
"Queste cartelle sono sottoposte a backup da “{name}”. Le cartelle "
|
"Queste cartelle sono sottoposte a backup da “{name}”. Le cartelle "
|
||||||
"ripristinate continuano a sincronizzarsi con la copia di quel computer."
|
"ripristinate continuano a sincronizzarsi con la copia di quel computer."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Queste cartelle sono sottoposte a backup sotto questo computer in Proton "
|
"Queste cartelle sono sottoposte a backup sotto questo computer in Proton "
|
||||||
"Drive."
|
"Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Niente da ripristinare: le cartelle di “{name}” sono già tutte sincronizzate "
|
"Niente da ripristinare: le cartelle di “{name}” sono già tutte sincronizzate "
|
||||||
"qui."
|
"qui."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Niente da ripristinare: le cartelle di questo computer sono già tutte "
|
"Niente da ripristinare: le cartelle di questo computer sono già tutte "
|
||||||
"sincronizzate qui."
|
"sincronizzate qui."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "La cartella passerà a solo online"
|
msgstr "La cartella passerà a solo online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "La cartella verrà scaricata e resterà sincronizzata"
|
msgstr "La cartella verrà scaricata e resterà sincronizzata"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Impossibile cambiare modalità"
|
msgstr "Impossibile cambiare modalità"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2314,7 +2321,7 @@ msgstr ""
|
|||||||
"cartella a Sincronizzata e attendi il completamento del download prima di "
|
"cartella a Sincronizzata e attendi il completamento del download prima di "
|
||||||
"rimuoverla."
|
"rimuoverla."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2327,68 +2334,68 @@ msgstr ""
|
|||||||
"I file locali restano su questo disco e semplicemente smettono di essere "
|
"I file locali restano su questo disco e semplicemente smettono di essere "
|
||||||
"sincronizzati. Scegli se eliminare anche la copia in Proton Drive."
|
"sincronizzati. Scegli se eliminare anche la copia in Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Interrompere la sincronizzazione della cartella?"
|
msgstr "Interrompere la sincronizzazione della cartella?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Elimina anche da Proton Drive"
|
msgstr "Elimina anche da Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Elimina l'unica copia di questi file."
|
msgstr "Elimina l'unica copia di questi file."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "La copia locale non viene modificata."
|
msgstr "La copia locale non viene modificata."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Interrompi sincronizzazione"
|
msgstr "Interrompi sincronizzazione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Sincronizzazione della cartella interrotta"
|
msgstr "Sincronizzazione della cartella interrotta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Impossibile interrompere la sincronizzazione della cartella"
|
msgstr "Impossibile interrompere la sincronizzazione della cartella"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Rinomina computer"
|
msgstr "Rinomina computer"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "Rinomina “{name}”."
|
msgstr "Rinomina “{name}”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Impossibile rinominare il computer"
|
msgstr "Impossibile rinominare il computer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "È richiesto un nome."
|
msgstr "È richiesto un nome."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Computer rinominato"
|
msgstr "Computer rinominato"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Digita “{name}” per confermare"
|
msgstr "Digita “{name}” per confermare"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Rimuovere il computer?"
|
msgstr "Rimuovere il computer?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2403,25 +2410,25 @@ msgstr ""
|
|||||||
"insieme a esso. I file su quel computer non vengono toccati, ma questa "
|
"insieme a esso. I file su quel computer non vengono toccati, ma questa "
|
||||||
"operazione non può essere annullata da qui."
|
"operazione non può essere annullata da qui."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Rimuovi"
|
msgstr "Rimuovi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Computer rimosso"
|
msgstr "Computer rimosso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Impossibile rimuovere il computer"
|
msgstr "Impossibile rimuovere il computer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Continuare questo backup qui?"
|
msgstr "Continuare questo backup qui?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2440,20 +2447,50 @@ msgstr ""
|
|||||||
"qui non vengono spostate. Usa poi “Ripristina su questo computer” per "
|
"qui non vengono spostate. Usa poi “Ripristina su questo computer” per "
|
||||||
"recuperare ciò che “{name}” sincronizzava."
|
"recuperare ciò che “{name}” sincronizzava."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Continua qui"
|
msgstr "Continua qui"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Ora il backup avviene come “{name}”"
|
msgstr "Ora il backup avviene come “{name}”"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Impossibile continuare quel backup qui"
|
msgstr "Impossibile continuare quel backup qui"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Spostare il backup su questo computer?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"Le cartelle di cui “{name}” esegue il backup passano nel backup di questo "
|
||||||
|
"computer su Proton Drive, e scegli tu dove metterle su questo computer. "
|
||||||
|
"“{name}” resta nel tuo account, senza quelle cartelle.\n"
|
||||||
|
"\n"
|
||||||
|
"Chiudi prima Proton Drive su “{name}”. Altrimenti vedrà sparire le sue "
|
||||||
|
"cartelle."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Backup di “{name}” spostato"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Impossibile spostare quel backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Gedeeld door mij"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computers"
|
msgstr "Computers"
|
||||||
|
|
||||||
@@ -263,11 +263,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -313,7 +314,7 @@ msgstr "Drive doorzoeken"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -355,7 +356,7 @@ msgstr "Raster / lijst"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Hernoemen"
|
msgstr "Hernoemen"
|
||||||
@@ -683,7 +684,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Kon geen synchronisatiemap toevoegen"
|
msgstr "Kon geen synchronisatiemap toevoegen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Kon mappen niet terugzetten"
|
msgstr "Kon mappen niet terugzetten"
|
||||||
|
|
||||||
@@ -1261,10 +1262,11 @@ msgstr "Kon albums niet laden"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1296,7 +1298,7 @@ msgstr "De Proton Drive-service reageerde niet."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1310,7 +1312,7 @@ msgstr "Openen"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Hernoemen…"
|
msgstr "Hernoemen…"
|
||||||
|
|
||||||
@@ -1578,7 +1580,7 @@ msgstr "Pictogramgrootte"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1734,7 +1736,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Nieuwe map…"
|
msgstr "Nieuwe map…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1878,7 +1880,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Nieuwe naam"
|
msgstr "Nieuwe naam"
|
||||||
|
|
||||||
@@ -1908,6 +1910,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Kies de map waarnaar je wilt verplaatsen."
|
msgstr "Kies de map waarnaar je wilt verplaatsen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Hierheen verplaatsen"
|
msgstr "Hierheen verplaatsen"
|
||||||
|
|
||||||
@@ -2137,99 +2140,103 @@ msgstr "Bestanden bekijken"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Terugzetten op deze computer…"
|
msgstr "Terugzetten op deze computer…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Naar deze computer verplaatsen…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Deze back-up hier voortzetten…"
|
msgstr "Deze back-up hier voortzetten…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Verwijderen…"
|
msgstr "Verwijderen…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · laatste back-up {time}"
|
msgstr "{platform} · laatste back-up {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · nog geen back-ups"
|
msgstr "{platform} · nog geen back-ups"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Nog geen mappen geback-upt"
|
msgstr "Nog geen mappen geback-upt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} map in back-up"
|
msgstr[0] "{n} map in back-up"
|
||||||
msgstr[1] "{n} mappen in back-up"
|
msgstr[1] "{n} mappen in back-up"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} vereist aandacht"
|
msgstr[0] "{folders} · {n} vereist aandacht"
|
||||||
msgstr[1] "{folders} · {n} vereisen aandacht"
|
msgstr[1] "{folders} · {n} vereisen aandacht"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "synchroniseren…"
|
msgstr "synchroniseren…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "synchronisatiefout"
|
msgstr "synchronisatiefout"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "vereist aandacht"
|
msgstr "vereist aandacht"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "bijgewerkt"
|
msgstr "bijgewerkt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "controleren op wijzigingen…"
|
msgstr "controleren op wijzigingen…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "controleren op wijzigingen — {done} van {total}"
|
msgstr "controleren op wijzigingen — {done} van {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "synchroniseren: {done} van {total}"
|
msgstr "synchroniseren: {done} van {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "{file} synchroniseren — {done} van {total}"
|
msgstr "{file} synchroniseren — {done} van {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Map toevoegen aan synchronisatie"
|
msgstr "Map toevoegen aan synchronisatie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Map synchroniseren…"
|
msgstr "Map synchroniseren…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Kon map niet toevoegen"
|
msgstr "Kon map niet toevoegen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Kon mappen om terug te zetten niet weergeven"
|
msgstr "Kon mappen om terug te zetten niet weergeven"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2237,19 +2244,19 @@ msgstr ""
|
|||||||
"Vink de mappen aan die je met dit apparaat wilt synchroniseren en pas aan "
|
"Vink de mappen aan die je met dit apparaat wilt synchroniseren en pas aan "
|
||||||
"waar elke map moet komen."
|
"waar elke map moet komen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Mappen herstellen"
|
msgstr "Mappen herstellen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Terugzetten"
|
msgstr "Terugzetten"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Mappen terugzetten…"
|
msgstr "Mappen terugzetten…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2258,38 +2265,38 @@ msgstr ""
|
|||||||
"Van deze mappen is een back-up gemaakt vanaf “{name}”. Teruggezette mappen "
|
"Van deze mappen is een back-up gemaakt vanaf “{name}”. Teruggezette mappen "
|
||||||
"blijven synchroniseren met de kopie van die computer."
|
"blijven synchroniseren met de kopie van die computer."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Van deze mappen is een back-up gemaakt onder deze computer in Proton Drive."
|
"Van deze mappen is een back-up gemaakt onder deze computer in Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Niets om terug te zetten — de mappen van “{name}” worden hier al allemaal "
|
"Niets om terug te zetten — de mappen van “{name}” worden hier al allemaal "
|
||||||
"gesynchroniseerd."
|
"gesynchroniseerd."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Niets om terug te zetten — de mappen van deze computer worden hier al "
|
"Niets om terug te zetten — de mappen van deze computer worden hier al "
|
||||||
"allemaal gesynchroniseerd."
|
"allemaal gesynchroniseerd."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "Map wordt alleen online"
|
msgstr "Map wordt alleen online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "Map wordt gedownload en blijft gesynchroniseerd"
|
msgstr "Map wordt gedownload en blijft gesynchroniseerd"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Kon modus niet wijzigen"
|
msgstr "Kon modus niet wijzigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2306,7 +2313,7 @@ msgstr ""
|
|||||||
"kopie houden, annuleer dan, zet de map op Gesynchroniseerd en wacht tot de "
|
"kopie houden, annuleer dan, zet de map op Gesynchroniseerd en wacht tot de "
|
||||||
"download klaar is voordat je hem verwijdert."
|
"download klaar is voordat je hem verwijdert."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2319,68 +2326,68 @@ msgstr ""
|
|||||||
"De lokale bestanden blijven op deze schijf en worden gewoon niet meer "
|
"De lokale bestanden blijven op deze schijf en worden gewoon niet meer "
|
||||||
"gesynchroniseerd. Kies of je ook de kopie in Proton Drive wilt verwijderen."
|
"gesynchroniseerd. Kies of je ook de kopie in Proton Drive wilt verwijderen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Synchroniseren van map stoppen?"
|
msgstr "Synchroniseren van map stoppen?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Ook uit Proton Drive verwijderen"
|
msgstr "Ook uit Proton Drive verwijderen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Verwijdert de enige kopie van deze bestanden."
|
msgstr "Verwijdert de enige kopie van deze bestanden."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "De lokale kopie blijft ongewijzigd."
|
msgstr "De lokale kopie blijft ongewijzigd."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Synchroniseren stoppen"
|
msgstr "Synchroniseren stoppen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Synchroniseren van map gestopt"
|
msgstr "Synchroniseren van map gestopt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Kon het synchroniseren van de map niet stoppen"
|
msgstr "Kon het synchroniseren van de map niet stoppen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Computer hernoemen"
|
msgstr "Computer hernoemen"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "“{name}” hernoemen."
|
msgstr "“{name}” hernoemen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Kon de computer niet hernoemen"
|
msgstr "Kon de computer niet hernoemen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "Een naam is vereist."
|
msgstr "Een naam is vereist."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Computer hernoemd"
|
msgstr "Computer hernoemd"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Typ “{name}” om te bevestigen"
|
msgstr "Typ “{name}” om te bevestigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Computer verwijderen?"
|
msgstr "Computer verwijderen?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2395,25 +2402,25 @@ msgstr ""
|
|||||||
"mee verwijderd. De bestanden op die computer zelf blijven onaangeroerd — "
|
"mee verwijderd. De bestanden op die computer zelf blijven onaangeroerd — "
|
||||||
"maar dit kan hier niet ongedaan worden gemaakt."
|
"maar dit kan hier niet ongedaan worden gemaakt."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Verwijderen"
|
msgstr "Verwijderen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Computer verwijderd"
|
msgstr "Computer verwijderd"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Kon de computer niet verwijderen"
|
msgstr "Kon de computer niet verwijderen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Deze back-up hier voortzetten?"
|
msgstr "Deze back-up hier voortzetten?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2432,20 +2439,49 @@ msgstr ""
|
|||||||
"gesynchroniseerd, worden niet verplaatst. Gebruik daarna “Terugzetten op "
|
"gesynchroniseerd, worden niet verplaatst. Gebruik daarna “Terugzetten op "
|
||||||
"deze computer” om terug te halen wat “{name}” synchroniseerde."
|
"deze computer” om terug te halen wat “{name}” synchroniseerde."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Hier voortzetten"
|
msgstr "Hier voortzetten"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Back-up nu als “{name}”"
|
msgstr "Back-up nu als “{name}”"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Kon die back-up hier niet voortzetten"
|
msgstr "Kon die back-up hier niet voortzetten"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Back-up naar deze computer verplaatsen?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"De mappen waarvan “{name}” een back-up maakt, gaan naar de back-up van deze "
|
||||||
|
"computer in Proton Drive, en je kiest zelf waar ze op deze computer komen. "
|
||||||
|
"“{name}” blijft in je account, zonder die mappen.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive eerst op “{name}”. Anders ziet het zijn mappen verdwijnen."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Back-up van “{name}” verplaatst"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Kon die back-up niet verplaatsen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
+107
-76
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 3.1.2\n"
|
"Project-Id-Version: proton-drive-linux 3.1.2\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:25+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -93,7 +93,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -239,11 +239,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -289,7 +290,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -331,7 +332,7 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -653,7 +654,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1219,10 +1220,11 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1254,7 +1256,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1268,7 +1270,7 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1536,7 +1538,7 @@ msgstr ""
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1690,7 +1692,7 @@ msgid "New Folder…"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1832,7 +1834,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1862,6 +1864,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2089,150 +2092,154 @@ msgstr ""
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
"with that computer's copy."
|
"with that computer's copy."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2243,7 +2250,7 @@ msgid ""
|
|||||||
"finish before removing it."
|
"finish before removing it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2252,68 +2259,68 @@ msgid ""
|
|||||||
"whether to also delete the copy in Proton Drive."
|
"whether to also delete the copy in Proton Drive."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2323,25 +2330,25 @@ msgid ""
|
|||||||
"here."
|
"here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2353,20 +2360,44 @@ msgid ""
|
|||||||
"syncing."
|
"syncing."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: Polish\n"
|
"Language-Team: Polish\n"
|
||||||
@@ -92,7 +92,7 @@ msgstr "Udostępnione przeze mnie"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Komputery"
|
msgstr "Komputery"
|
||||||
|
|
||||||
@@ -267,11 +267,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -317,7 +318,7 @@ msgstr "Przeszukaj Drive"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -359,7 +360,7 @@ msgstr "Siatka/lista"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Zmień nazwę"
|
msgstr "Zmień nazwę"
|
||||||
@@ -700,7 +701,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Nie można dodać katalogu synchronizacji"
|
msgstr "Nie można dodać katalogu synchronizacji"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Nie można przywrócić katalogów"
|
msgstr "Nie można przywrócić katalogów"
|
||||||
|
|
||||||
@@ -1292,10 +1293,11 @@ msgstr "Nie można wczytać albumów"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1327,7 +1329,7 @@ msgstr "Usługa Proton Drive nie odpowiedziała."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1341,7 +1343,7 @@ msgstr "Otwórz"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Zmień nazwę…"
|
msgstr "Zmień nazwę…"
|
||||||
|
|
||||||
@@ -1615,7 +1617,7 @@ msgstr "Rozmiar ikon"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1778,7 +1780,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Nowy katalog…"
|
msgstr "Nowy katalog…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1924,7 +1926,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Nowa nazwa"
|
msgstr "Nowa nazwa"
|
||||||
|
|
||||||
@@ -1955,6 +1957,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Proszę wybrać katalog docelowy."
|
msgstr "Proszę wybrać katalog docelowy."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Przenieś tutaj"
|
msgstr "Przenieś tutaj"
|
||||||
|
|
||||||
@@ -2189,31 +2192,35 @@ msgstr "Przeglądaj pliki"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Przywróć na tym komputerze…"
|
msgstr "Przywróć na tym komputerze…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Przenieś na ten komputer…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Kontynuuj tę kopię zapasową tutaj…"
|
msgstr "Kontynuuj tę kopię zapasową tutaj…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Usuń…"
|
msgstr "Usuń…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · ostatnia kopia zapasowa: {time}"
|
msgstr "{platform} · ostatnia kopia zapasowa: {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · brak kopii zapasowych"
|
msgstr "{platform} · brak kopii zapasowych"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Brak zarchiwizowanych katalogów"
|
msgstr "Brak zarchiwizowanych katalogów"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
@@ -2221,7 +2228,7 @@ msgstr[0] "{n} katalog z kopią zapasową"
|
|||||||
msgstr[1] "{n} katalogi z kopią zapasową"
|
msgstr[1] "{n} katalogi z kopią zapasową"
|
||||||
msgstr[2] "{n} katalogów z kopią zapasową"
|
msgstr[2] "{n} katalogów z kopią zapasową"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
@@ -2229,61 +2236,61 @@ msgstr[0] "{folders} · {n} wymaga uwagi"
|
|||||||
msgstr[1] "{folders} · {n} wymagają uwagi"
|
msgstr[1] "{folders} · {n} wymagają uwagi"
|
||||||
msgstr[2] "{folders} · {n} wymaga uwagi"
|
msgstr[2] "{folders} · {n} wymaga uwagi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "synchronizowanie…"
|
msgstr "synchronizowanie…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "błąd synchronizacji"
|
msgstr "błąd synchronizacji"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "wymaga uwagi"
|
msgstr "wymaga uwagi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "aktualne"
|
msgstr "aktualne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "sprawdzanie zmian…"
|
msgstr "sprawdzanie zmian…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "sprawdzanie zmian — {done} z {total}"
|
msgstr "sprawdzanie zmian — {done} z {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "synchronizowanie {done} z {total}"
|
msgstr "synchronizowanie {done} z {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "synchronizowanie {file} — {done} z {total}"
|
msgstr "synchronizowanie {file} — {done} z {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Dodaj katalog do synchronizacji"
|
msgstr "Dodaj katalog do synchronizacji"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Synchronizowanie katalogu…"
|
msgstr "Synchronizowanie katalogu…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Nie można dodać katalogu"
|
msgstr "Nie można dodać katalogu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Nie można wyświetlić listy katalogów do przywrócenia"
|
msgstr "Nie można wyświetlić listy katalogów do przywrócenia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2291,19 +2298,19 @@ msgstr ""
|
|||||||
"Należy zaznaczyć katalogi do synchronizacji z tym komputerem i dostosować "
|
"Należy zaznaczyć katalogi do synchronizacji z tym komputerem i dostosować "
|
||||||
"położenie każdego z nich."
|
"położenie każdego z nich."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Przywróć katalogi"
|
msgstr "Przywróć katalogi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Przywróć"
|
msgstr "Przywróć"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Przywracanie katalogów…"
|
msgstr "Przywracanie katalogów…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2312,37 +2319,37 @@ msgstr ""
|
|||||||
"Te katalogi mają kopię zapasową z komputera „{name}”. Przywrócone katalogi "
|
"Te katalogi mają kopię zapasową z komputera „{name}”. Przywrócone katalogi "
|
||||||
"nadal będą synchronizowane z kopią tego komputera."
|
"nadal będą synchronizowane z kopią tego komputera."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr "Te katalogi mają kopię zapasową w Proton Drive pod tym komputerem."
|
msgstr "Te katalogi mają kopię zapasową w Proton Drive pod tym komputerem."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nie ma nic do przywrócenia — wszystkie katalogi komputera „{name}” są tutaj "
|
"Nie ma nic do przywrócenia — wszystkie katalogi komputera „{name}” są tutaj "
|
||||||
"synchronizowane."
|
"synchronizowane."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nie ma nic do przywrócenia — wszystkie katalogi tego komputera są tutaj "
|
"Nie ma nic do przywrócenia — wszystkie katalogi tego komputera są tutaj "
|
||||||
"synchronizowane."
|
"synchronizowane."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "Katalog przejdzie w tryb tylko online"
|
msgstr "Katalog przejdzie w tryb tylko online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "Katalog zostanie pobrany i będzie synchronizowany"
|
msgstr "Katalog zostanie pobrany i będzie synchronizowany"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Nie można zmienić trybu"
|
msgstr "Nie można zmienić trybu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2359,7 +2366,7 @@ msgstr ""
|
|||||||
"pusty. Aby zachować lokalną kopię, należy anulować, przełączyć katalog na "
|
"pusty. Aby zachować lokalną kopię, należy anulować, przełączyć katalog na "
|
||||||
"tryb Synchronizowany i poczekać na ukończenie pobierania przed usunięciem."
|
"tryb Synchronizowany i poczekać na ukończenie pobierania przed usunięciem."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2372,68 +2379,68 @@ msgstr ""
|
|||||||
"Lokalne pliki pozostaną na tym dysku i po prostu przestaną być "
|
"Lokalne pliki pozostaną na tym dysku i po prostu przestaną być "
|
||||||
"synchronizowane. Można też usunąć kopię w Proton Drive."
|
"synchronizowane. Można też usunąć kopię w Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Zatrzymać synchronizację katalogu?"
|
msgstr "Zatrzymać synchronizację katalogu?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Usuń także z Proton Drive"
|
msgstr "Usuń także z Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Usuwa jedyną kopię tych plików."
|
msgstr "Usuwa jedyną kopię tych plików."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "Lokalna kopia pozostanie bez zmian."
|
msgstr "Lokalna kopia pozostanie bez zmian."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Zatrzymaj synchronizację"
|
msgstr "Zatrzymaj synchronizację"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "Zatrzymano synchronizację katalogu"
|
msgstr "Zatrzymano synchronizację katalogu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Nie można zatrzymać synchronizacji katalogu"
|
msgstr "Nie można zatrzymać synchronizacji katalogu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Zmiana nazwy komputera"
|
msgstr "Zmiana nazwy komputera"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "Proszę podać nową nazwę komputera „{name}”."
|
msgstr "Proszę podać nową nazwę komputera „{name}”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Nie można zmienić nazwy komputera"
|
msgstr "Nie można zmienić nazwy komputera"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "Nazwa jest wymagana."
|
msgstr "Nazwa jest wymagana."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Zmieniono nazwę komputera"
|
msgstr "Zmieniono nazwę komputera"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Proszę wpisać „{name}”, aby potwierdzić"
|
msgstr "Proszę wpisać „{name}”, aby potwierdzić"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Usunąć komputer?"
|
msgstr "Usunąć komputer?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2448,25 +2455,25 @@ msgstr ""
|
|||||||
"z nim. Pliki na samym komputerze pozostaną nietknięte — ale tej operacji nie "
|
"z nim. Pliki na samym komputerze pozostaną nietknięte — ale tej operacji nie "
|
||||||
"można tutaj cofnąć."
|
"można tutaj cofnąć."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Usuń"
|
msgstr "Usuń"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Usunięto komputer"
|
msgstr "Usunięto komputer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Nie można usunąć komputera"
|
msgstr "Nie można usunąć komputera"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Kontynuować tę kopię zapasową tutaj?"
|
msgstr "Kontynuować tę kopię zapasową tutaj?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2485,20 +2492,51 @@ msgstr ""
|
|||||||
"przeniesione. Aby odzyskać to, co synchronizował „{name}”, proszę potem użyć "
|
"przeniesione. Aby odzyskać to, co synchronizował „{name}”, proszę potem użyć "
|
||||||
"opcji „Przywróć na tym komputerze”."
|
"opcji „Przywróć na tym komputerze”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Kontynuuj tutaj"
|
msgstr "Kontynuuj tutaj"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Kopia zapasowa jest teraz tworzona jako „{name}”"
|
msgstr "Kopia zapasowa jest teraz tworzona jako „{name}”"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Nie można kontynuować tej kopii zapasowej tutaj"
|
msgstr "Nie można kontynuować tej kopii zapasowej tutaj"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Przenieść kopię zapasową na ten komputer?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"Foldery, których kopię zapasową tworzy „{name}”, zostaną przeniesione do "
|
||||||
|
"kopii zapasowej tego komputera w Proton Drive, a Ty wybierzesz, gdzie mają "
|
||||||
|
"się znaleźć na tym komputerze. „{name}” pozostanie na Twoim koncie, bez tych "
|
||||||
|
"folderów.\n"
|
||||||
|
"\n"
|
||||||
|
"Najpierw zamknij Proton Drive na „{name}”. W przeciwnym razie zobaczy, jak "
|
||||||
|
"jego foldery znikają."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Przeniesiono kopię zapasową „{name}”"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Nie można przenieść tej kopii zapasowej"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
+113
-76
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
|
"POT-Creation-Date: 2026-10-08 13:23+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||||
"Language-Team: Portuguese (Brazil)\n"
|
"Language-Team: Portuguese (Brazil)\n"
|
||||||
@@ -90,7 +90,7 @@ msgstr "Compartilhados por mim"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:776
|
#: crates/pdfs-gui/src/app/main.rs:776
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
#: crates/pdfs-gui/src/app/pages/devices.rs:485
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computadores"
|
msgstr "Computadores"
|
||||||
|
|
||||||
@@ -262,11 +262,12 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1968
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2381
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:788
|
#: crates/pdfs-gui/src/app/pages/devices.rs:792
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:941
|
#: crates/pdfs-gui/src/app/pages/devices.rs:945
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:979
|
#: crates/pdfs-gui/src/app/pages/devices.rs:983
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1031
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1035
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1079
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1119
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
#: crates/pdfs-gui/src/app/pages/locations.rs:809
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
|
||||||
@@ -312,7 +313,7 @@ msgstr "Pesquisar no Drive"
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1388
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
#: crates/pdfs-gui/src/app/pages/devices.rs:558
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:526
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
#: crates/pdfs-gui/src/app/pages/trash.rs:246
|
||||||
@@ -354,7 +355,7 @@ msgstr "Grade / lista"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
#: crates/pdfs-gui/src/app/pages/albums.rs:298
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:980
|
#: crates/pdfs-gui/src/app/pages/devices.rs:984
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
#: crates/pdfs-gui/src/app/widgets/details.rs:159
|
||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Renomear"
|
msgstr "Renomear"
|
||||||
@@ -682,7 +683,7 @@ msgid "Couldn't add a sync folder"
|
|||||||
msgstr "Não foi possível adicionar uma pasta sincronizada"
|
msgstr "Não foi possível adicionar uma pasta sincronizada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:58
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:823
|
#: crates/pdfs-gui/src/app/pages/devices.rs:827
|
||||||
msgid "Couldn't restore folders"
|
msgid "Couldn't restore folders"
|
||||||
msgstr "Não foi possível restaurar as pastas"
|
msgstr "Não foi possível restaurar as pastas"
|
||||||
|
|
||||||
@@ -1262,10 +1263,11 @@ msgstr "Não foi possível carregar os álbuns"
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1848
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2315
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2491
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:694
|
#: crates/pdfs-gui/src/app/pages/devices.rs:698
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:734
|
#: crates/pdfs-gui/src/app/pages/devices.rs:738
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:884
|
#: crates/pdfs-gui/src/app/pages/devices.rs:888
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1156
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1185
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:220
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
#: crates/pdfs-gui/src/app/pages/locations.rs:536
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
#: crates/pdfs-gui/src/app/pages/locations.rs:783
|
||||||
@@ -1297,7 +1299,7 @@ msgstr "O serviço do Proton Drive não respondeu."
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
#: crates/pdfs-gui/src/app/pages/albums.rs:206
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
#: crates/pdfs-gui/src/app/pages/browser.rs:840
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:530
|
#: crates/pdfs-gui/src/app/pages/devices.rs:534
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3190
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
#: crates/pdfs-gui/src/app/pages/shared.rs:541
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||||
@@ -1311,7 +1313,7 @@ msgstr "Abrir"
|
|||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
#: crates/pdfs-gui/src/app/pages/albums.rs:212
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
#: crates/pdfs-gui/src/app/pages/browser.rs:882
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
#: crates/pdfs-gui/src/app/pages/devices.rs:406
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:444
|
#: crates/pdfs-gui/src/app/pages/devices.rs:448
|
||||||
msgid "Rename…"
|
msgid "Rename…"
|
||||||
msgstr "Renomear…"
|
msgstr "Renomear…"
|
||||||
|
|
||||||
@@ -1579,7 +1581,7 @@ msgstr "Tamanho dos ícones"
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
#: crates/pdfs-gui/src/app/pages/browser.rs:538
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
#: crates/pdfs-gui/src/app/pages/browser.rs:925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:539
|
#: crates/pdfs-gui/src/app/pages/devices.rs:543
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1988
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
#: crates/pdfs-gui/src/app/pages/shared.rs:565
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:507
|
||||||
@@ -1733,7 +1735,7 @@ msgid "New Folder…"
|
|||||||
msgstr "Nova pasta…"
|
msgstr "Nova pasta…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
#: crates/pdfs-gui/src/app/pages/browser.rs:953
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:550
|
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
#: crates/pdfs-gui/src/app/pages/shared.rs:582
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:522
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
#: crates/pdfs-gui/src/app/pages/trash.rs:242
|
||||||
@@ -1878,7 +1880,7 @@ msgid "{status}. {message}"
|
|||||||
msgstr "{status}. {message}"
|
msgstr "{status}. {message}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1875
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
#: crates/pdfs-gui/src/app/pages/devices.rs:977
|
||||||
msgid "New name"
|
msgid "New name"
|
||||||
msgstr "Novo nome"
|
msgstr "Novo nome"
|
||||||
|
|
||||||
@@ -1908,6 +1910,7 @@ msgid "Choose the folder to move into."
|
|||||||
msgstr "Escolha a pasta de destino."
|
msgstr "Escolha a pasta de destino."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1969
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1120
|
||||||
msgid "Move Here"
|
msgid "Move Here"
|
||||||
msgstr "Mover para cá"
|
msgstr "Mover para cá"
|
||||||
|
|
||||||
@@ -2136,99 +2139,103 @@ msgstr "Navegar pelos arquivos"
|
|||||||
msgid "Restore to This Computer…"
|
msgid "Restore to This Computer…"
|
||||||
msgstr "Restaurar neste computador…"
|
msgstr "Restaurar neste computador…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:451
|
#: crates/pdfs-gui/src/app/pages/devices.rs:443
|
||||||
|
msgid "Move to This Computer…"
|
||||||
|
msgstr "Mover para este computador…"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:455
|
||||||
msgid "Continue This Backup Here…"
|
msgid "Continue This Backup Here…"
|
||||||
msgstr "Continuar este backup aqui…"
|
msgstr "Continuar este backup aqui…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:456
|
#: crates/pdfs-gui/src/app/pages/devices.rs:460
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
#: crates/pdfs-gui/src/app/pages/shared.rs:895
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Remover…"
|
msgstr "Remover…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:567
|
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · last backup {time}"
|
msgid "{platform} · last backup {time}"
|
||||||
msgstr "{platform} · último backup {time}"
|
msgstr "{platform} · último backup {time}"
|
||||||
|
|
||||||
#. Translators: {platform} is the device's platform, such as "Linux".
|
#. Translators: {platform} is the device's platform, such as "Linux".
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:571
|
#: crates/pdfs-gui/src/app/pages/devices.rs:575
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{platform} · no backups yet"
|
msgid "{platform} · no backups yet"
|
||||||
msgstr "{platform} · nenhum backup ainda"
|
msgstr "{platform} · nenhum backup ainda"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:587
|
#: crates/pdfs-gui/src/app/pages/devices.rs:591
|
||||||
msgid "No folders backed up yet"
|
msgid "No folders backed up yet"
|
||||||
msgstr "Nenhuma pasta com backup ainda"
|
msgstr "Nenhuma pasta com backup ainda"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:590
|
#: crates/pdfs-gui/src/app/pages/devices.rs:594
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} folder backed up"
|
msgid "{n} folder backed up"
|
||||||
msgid_plural "{n} folders backed up"
|
msgid_plural "{n} folders backed up"
|
||||||
msgstr[0] "{n} pasta com backup"
|
msgstr[0] "{n} pasta com backup"
|
||||||
msgstr[1] "{n} pastas com backup"
|
msgstr[1] "{n} pastas com backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:603
|
#: crates/pdfs-gui/src/app/pages/devices.rs:607
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{folders} · {n} needs attention"
|
msgid "{folders} · {n} needs attention"
|
||||||
msgid_plural "{folders} · {n} need attention"
|
msgid_plural "{folders} · {n} need attention"
|
||||||
msgstr[0] "{folders} · {n} requer atenção"
|
msgstr[0] "{folders} · {n} requer atenção"
|
||||||
msgstr[1] "{folders} · {n} requerem atenção"
|
msgstr[1] "{folders} · {n} requerem atenção"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:614
|
#: crates/pdfs-gui/src/app/pages/devices.rs:618
|
||||||
msgid "syncing…"
|
msgid "syncing…"
|
||||||
msgstr "sincronizando…"
|
msgstr "sincronizando…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:615
|
#: crates/pdfs-gui/src/app/pages/devices.rs:619
|
||||||
msgid "sync error"
|
msgid "sync error"
|
||||||
msgstr "erro de sincronização"
|
msgstr "erro de sincronização"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:616
|
#: crates/pdfs-gui/src/app/pages/devices.rs:620
|
||||||
msgid "needs attention"
|
msgid "needs attention"
|
||||||
msgstr "requer atenção"
|
msgstr "requer atenção"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:617
|
#: crates/pdfs-gui/src/app/pages/devices.rs:621
|
||||||
msgid "up to date"
|
msgid "up to date"
|
||||||
msgstr "atualizado"
|
msgstr "atualizado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:629
|
#: crates/pdfs-gui/src/app/pages/devices.rs:633
|
||||||
msgid "checking for changes…"
|
msgid "checking for changes…"
|
||||||
msgstr "verificando alterações…"
|
msgstr "verificando alterações…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:632
|
#: crates/pdfs-gui/src/app/pages/devices.rs:636
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "checking for changes — {done} of {total}"
|
msgid "checking for changes — {done} of {total}"
|
||||||
msgstr "verificando alterações — {done} de {total}"
|
msgstr "verificando alterações — {done} de {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:644
|
#: crates/pdfs-gui/src/app/pages/devices.rs:648
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {done} of {total}"
|
msgid "syncing {done} of {total}"
|
||||||
msgstr "sincronizando {done} de {total}"
|
msgstr "sincronizando {done} de {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:650
|
#: crates/pdfs-gui/src/app/pages/devices.rs:654
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "syncing {file} — {done} of {total}"
|
msgid "syncing {file} — {done} of {total}"
|
||||||
msgstr "sincronizando {file} — {done} de {total}"
|
msgstr "sincronizando {file} — {done} de {total}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:662
|
#: crates/pdfs-gui/src/app/pages/devices.rs:666
|
||||||
msgid "Add Folder to Sync"
|
msgid "Add Folder to Sync"
|
||||||
msgstr "Adicionar pasta à sincronização"
|
msgstr "Adicionar pasta à sincronização"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:686
|
#: crates/pdfs-gui/src/app/pages/devices.rs:690
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1593
|
||||||
msgid "Syncing folder…"
|
msgid "Syncing folder…"
|
||||||
msgstr "Sincronizando pasta…"
|
msgstr "Sincronizando pasta…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:689
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
#: crates/pdfs-gui/src/app/pages/devices.rs:693
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:697
|
||||||
msgid "Couldn't add folder"
|
msgid "Couldn't add folder"
|
||||||
msgstr "Não foi possível adicionar a pasta"
|
msgstr "Não foi possível adicionar a pasta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:727
|
#: crates/pdfs-gui/src/app/pages/devices.rs:731
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:733
|
#: crates/pdfs-gui/src/app/pages/devices.rs:737
|
||||||
msgid "Couldn't list folders to restore"
|
msgid "Couldn't list folders to restore"
|
||||||
msgstr "Não foi possível listar as pastas para restaurar"
|
msgstr "Não foi possível listar as pastas para restaurar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:759
|
#: crates/pdfs-gui/src/app/pages/devices.rs:763
|
||||||
msgid ""
|
msgid ""
|
||||||
"Tick the folders to sync to this machine, and adjust where each one should "
|
"Tick the folders to sync to this machine, and adjust where each one should "
|
||||||
"live."
|
"live."
|
||||||
@@ -2236,19 +2243,19 @@ msgstr ""
|
|||||||
"Marque as pastas a sincronizar com esta máquina e ajuste onde cada uma deve "
|
"Marque as pastas a sincronizar com esta máquina e ajuste onde cada uma deve "
|
||||||
"ficar."
|
"ficar."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:782
|
#: crates/pdfs-gui/src/app/pages/devices.rs:786
|
||||||
msgid "Restore Folders"
|
msgid "Restore Folders"
|
||||||
msgstr "Restaurar pastas"
|
msgstr "Restaurar pastas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:789
|
#: crates/pdfs-gui/src/app/pages/devices.rs:793
|
||||||
msgid "Restore"
|
msgid "Restore"
|
||||||
msgstr "Restaurar"
|
msgstr "Restaurar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:822
|
#: crates/pdfs-gui/src/app/pages/devices.rs:826
|
||||||
msgid "Restoring folders…"
|
msgid "Restoring folders…"
|
||||||
msgstr "Restaurando pastas…"
|
msgstr "Restaurando pastas…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:834
|
#: crates/pdfs-gui/src/app/pages/devices.rs:838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
"These folders are backed up from “{name}”. Restored folders keep syncing "
|
||||||
@@ -2257,36 +2264,36 @@ msgstr ""
|
|||||||
"Estas pastas têm backup a partir de “{name}”. As pastas restauradas "
|
"Estas pastas têm backup a partir de “{name}”. As pastas restauradas "
|
||||||
"continuam sincronizando com a cópia daquele computador."
|
"continuam sincronizando com a cópia daquele computador."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:837
|
#: crates/pdfs-gui/src/app/pages/devices.rs:841
|
||||||
msgid "These folders are backed up under this computer in Proton Drive."
|
msgid "These folders are backed up under this computer in Proton Drive."
|
||||||
msgstr "Estas pastas têm backup sob este computador no Proton Drive."
|
msgstr "Estas pastas têm backup sob este computador no Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:846
|
#: crates/pdfs-gui/src/app/pages/devices.rs:850
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
msgid "Nothing to restore — “{name}”'s folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nada a restaurar — as pastas de “{name}” já estão todas sincronizadas aqui."
|
"Nada a restaurar — as pastas de “{name}” já estão todas sincronizadas aqui."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:849
|
#: crates/pdfs-gui/src/app/pages/devices.rs:853
|
||||||
msgid "Nothing to restore — this computer's folders are all synced here."
|
msgid "Nothing to restore — this computer's folders are all synced here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nada a restaurar — as pastas deste computador já estão todas sincronizadas "
|
"Nada a restaurar — as pastas deste computador já estão todas sincronizadas "
|
||||||
"aqui."
|
"aqui."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:873
|
#: crates/pdfs-gui/src/app/pages/devices.rs:877
|
||||||
msgid "Folder will switch to online only"
|
msgid "Folder will switch to online only"
|
||||||
msgstr "A pasta passará a ser somente online"
|
msgstr "A pasta passará a ser somente online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:875
|
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
||||||
msgid "Folder will download and stay synced"
|
msgid "Folder will download and stay synced"
|
||||||
msgstr "A pasta será baixada e permanecerá sincronizada"
|
msgstr "A pasta será baixada e permanecerá sincronizada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:879
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
#: crates/pdfs-gui/src/app/pages/devices.rs:883
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:887
|
||||||
msgid "Couldn't change mode"
|
msgid "Couldn't change mode"
|
||||||
msgstr "Não foi possível alterar o modo"
|
msgstr "Não foi possível alterar o modo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:915
|
#: crates/pdfs-gui/src/app/pages/devices.rs:919
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2303,7 +2310,7 @@ msgstr ""
|
|||||||
"uma cópia local, cancele, mude a pasta para Sincronizada e aguarde o "
|
"uma cópia local, cancele, mude a pasta para Sincronizada e aguarde o "
|
||||||
"download terminar antes de removê-la."
|
"download terminar antes de removê-la."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:921
|
#: crates/pdfs-gui/src/app/pages/devices.rs:925
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stop syncing “{path}”?\n"
|
"Stop syncing “{path}”?\n"
|
||||||
@@ -2316,68 +2323,68 @@ msgstr ""
|
|||||||
"Os arquivos locais permanecem neste disco e simplesmente deixam de ser "
|
"Os arquivos locais permanecem neste disco e simplesmente deixam de ser "
|
||||||
"sincronizados. Escolha se também deseja excluir a cópia no Proton Drive."
|
"sincronizados. Escolha se também deseja excluir a cópia no Proton Drive."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:926
|
#: crates/pdfs-gui/src/app/pages/devices.rs:930
|
||||||
msgid "Stop Syncing Folder?"
|
msgid "Stop Syncing Folder?"
|
||||||
msgstr "Parar de sincronizar a pasta?"
|
msgstr "Parar de sincronizar a pasta?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:931
|
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
||||||
msgid "Also delete from Proton Drive"
|
msgid "Also delete from Proton Drive"
|
||||||
msgstr "Também excluir do Proton Drive"
|
msgstr "Também excluir do Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:933
|
#: crates/pdfs-gui/src/app/pages/devices.rs:937
|
||||||
msgid "Deletes the only copy of these files."
|
msgid "Deletes the only copy of these files."
|
||||||
msgstr "Exclui a única cópia destes arquivos."
|
msgstr "Exclui a única cópia destes arquivos."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:935
|
#: crates/pdfs-gui/src/app/pages/devices.rs:939
|
||||||
msgid "The local copy is unaffected."
|
msgid "The local copy is unaffected."
|
||||||
msgstr "A cópia local não é afetada."
|
msgstr "A cópia local não é afetada."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:942
|
#: crates/pdfs-gui/src/app/pages/devices.rs:946
|
||||||
msgid "Stop Syncing"
|
msgid "Stop Syncing"
|
||||||
msgstr "Parar de sincronizar"
|
msgstr "Parar de sincronizar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:955
|
#: crates/pdfs-gui/src/app/pages/devices.rs:959
|
||||||
msgid "Stopped syncing folder"
|
msgid "Stopped syncing folder"
|
||||||
msgstr "A pasta deixou de ser sincronizada"
|
msgstr "A pasta deixou de ser sincronizada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:956
|
#: crates/pdfs-gui/src/app/pages/devices.rs:960
|
||||||
msgid "Couldn't stop syncing the folder"
|
msgid "Couldn't stop syncing the folder"
|
||||||
msgstr "Não foi possível parar de sincronizar a pasta"
|
msgstr "Não foi possível parar de sincronizar a pasta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:967
|
#: crates/pdfs-gui/src/app/pages/devices.rs:971
|
||||||
msgid "Rename Computer"
|
msgid "Rename Computer"
|
||||||
msgstr "Renomear computador"
|
msgstr "Renomear computador"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's current name.
|
#. Translators: {name} is the computer's current name.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:969
|
#: crates/pdfs-gui/src/app/pages/devices.rs:973
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Rename “{name}”."
|
msgid "Rename “{name}”."
|
||||||
msgstr "Renomear “{name}”."
|
msgstr "Renomear “{name}”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:994
|
#: crates/pdfs-gui/src/app/pages/devices.rs:998
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1006
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1010
|
||||||
msgid "Couldn't rename the computer"
|
msgid "Couldn't rename the computer"
|
||||||
msgstr "Não foi possível renomear o computador"
|
msgstr "Não foi possível renomear o computador"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:995
|
#: crates/pdfs-gui/src/app/pages/devices.rs:999
|
||||||
msgid "A name is required."
|
msgid "A name is required."
|
||||||
msgstr "Um nome é obrigatório."
|
msgstr "Um nome é obrigatório."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1005
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1009
|
||||||
msgid "Computer renamed"
|
msgid "Computer renamed"
|
||||||
msgstr "Computador renomeado"
|
msgstr "Computador renomeado"
|
||||||
|
|
||||||
#. Translators: {name} is the computer's name, which the user must type.
|
#. Translators: {name} is the computer's name, which the user must type.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1018
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1022
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Type “{name}” to confirm"
|
msgid "Type “{name}” to confirm"
|
||||||
msgstr "Digite “{name}” para confirmar"
|
msgstr "Digite “{name}” para confirmar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1023
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1027
|
||||||
msgid "Remove Computer?"
|
msgid "Remove Computer?"
|
||||||
msgstr "Remover computador?"
|
msgstr "Remover computador?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1026
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1030
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove “{name}” from this account?\n"
|
"Remove “{name}” from this account?\n"
|
||||||
@@ -2392,25 +2399,25 @@ msgstr ""
|
|||||||
"naquele próprio computador não são tocados — mas isso não pode ser desfeito "
|
"naquele próprio computador não são tocados — mas isso não pode ser desfeito "
|
||||||
"daqui."
|
"daqui."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1032
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1036
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1028
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:529
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Remover"
|
msgstr "Remover"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1049
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1053
|
||||||
msgid "Computer removed"
|
msgid "Computer removed"
|
||||||
msgstr "Computador removido"
|
msgstr "Computador removido"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1050
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1054
|
||||||
msgid "Couldn't remove the computer"
|
msgid "Couldn't remove the computer"
|
||||||
msgstr "Não foi possível remover o computador"
|
msgstr "Não foi possível remover o computador"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1068
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1072
|
||||||
msgid "Continue This Backup Here?"
|
msgid "Continue This Backup Here?"
|
||||||
msgstr "Continuar este backup aqui?"
|
msgstr "Continuar este backup aqui?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1071
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1075
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This computer takes over the backup of “{name}”, for example after a "
|
"This computer takes over the backup of “{name}”, for example after a "
|
||||||
@@ -2429,20 +2436,50 @@ msgstr ""
|
|||||||
"movidas. Depois, use “Restaurar neste computador” para recuperar o que "
|
"movidas. Depois, use “Restaurar neste computador” para recuperar o que "
|
||||||
"“{name}” sincronizava."
|
"“{name}” sincronizava."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1076
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1080
|
||||||
msgid "Continue Here"
|
msgid "Continue Here"
|
||||||
msgstr "Continuar aqui"
|
msgstr "Continuar aqui"
|
||||||
|
|
||||||
#. Translators: {name} is the name of the computer whose backup this one took over.
|
#. Translators: {name} is the name of the computer whose backup this one took over.
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1083
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1087
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Now backing up as “{name}”"
|
msgid "Now backing up as “{name}”"
|
||||||
msgstr "Agora fazendo backup como “{name}”"
|
msgstr "Agora fazendo backup como “{name}”"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:1092
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1096
|
||||||
msgid "Couldn't continue that backup here"
|
msgid "Couldn't continue that backup here"
|
||||||
msgstr "Não foi possível continuar esse backup aqui"
|
msgstr "Não foi possível continuar esse backup aqui"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1112
|
||||||
|
msgid "Move Backup to This Computer?"
|
||||||
|
msgstr "Mover o backup para este computador?"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1115
|
||||||
|
#, rust-format
|
||||||
|
msgid ""
|
||||||
|
"The folders backed up by “{name}” move into this computer's backup in Proton "
|
||||||
|
"Drive, and you choose where they go on this computer. “{name}” stays in your "
|
||||||
|
"account, without those folders.\n"
|
||||||
|
"\n"
|
||||||
|
"Stop Proton Drive on “{name}” first. Otherwise it sees its folders disappear."
|
||||||
|
msgstr ""
|
||||||
|
"As pastas cujo backup é feito por “{name}” passam para o backup deste "
|
||||||
|
"computador no Proton Drive, e você escolhe onde ficam neste computador. "
|
||||||
|
"“{name}” continua na sua conta, sem essas pastas.\n"
|
||||||
|
"\n"
|
||||||
|
"Feche primeiro o Proton Drive em “{name}”. Caso contrário, ele verá as "
|
||||||
|
"pastas sumirem."
|
||||||
|
|
||||||
|
#. Translators: {name} is the name of the computer whose folders moved to this one.
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1127
|
||||||
|
#, rust-format
|
||||||
|
msgid "Moved the backup of “{name}”"
|
||||||
|
msgstr "Backup de “{name}” movido"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/devices.rs:1141
|
||||||
|
msgid "Couldn't move that backup"
|
||||||
|
msgstr "Não foi possível mover esse backup"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
#: crates/pdfs-gui/src/app/pages/duplicates.rs:81
|
||||||
msgctxt "duplicates"
|
msgctxt "duplicates"
|
||||||
msgid "Exact"
|
msgid "Exact"
|
||||||
|
|||||||
Reference in new issue
Block a user