mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
Merge pull request #27 from narrrl/feature/two-password-mode
Feature/two password mode
This commit is contained in:
26 files changed
+2921
-1419
No files matched your search
Generated
+14
-10
@@ -3474,7 +3474,7 @@ checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pdfs-cli"
|
name = "pdfs-cli"
|
||||||
version = "3.0.0"
|
version = "3.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
@@ -3485,13 +3485,15 @@ dependencies = [
|
|||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pdfs-core"
|
name = "pdfs-core"
|
||||||
version = "3.0.0"
|
version = "3.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
"base64 0.23.1",
|
||||||
"dbus-secret-service-keyring-store",
|
"dbus-secret-service-keyring-store",
|
||||||
"directories",
|
"directories",
|
||||||
"ignore",
|
"ignore",
|
||||||
@@ -3508,12 +3510,13 @@ dependencies = [
|
|||||||
"thiserror 2.0.20",
|
"thiserror 2.0.20",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
"zeroize",
|
||||||
"zip",
|
"zip",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pdfs-fuse"
|
name = "pdfs-fuse"
|
||||||
version = "3.0.0"
|
version = "3.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"base64 0.23.1",
|
"base64 0.23.1",
|
||||||
@@ -3535,7 +3538,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pdfs-gui"
|
name = "pdfs-gui"
|
||||||
version = "3.0.0"
|
version = "3.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-channel",
|
"async-channel",
|
||||||
@@ -3572,9 +3575,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pgp"
|
name = "pgp"
|
||||||
version = "0.20.0"
|
version = "0.21.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1cfa4743b28656065ff4c0ba09e46b357a65e8c00fc2341e89084b82f87cbdf1"
|
checksum = "ae70f4d9325a391db30d115d6191a7bb67cec856aa0bba131290f0c4e09a532a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aead 0.5.2",
|
"aead 0.5.2",
|
||||||
"aes 0.8.4",
|
"aes 0.8.4",
|
||||||
@@ -3775,9 +3778,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proton-drive-rs"
|
name = "proton-drive-rs"
|
||||||
version = "0.7.2"
|
version = "0.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d6ce113d234474821d34787436ee80e1458e3d8a8f97212219615ed315eb70be"
|
checksum = "5bde475139afb5fc2649621e1d283e243f9df2bb412f08802cdf3f4ffaf97c44"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"base64 0.23.1",
|
"base64 0.23.1",
|
||||||
@@ -3802,9 +3805,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proton-sdk"
|
name = "proton-sdk"
|
||||||
version = "0.7.2"
|
version = "0.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2a33c67df9694f90ce60e5b34984275956244138511b4640ca0d100e1dac8b3d"
|
checksum = "faf32d0a03f7d13bd9bdcc8c9503e35e9df9318ca9f2a100dcf06cf50cb7ac8c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes-gcm 0.11.1",
|
"aes-gcm 0.11.1",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -3831,6 +3834,7 @@ dependencies = [
|
|||||||
"thiserror 2.0.20",
|
"thiserror 2.0.20",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
+4
-3
@@ -3,7 +3,7 @@ resolver = "2"
|
|||||||
members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"]
|
members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "3.0.0"
|
version = "3.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
authors = ["Nils Pukropp <contact@narl.io>"]
|
authors = ["Nils Pukropp <contact@narl.io>"]
|
||||||
@@ -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.7.2" }
|
proton-sdk = { version = "0.8.0" }
|
||||||
proton-drive-rs = { version = "0.7.2" }
|
proton-drive-rs = { version = "0.8.0" }
|
||||||
|
|
||||||
# Internal crates.
|
# Internal crates.
|
||||||
pdfs-core = { path = "crates/pdfs-core" }
|
pdfs-core = { path = "crates/pdfs-core" }
|
||||||
@@ -26,6 +26,7 @@ tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "fs",
|
|||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
base64 = "0.23"
|
base64 = "0.23"
|
||||||
|
zeroize = "1"
|
||||||
thiserror = "2"
|
thiserror = "2"
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
# Non-poisoning mutexes. A handler that panics while holding a lock must not
|
# Non-poisoning mutexes. A handler that panics while holding a lock must not
|
||||||
|
|||||||
@@ -23,3 +23,4 @@ tracing-subscriber.workspace = true
|
|||||||
clap.workspace = true
|
clap.workspace = true
|
||||||
rpassword.workspace = true
|
rpassword.workspace = true
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
|
zeroize.workspace = true
|
||||||
+156
-7
@@ -135,6 +135,24 @@ enum Command {
|
|||||||
/// Account email; prompted if omitted.
|
/// Account email; prompted if omitted.
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
username: Option<String>,
|
username: Option<String>,
|
||||||
|
/// For a two-password account, keep the mailbox password's unlock in the
|
||||||
|
/// system keyring so the daemon starts without asking after every login.
|
||||||
|
/// Without it the unlock lives in kernel memory for this session only.
|
||||||
|
#[arg(long)]
|
||||||
|
remember: bool,
|
||||||
|
},
|
||||||
|
/// Enter the mailbox password of a two-password account so the daemon can
|
||||||
|
/// unlock your files. Needed once per login session.
|
||||||
|
Unlock {
|
||||||
|
/// Keep the unlock in the system keyring instead of kernel memory only.
|
||||||
|
#[arg(long)]
|
||||||
|
remember: bool,
|
||||||
|
},
|
||||||
|
/// Forget the unlock held in kernel memory; the account is locked again.
|
||||||
|
Lock {
|
||||||
|
/// Also remove an unlock kept in the keyring with `--remember`.
|
||||||
|
#[arg(long)]
|
||||||
|
forget: bool,
|
||||||
},
|
},
|
||||||
/// Forget the stored session.
|
/// Forget the stored session.
|
||||||
Logout,
|
Logout,
|
||||||
@@ -803,7 +821,9 @@ fn main() -> Result<()> {
|
|||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
JSON_OUTPUT.store(cli.json, std::sync::atomic::Ordering::Relaxed);
|
JSON_OUTPUT.store(cli.json, std::sync::atomic::Ordering::Relaxed);
|
||||||
match cli.command {
|
match cli.command {
|
||||||
Command::Login { username } => cmd_login(username),
|
Command::Login { username, remember } => cmd_login(username, remember),
|
||||||
|
Command::Unlock { remember } => cmd_unlock(remember),
|
||||||
|
Command::Lock { forget } => cmd_lock(forget),
|
||||||
Command::Logout => cmd_logout(),
|
Command::Logout => cmd_logout(),
|
||||||
Command::Status => cmd_status(),
|
Command::Status => cmd_status(),
|
||||||
Command::Locations => cmd_locations(),
|
Command::Locations => cmd_locations(),
|
||||||
@@ -1781,7 +1801,7 @@ fn prompt_line(label: &str) -> Result<String> {
|
|||||||
Ok(line.trim().to_owned())
|
Ok(line.trim().to_owned())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cmd_login(username: Option<String>) -> Result<()> {
|
fn cmd_login(username: Option<String>, remember: bool) -> Result<()> {
|
||||||
let username = match username {
|
let username = match username {
|
||||||
Some(u) => u,
|
Some(u) => u,
|
||||||
None => prompt_line("Proton email")?,
|
None => prompt_line("Proton email")?,
|
||||||
@@ -1793,11 +1813,14 @@ fn cmd_login(username: Option<String>) -> Result<()> {
|
|||||||
prompt_line("2FA code").map_err(|e| pdfs_core::Error::Other(format!("read 2FA code: {e}")))
|
prompt_line("2FA code").map_err(|e| pdfs_core::Error::Other(format!("read 2FA code: {e}")))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Only a two-password account is ever asked for this.
|
||||||
|
let get_mailbox = |attempt: u32| prompt_mailbox(attempt, remember);
|
||||||
|
|
||||||
let rt = tokio::runtime::Runtime::new()?;
|
let rt = tokio::runtime::Runtime::new()?;
|
||||||
// Solving a CAPTCHA needs a browser engine, which the CLI has no business
|
// Solving a CAPTCHA needs a browser engine, which the CLI has no business
|
||||||
// carrying. Point at the app that does rather than failing with the raw API
|
// carrying. Point at the app that does rather than failing with the raw API
|
||||||
// message, which reads as "your login is broken".
|
// message, which reads as "your login is broken".
|
||||||
rt.block_on(auth::login(&username, &password, get_totp))
|
rt.block_on(auth::login(&username, &password, get_totp, get_mailbox))
|
||||||
.map_err(|e| match e {
|
.map_err(|e| match e {
|
||||||
pdfs_core::Error::HumanVerificationRequired(_) => anyhow::anyhow!(
|
pdfs_core::Error::HumanVerificationRequired(_) => anyhow::anyhow!(
|
||||||
"Proton is asking for a CAPTCHA before it will accept this sign-in.\n\
|
"Proton is asking for a CAPTCHA before it will accept this sign-in.\n\
|
||||||
@@ -1818,9 +1841,88 @@ fn cmd_login(username: Option<String>) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
println!("Logged in as {username}. Session stored in the system keyring.");
|
println!("Logged in as {username}. Session stored in the system keyring.");
|
||||||
|
report_key_state();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Ask for the mailbox password of a two-password account, without echo.
|
||||||
|
fn prompt_mailbox(attempt: u32, remember: bool) -> pdfs_core::Result<auth::Mailbox> {
|
||||||
|
if attempt == 0 {
|
||||||
|
eprintln!("This account has a separate mailbox password.");
|
||||||
|
} else {
|
||||||
|
eprintln!("That mailbox password did not unlock the account. Try again.");
|
||||||
|
}
|
||||||
|
let password = rpassword::prompt_password("Mailbox password: ")
|
||||||
|
.map_err(|e| pdfs_core::Error::Other(format!("read mailbox password: {e}")))?;
|
||||||
|
Ok(auth::Mailbox {
|
||||||
|
password: zeroize::Zeroizing::new(password),
|
||||||
|
remember,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Say where the account's keys are held, and what that means for the next login.
|
||||||
|
fn report_key_state() {
|
||||||
|
match auth::key_state() {
|
||||||
|
Ok(auth::KeyState::Session) => println!(
|
||||||
|
"Unlocked for this login session only. After you log out or reboot, run `pdfs unlock`."
|
||||||
|
),
|
||||||
|
Ok(auth::KeyState::Locked) => println!("The account is locked. Run `pdfs unlock`."),
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cmd_unlock(remember: bool) -> Result<()> {
|
||||||
|
auth::load().context("not logged in (run `pdfs login` first)")?;
|
||||||
|
let rt = tokio::runtime::Runtime::new()?;
|
||||||
|
// Bounded like the login prompt: three wrong answers end the command.
|
||||||
|
let mut attempt = 0;
|
||||||
|
loop {
|
||||||
|
let mailbox = prompt_mailbox(attempt, remember)?;
|
||||||
|
match rt.block_on(auth::unlock(&mailbox.password, remember)) {
|
||||||
|
Ok(()) => break,
|
||||||
|
Err(pdfs_core::Error::WrongMailboxPassword) if attempt < 2 => attempt += 1,
|
||||||
|
Err(e) => return Err(anyhow::Error::new(e).context("unlock failed")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// A daemon parked on the locked account would otherwise notice on its next
|
||||||
|
// poll; restarting it makes the mount appear now, as after `pdfs login`.
|
||||||
|
if service::is_active() {
|
||||||
|
service::restart();
|
||||||
|
}
|
||||||
|
println!("Unlocked.");
|
||||||
|
report_key_state();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cmd_lock(forget: bool) -> Result<()> {
|
||||||
|
auth::lock(forget)?;
|
||||||
|
println!(
|
||||||
|
"Locked. {}",
|
||||||
|
if forget {
|
||||||
|
"Unlock removed from memory and keyring."
|
||||||
|
} else {
|
||||||
|
"Run `pdfs unlock` to unlock again."
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// The running daemon keeps its keys until it restarts; say so, since
|
||||||
|
// "locked" would otherwise suggest the mount stopped.
|
||||||
|
if service::is_active() {
|
||||||
|
println!(
|
||||||
|
"The running daemon keeps its keys until it restarts: `systemctl --user restart proton-drive`."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `stored`, `session` or `locked`: where the account's keys are held.
|
||||||
|
fn key_state_name() -> &'static str {
|
||||||
|
match auth::key_state() {
|
||||||
|
Ok(auth::KeyState::Stored) => "stored",
|
||||||
|
Ok(auth::KeyState::Session) => "session",
|
||||||
|
_ => "locked",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn cmd_logout() -> Result<()> {
|
fn cmd_logout() -> Result<()> {
|
||||||
auth::logout()?;
|
auth::logout()?;
|
||||||
println!("Stored session cleared.");
|
println!("Stored session cleared.");
|
||||||
@@ -1848,6 +1950,7 @@ fn cmd_status() -> Result<()> {
|
|||||||
"username": session.as_ref().map(|s| s.username.clone()),
|
"username": session.as_ref().map(|s| s.username.clone()),
|
||||||
"user_id": session.as_ref().map(|s| s.user_id.clone()),
|
"user_id": session.as_ref().map(|s| s.user_id.clone()),
|
||||||
"scopes": session.as_ref().map(|s| s.scopes.clone()),
|
"scopes": session.as_ref().map(|s| s.scopes.clone()),
|
||||||
|
"keys": session.as_ref().map(|_| key_state_name()),
|
||||||
"mount": mount,
|
"mount": mount,
|
||||||
});
|
});
|
||||||
println!("{}", serde_json::to_string_pretty(&out)?);
|
println!("{}", serde_json::to_string_pretty(&out)?);
|
||||||
@@ -1858,6 +1961,11 @@ fn cmd_status() -> Result<()> {
|
|||||||
Ok(s) => {
|
Ok(s) => {
|
||||||
println!("Logged in as {} (user {})", s.username, s.user_id);
|
println!("Logged in as {} (user {})", s.username, s.user_id);
|
||||||
println!("Scopes: {}", s.scopes.join(", "));
|
println!("Scopes: {}", s.scopes.join(", "));
|
||||||
|
match key_state_name() {
|
||||||
|
"locked" => println!("Keys: locked — run `pdfs unlock`"),
|
||||||
|
"session" => println!("Keys: unlocked for this login session"),
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Err(pdfs_core::Error::NotLoggedIn) => {
|
Err(pdfs_core::Error::NotLoggedIn) => {
|
||||||
println!("Not logged in. Run `pdfs login`.");
|
println!("Not logged in. Run `pdfs login`.");
|
||||||
@@ -1989,7 +2097,7 @@ fn login_poll_delay(attempts: u32) -> std::time::Duration {
|
|||||||
std::time::Duration::from_secs(BASE_SECS.saturating_mul(factor).min(MAX_SECS))
|
std::time::Duration::from_secs(BASE_SECS.saturating_mul(factor).min(MAX_SECS))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Block until a session is stored, backing off between checks.
|
/// Block until a session is stored and unlocked, backing off between checks.
|
||||||
///
|
///
|
||||||
/// `load` and `sleep` are parameters rather than direct calls so the backoff
|
/// `load` and `sleep` are parameters rather than direct calls so the backoff
|
||||||
/// schedule can be tested without a keyring and without real time passing.
|
/// schedule can be tested without a keyring and without real time passing.
|
||||||
@@ -2014,6 +2122,16 @@ where
|
|||||||
sleep(delay);
|
sleep(delay);
|
||||||
attempts = attempts.saturating_add(1);
|
attempts = attempts.saturating_add(1);
|
||||||
}
|
}
|
||||||
|
Err(pdfs_core::Error::Locked) => {
|
||||||
|
let delay = login_poll_delay(attempts);
|
||||||
|
if attempts == 0 {
|
||||||
|
tracing::info!("account is locked; waiting for `pdfs unlock`…");
|
||||||
|
} else {
|
||||||
|
tracing::debug!(delay_secs = delay.as_secs(), "account still locked");
|
||||||
|
}
|
||||||
|
sleep(delay);
|
||||||
|
attempts = attempts.saturating_add(1);
|
||||||
|
}
|
||||||
Err(e) => return Err(e.into()),
|
Err(e) => return Err(e.into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2024,10 +2142,13 @@ where
|
|||||||
/// an external unmount triggers a remount; errors back off and retry. This is
|
/// an external unmount triggers a remount; errors back off and retry. This is
|
||||||
/// the entry point for the systemd user service.
|
/// the entry point for the systemd user service.
|
||||||
fn cmd_daemon(mountpoint: Option<PathBuf>) -> Result<()> {
|
fn cmd_daemon(mountpoint: Option<PathBuf>) -> Result<()> {
|
||||||
|
// The daemon holds the account's key passphrases in memory; keep them out
|
||||||
|
// of core dumps and away from same-user ptrace.
|
||||||
|
pdfs_core::kernelkey::forbid_dumps();
|
||||||
loop {
|
loop {
|
||||||
// Wait until a session is stored. The GUI enables this service on login,
|
// Wait until a session is stored. The GUI enables this service on login,
|
||||||
// but the service may also start at boot before the user has logged in.
|
// but the service may also start at boot before the user has logged in.
|
||||||
wait_for_session(|| auth::load().map(|_| ()), std::thread::sleep)?;
|
wait_for_session(auth::ready, pdfs_fuse::idle_sleep)?;
|
||||||
|
|
||||||
match mount_once(mountpoint.clone()) {
|
match mount_once(mountpoint.clone()) {
|
||||||
Ok(pdfs_fuse::MountOutcome::Shutdown) => {
|
Ok(pdfs_fuse::MountOutcome::Shutdown) => {
|
||||||
@@ -2036,13 +2157,13 @@ fn cmd_daemon(mountpoint: Option<PathBuf>) -> Result<()> {
|
|||||||
}
|
}
|
||||||
Ok(pdfs_fuse::MountOutcome::Unmounted) => {
|
Ok(pdfs_fuse::MountOutcome::Unmounted) => {
|
||||||
tracing::warn!("mount ended externally; remounting in 2s");
|
tracing::warn!("mount ended externally; remounting in 2s");
|
||||||
std::thread::sleep(std::time::Duration::from_secs(2));
|
pdfs_fuse::idle_sleep(std::time::Duration::from_secs(2));
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// `{:#}` so the whole anyhow chain lands in the log — the top
|
// `{:#}` so the whole anyhow chain lands in the log — the top
|
||||||
// context alone ("mount failed") never says *why*.
|
// context alone ("mount failed") never says *why*.
|
||||||
tracing::error!(error = format!("{e:#}"), "mount failed; retrying in 5s");
|
tracing::error!(error = format!("{e:#}"), "mount failed; retrying in 5s");
|
||||||
std::thread::sleep(std::time::Duration::from_secs(5));
|
pdfs_fuse::idle_sleep(std::time::Duration::from_secs(5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3224,6 +3345,19 @@ fn cmd_diagnose() -> Result<()> {
|
|||||||
match pdfs_core::auth::load() {
|
match pdfs_core::auth::load() {
|
||||||
Ok(session) => {
|
Ok(session) => {
|
||||||
report.finding(DiagnoseLevel::Ok, " keyring session", session.username);
|
report.finding(DiagnoseLevel::Ok, " keyring session", session.username);
|
||||||
|
match key_state_name() {
|
||||||
|
"locked" => report.finding(
|
||||||
|
DiagnoseLevel::Fail,
|
||||||
|
" account keys",
|
||||||
|
"locked — run `pdfs unlock` (the daemon waits for it)",
|
||||||
|
),
|
||||||
|
"session" => report.finding(
|
||||||
|
DiagnoseLevel::Ok,
|
||||||
|
" account keys",
|
||||||
|
"unlocked for this login session",
|
||||||
|
),
|
||||||
|
_ => report.finding(DiagnoseLevel::Ok, " account keys", "stored in the keyring"),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// A locked keyring and an absent login look the same from here, so
|
// A locked keyring and an absent login look the same from here, so
|
||||||
@@ -3522,6 +3656,21 @@ mod login_wait_tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_locked_account_is_waited_on_until_it_is_unlocked() {
|
||||||
|
let mut checks = vec![
|
||||||
|
Ok(()),
|
||||||
|
Err(pdfs_core::Error::Locked),
|
||||||
|
Err(pdfs_core::Error::NotLoggedIn),
|
||||||
|
Err(pdfs_core::Error::Locked),
|
||||||
|
];
|
||||||
|
let mut slept = 0;
|
||||||
|
|
||||||
|
wait_for_session(|| checks.pop().unwrap(), |_| slept += 1).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(slept, 3, "locked and signed-out are both waited out");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn a_stored_session_is_not_waited_for_at_all() {
|
fn a_stored_session_is_not_waited_for_at_all() {
|
||||||
let mut slept = 0;
|
let mut slept = 0;
|
||||||
|
|||||||
@@ -28,3 +28,5 @@ dbus-secret-service-keyring-store.workspace = true
|
|||||||
parking_lot.workspace = true
|
parking_lot.workspace = true
|
||||||
async-trait.workspace = true
|
async-trait.workspace = true
|
||||||
libc.workspace = true
|
libc.workspace = true
|
||||||
|
zeroize.workspace = true
|
||||||
|
base64.workspace = true
|
||||||
+467
-118
@@ -1,22 +1,50 @@
|
|||||||
//! Login, session persistence, and Drive-client construction.
|
//! Login, session persistence, and Drive-client construction.
|
||||||
//!
|
//!
|
||||||
//! A successful login is persisted to the OS keyring as a single JSON blob
|
//! A successful login is persisted to the OS keyring as a single JSON blob
|
||||||
//! holding the resumable session tokens plus the mailbox password (needed to
|
//! holding the resumable session tokens, the account's key salts and — unless
|
||||||
//! rebuild the key chain on resume). The daemon resumes from this blob with no
|
//! the user chose otherwise — the per-key *passphrases* derived from the
|
||||||
//! interactive step; the refresh token auto-renews via the HTTP client's 401
|
//! mailbox password. The password itself is never stored: the passphrases are
|
||||||
//! path, so no fresh 2FA is required until the refresh token itself expires.
|
//! what it exists to produce, and they are enough to rebuild the key chain on
|
||||||
|
//! resume. The daemon resumes from this blob with no interactive step; the
|
||||||
|
//! refresh token auto-renews via the HTTP client's 401 path, so no fresh 2FA is
|
||||||
|
//! required until the refresh token itself expires.
|
||||||
|
//!
|
||||||
|
//! # Two-password accounts
|
||||||
|
//!
|
||||||
|
//! An account with a separate mailbox password exists precisely so that no one
|
||||||
|
//! login holds the means to read the data. Storing that password in the keyring
|
||||||
|
//! would defeat it, so such an account is **locked by default**: its
|
||||||
|
//! passphrases are kept only in the kernel keyring ([`crate::kernelkey`]), for
|
||||||
|
//! the length of the user's session, and `pdfs unlock` (or the app) supplies
|
||||||
|
//! them again after each login. Storing them in the Secret Service as well is
|
||||||
|
//! an explicit opt-in ([`Mailbox::remember`]). Single-password accounts have no
|
||||||
|
//! such separation to protect and are stored, as they always were.
|
||||||
|
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
use base64::Engine as _;
|
||||||
|
use base64::engine::general_purpose::STANDARD as BASE64;
|
||||||
use keyring_core::Entry;
|
use keyring_core::Entry;
|
||||||
use proton_drive_rs::{KeySalt, ProtonDriveClient};
|
use proton_drive_rs::{KeySalt, ProtonDriveClient};
|
||||||
|
use proton_sdk::account::KeyPassphrases;
|
||||||
use proton_sdk::api::{HumanVerification, HumanVerificationCredential};
|
use proton_sdk::api::{HumanVerification, HumanVerificationCredential};
|
||||||
use proton_sdk::cache::EncryptedCacheRepository;
|
use proton_sdk::cache::EncryptedCacheRepository;
|
||||||
use proton_sdk::config::ProtonClientConfiguration;
|
use proton_sdk::config::ProtonClientConfiguration;
|
||||||
|
use proton_sdk::error::ProtonError;
|
||||||
use proton_sdk::session::{PasswordMode, ProtonApiSession, ResumeParameters};
|
use proton_sdk::session::{PasswordMode, ProtonApiSession, ResumeParameters};
|
||||||
use proton_sdk::telemetry::TracingTelemetry;
|
use proton_sdk::telemetry::TracingTelemetry;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use zeroize::Zeroizing;
|
||||||
|
|
||||||
use crate::config::{APP_VERSION, AppDirs, KEYRING_SERVICE, USER_AGENT};
|
use crate::config::{APP_VERSION, AppDirs, KEYRING_SERVICE, USER_AGENT};
|
||||||
use crate::error::{Error, Result};
|
use crate::error::{Error, Result};
|
||||||
|
use crate::kernelkey;
|
||||||
|
|
||||||
|
/// How often a wrong mailbox password is asked for again before the login gives up.
|
||||||
|
const MAILBOX_ATTEMPTS: u32 = 3;
|
||||||
|
|
||||||
|
/// Domain-separation label for the key that encrypts the persistent entity cache.
|
||||||
|
const ENTITY_CACHE_PURPOSE: &[u8] = b"pdfs entity cache v1";
|
||||||
|
|
||||||
/// Fixed keyring account name for the single stored session blob.
|
/// Fixed keyring account name for the single stored session blob.
|
||||||
const KEYRING_USER: &str = "session";
|
const KEYRING_USER: &str = "session";
|
||||||
@@ -32,8 +60,11 @@ pub struct StoredSession {
|
|||||||
pub scopes: Vec<String>,
|
pub scopes: Vec<String>,
|
||||||
/// `1` = single password, `2` = dual (Proton wire value).
|
/// `1` = single password, `2` = dual (Proton wire value).
|
||||||
pub password_mode: u8,
|
pub password_mode: u8,
|
||||||
/// Mailbox (data) password — required by `ProtonDriveClient::new` to derive
|
/// The mailbox password of a blob written by 3.0.x and earlier.
|
||||||
/// the key chain. Lives only in the OS keyring, never on disk in cleartext.
|
///
|
||||||
|
/// Read only, to migrate: [`resume_client`] derives the passphrases from it
|
||||||
|
/// once and writes the blob back without it. Never serialized again.
|
||||||
|
#[serde(default, skip_serializing)]
|
||||||
pub mailbox_password: String,
|
pub mailbox_password: String,
|
||||||
/// The account's key salts, captured at login.
|
/// The account's key salts, captured at login.
|
||||||
///
|
///
|
||||||
@@ -49,6 +80,11 @@ pub struct StoredSession {
|
|||||||
/// backfilling) them.
|
/// backfilling) them.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub key_salts: Vec<KeySalt>,
|
pub key_salts: Vec<KeySalt>,
|
||||||
|
/// Per-key passphrases (key id → base64), when the user keeps them in the
|
||||||
|
/// keyring: always for a single-password account, by opt-in for a
|
||||||
|
/// two-password one. `None` means they are not stored here.
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
|
pub key_passphrases: Option<BTreeMap<String, String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StoredSession {
|
impl StoredSession {
|
||||||
@@ -89,6 +125,26 @@ fn keyring_entry() -> Result<Entry> {
|
|||||||
Ok(Entry::new(KEYRING_SERVICE, KEYRING_USER)?)
|
Ok(Entry::new(KEYRING_SERVICE, KEYRING_USER)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// What the user answered when asked for the mailbox password.
|
||||||
|
pub struct Mailbox {
|
||||||
|
pub password: Zeroizing<String>,
|
||||||
|
/// Keep the derived passphrases in the keyring, so the daemon unlocks by
|
||||||
|
/// itself after every login. Off by default: it trades the protection a
|
||||||
|
/// separate mailbox password gives for convenience.
|
||||||
|
pub remember: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Where the passphrases that unlock this account's keys currently live.
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
pub enum KeyState {
|
||||||
|
/// In the keyring, available after every login.
|
||||||
|
Stored,
|
||||||
|
/// In kernel memory for this login session only.
|
||||||
|
Session,
|
||||||
|
/// Nowhere: the mailbox password has to be entered (`pdfs unlock`).
|
||||||
|
Locked,
|
||||||
|
}
|
||||||
|
|
||||||
/// Run an interactive SRP + (optional) 2FA login and persist the session.
|
/// Run an interactive SRP + (optional) 2FA login and persist the session.
|
||||||
///
|
///
|
||||||
/// `get_totp` is only invoked when the account requires a second factor, so
|
/// `get_totp` is only invoked when the account requires a second factor, so
|
||||||
@@ -96,14 +152,19 @@ fn keyring_entry() -> Result<Entry> {
|
|||||||
/// more than once — [`login_interactive`] re-runs the whole login after human
|
/// more than once — [`login_interactive`] re-runs the whole login after human
|
||||||
/// verification, and a 2FA account needs a fresh code on that second attempt.
|
/// verification, and a 2FA account needs a fresh code on that second attempt.
|
||||||
///
|
///
|
||||||
|
/// `get_mailbox` is only invoked for a two-password account. It receives the
|
||||||
|
/// number of earlier wrong answers (so a prompt can say "try again") and is
|
||||||
|
/// asked at most [`MAILBOX_ATTEMPTS`] times; an `Err` from it aborts the login.
|
||||||
|
///
|
||||||
/// A gated login fails with [`Error::HumanVerificationRequired`]; a front-end
|
/// A gated login fails with [`Error::HumanVerificationRequired`]; a front-end
|
||||||
/// that can present the challenge should use [`login_interactive`] instead.
|
/// that can present the challenge should use [`login_interactive`] instead.
|
||||||
pub async fn login(
|
pub async fn login(
|
||||||
username: &str,
|
username: &str,
|
||||||
password: &str,
|
password: &str,
|
||||||
get_totp: impl Fn() -> Result<String>,
|
get_totp: impl Fn() -> Result<String>,
|
||||||
|
get_mailbox: impl Fn(u32) -> Result<Mailbox>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
login_verified(username, password, None, get_totp).await
|
login_verified(username, password, None, get_totp, get_mailbox).await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// [`login`], able to answer a human-verification gate rather than fail on it.
|
/// [`login`], able to answer a human-verification gate rather than fail on it.
|
||||||
@@ -123,12 +184,20 @@ pub async fn login_interactive(
|
|||||||
username: &str,
|
username: &str,
|
||||||
password: &str,
|
password: &str,
|
||||||
get_totp: impl Fn() -> Result<String>,
|
get_totp: impl Fn() -> Result<String>,
|
||||||
|
get_mailbox: impl Fn(u32) -> Result<Mailbox>,
|
||||||
get_hv: impl FnOnce(HumanVerification) -> Result<HumanVerificationCredential>,
|
get_hv: impl FnOnce(HumanVerification) -> Result<HumanVerificationCredential>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
match login_verified(username, password, None, &get_totp).await {
|
match login_verified(username, password, None, &get_totp, &get_mailbox).await {
|
||||||
Err(Error::HumanVerificationRequired(hv)) => {
|
Err(Error::HumanVerificationRequired(hv)) => {
|
||||||
let credential = get_hv(*hv)?;
|
let credential = get_hv(*hv)?;
|
||||||
login_verified(username, password, Some(&credential), &get_totp).await
|
login_verified(
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
Some(&credential),
|
||||||
|
&get_totp,
|
||||||
|
&get_mailbox,
|
||||||
|
)
|
||||||
|
.await
|
||||||
}
|
}
|
||||||
other => other,
|
other => other,
|
||||||
}
|
}
|
||||||
@@ -145,15 +214,18 @@ pub async fn login_verified(
|
|||||||
password: &str,
|
password: &str,
|
||||||
verification: Option<&HumanVerificationCredential>,
|
verification: Option<&HumanVerificationCredential>,
|
||||||
get_totp: impl Fn() -> Result<String>,
|
get_totp: impl Fn() -> Result<String>,
|
||||||
|
get_mailbox: impl Fn(u32) -> Result<Mailbox>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut session = ProtonApiSession::begin_verified(
|
let password = Zeroizing::new(password.to_owned());
|
||||||
|
let session = ProtonApiSession::begin_verified(
|
||||||
client_config(),
|
client_config(),
|
||||||
username,
|
username,
|
||||||
password.as_bytes(),
|
password.as_bytes(),
|
||||||
verification,
|
verification,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.map_err(classify_verification_gate)?;
|
.map_err(classify_verification_gate);
|
||||||
|
let mut session = session?;
|
||||||
|
|
||||||
if session.is_waiting_for_second_factor() {
|
if session.is_waiting_for_second_factor() {
|
||||||
let code = get_totp()?;
|
let code = get_totp()?;
|
||||||
@@ -163,38 +235,38 @@ pub async fn login_verified(
|
|||||||
// Grab the key salts while this access token still has the `locked` scope:
|
// Grab the key salts while this access token still has the `locked` scope:
|
||||||
// after its first refresh it never will again, and without them no later
|
// after its first refresh it never will again, and without them no later
|
||||||
// resume can unlock the key chain. See `StoredSession::key_salts`.
|
// resume can unlock the key chain. See `StoredSession::key_salts`.
|
||||||
let client = ProtonDriveClient::new(&session, password.as_bytes().to_vec());
|
let key_salts = ProtonDriveClient::new(&session, Vec::new())
|
||||||
let key_salts = client.account().key_salts().await?;
|
.account()
|
||||||
|
.key_salts()
|
||||||
|
.await?;
|
||||||
|
|
||||||
register_refresh_handler(&session, password.to_owned(), key_salts.clone());
|
// A single-password account's mailbox password is the login password. A
|
||||||
|
// two-password one has a second secret the user must type, and it is checked
|
||||||
save(&session, password, key_salts).await?;
|
// against the account now — a typo found at login is a retry, found later it
|
||||||
Ok(())
|
// is a daemon that never mounts.
|
||||||
}
|
let (passphrases, remember) = match session.password_mode() {
|
||||||
|
PasswordMode::Single => (
|
||||||
/// Lift a human-verification gate out of the generic API error into the typed
|
derive_verified(&session, password.as_bytes(), key_salts.clone()).await?,
|
||||||
/// variant a front-end can act on.
|
true,
|
||||||
///
|
),
|
||||||
/// Only a gate that names a solvable method is converted. A `9001` with no
|
PasswordMode::Dual => {
|
||||||
/// `Details`, or one offering only `email`/`sms`, stays a plain API error:
|
let mut attempt = 0;
|
||||||
/// promoting it would send the UI to open a verification page it cannot
|
loop {
|
||||||
/// complete, which reads to the user as a hang rather than a refusal.
|
let mailbox = get_mailbox(attempt)?;
|
||||||
fn classify_verification_gate(e: proton_sdk::error::ProtonError) -> Error {
|
match derive_verified(&session, mailbox.password.as_bytes(), key_salts.clone())
|
||||||
let proton_sdk::error::ProtonError::Api(api) = &e else {
|
.await
|
||||||
return e.into();
|
{
|
||||||
};
|
Ok(passphrases) => break (passphrases, mailbox.remember),
|
||||||
match api.human_verification() {
|
Err(Error::WrongMailboxPassword) if attempt + 1 < MAILBOX_ATTEMPTS => {
|
||||||
Some(hv) if hv.supports_captcha() => Error::HumanVerificationRequired(Box::new(hv)),
|
attempt += 1;
|
||||||
_ => e.into(),
|
|
||||||
}
|
}
|
||||||
}
|
Err(e) => return Err(e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/// Persist the session's current tokens, mailbox password and key salts.
|
register_refresh_handler(&session);
|
||||||
pub async fn save(
|
|
||||||
session: &ProtonApiSession,
|
|
||||||
mailbox_password: &str,
|
|
||||||
key_salts: Vec<KeySalt>,
|
|
||||||
) -> Result<()> {
|
|
||||||
let tokens = session.current_tokens().await;
|
let tokens = session.current_tokens().await;
|
||||||
let stored = StoredSession {
|
let stored = StoredSession {
|
||||||
session_id: session.session_id().as_str().to_owned(),
|
session_id: session.session_id().as_str().to_owned(),
|
||||||
@@ -207,10 +279,103 @@ pub async fn save(
|
|||||||
PasswordMode::Single => 1,
|
PasswordMode::Single => 1,
|
||||||
PasswordMode::Dual => 2,
|
PasswordMode::Dual => 2,
|
||||||
},
|
},
|
||||||
mailbox_password: mailbox_password.to_owned(),
|
mailbox_password: String::new(),
|
||||||
key_salts,
|
key_salts,
|
||||||
|
key_passphrases: None,
|
||||||
};
|
};
|
||||||
let json = serde_json::to_string(&stored)?;
|
keep_passphrases(stored, &passphrases, remember)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Derive the key passphrases from `mailbox` and prove they unlock the account.
|
||||||
|
///
|
||||||
|
/// [`Error::WrongMailboxPassword`] means the account answered and the password
|
||||||
|
/// is wrong; any other error says nothing about the password (no network, an
|
||||||
|
/// API fault) and must not be reported as a typo.
|
||||||
|
async fn derive_verified(
|
||||||
|
session: &ProtonApiSession,
|
||||||
|
mailbox: &[u8],
|
||||||
|
key_salts: Vec<KeySalt>,
|
||||||
|
) -> Result<KeyPassphrases> {
|
||||||
|
let client = ProtonDriveClient::with_key_salts(session, mailbox.to_vec(), key_salts);
|
||||||
|
client.account().unlock().await.map_err(|e| match e {
|
||||||
|
ProtonError::KeysLocked => Error::WrongMailboxPassword,
|
||||||
|
other => other.into(),
|
||||||
|
})?;
|
||||||
|
Ok(client.account().key_passphrases().await?)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Write `stored` with the passphrases in the place the user chose: the
|
||||||
|
/// keyring (`remember`) or kernel memory only. Whichever is not chosen is
|
||||||
|
/// cleared, so a revoked choice never leaves a copy behind.
|
||||||
|
///
|
||||||
|
/// The kernel entry is written first. If it cannot be (no keyring support), the
|
||||||
|
/// secret is *not* quietly stored somewhere weaker: the blob is written locked
|
||||||
|
/// and the error says so.
|
||||||
|
fn keep_passphrases(
|
||||||
|
mut stored: StoredSession,
|
||||||
|
passphrases: &KeyPassphrases,
|
||||||
|
remember: bool,
|
||||||
|
) -> Result<()> {
|
||||||
|
let outcome = if remember {
|
||||||
|
stored.key_passphrases = Some(encode(passphrases));
|
||||||
|
// Best-effort: a system without a kernel keyring has nothing to clear.
|
||||||
|
let _ = kernelkey::clear();
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
stored.key_passphrases = None;
|
||||||
|
kernelkey::store(&encode_secret(passphrases)).map_err(|e| {
|
||||||
|
Error::Other(format!(
|
||||||
|
"the kernel keyring is unavailable, so the unlock cannot be kept for this session: {e}"
|
||||||
|
))
|
||||||
|
})
|
||||||
|
};
|
||||||
|
write_stored(&stored)?;
|
||||||
|
outcome
|
||||||
|
}
|
||||||
|
|
||||||
|
fn encode(passphrases: &KeyPassphrases) -> BTreeMap<String, String> {
|
||||||
|
passphrases
|
||||||
|
.iter()
|
||||||
|
.map(|(id, secret)| (id.to_owned(), BASE64.encode(secret)))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn decode(encoded: &BTreeMap<String, String>) -> Option<KeyPassphrases> {
|
||||||
|
let mut passphrases = KeyPassphrases::new();
|
||||||
|
for (id, secret) in encoded {
|
||||||
|
passphrases.insert(id.clone(), BASE64.decode(secret).ok()?);
|
||||||
|
}
|
||||||
|
(!passphrases.is_empty()).then_some(passphrases)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The kernel-keyring payload: the same map as the blob's, as JSON.
|
||||||
|
fn encode_secret(passphrases: &KeyPassphrases) -> Zeroizing<Vec<u8>> {
|
||||||
|
Zeroizing::new(serde_json::to_vec(&encode(passphrases)).unwrap_or_default())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn decode_secret(secret: &[u8]) -> Option<KeyPassphrases> {
|
||||||
|
decode(&serde_json::from_slice(secret).ok()?)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Lift a human-verification gate out of the generic API error into the typed
|
||||||
|
/// variant a front-end can act on.
|
||||||
|
///
|
||||||
|
/// Only a gate that names a solvable method is converted. A `9001` with no
|
||||||
|
/// `Details`, or one offering only `email`/`sms`, stays a plain API error:
|
||||||
|
/// promoting it would send the UI to open a verification page it cannot
|
||||||
|
/// complete, which reads to the user as a hang rather than a refusal.
|
||||||
|
fn classify_verification_gate(e: ProtonError) -> Error {
|
||||||
|
let ProtonError::Api(api) = &e else {
|
||||||
|
return e.into();
|
||||||
|
};
|
||||||
|
match api.human_verification() {
|
||||||
|
Some(hv) if hv.supports_captcha() => Error::HumanVerificationRequired(Box::new(hv)),
|
||||||
|
_ => e.into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_stored(stored: &StoredSession) -> Result<()> {
|
||||||
|
let json = Zeroizing::new(serde_json::to_string(stored)?);
|
||||||
keyring_entry()?.set_password(&json)?;
|
keyring_entry()?.set_password(&json)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -225,12 +390,93 @@ pub fn load() -> Result<StoredSession> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Where the passphrases for the stored session live right now.
|
||||||
|
///
|
||||||
|
/// Reads the kernel keyring and the stored blob only; never the network.
|
||||||
|
pub fn key_state() -> Result<KeyState> {
|
||||||
|
Ok(key_state_of(&load()?))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn key_state_of(stored: &StoredSession) -> KeyState {
|
||||||
|
match find_passphrases(stored) {
|
||||||
|
Ok(Some((_, origin))) => origin,
|
||||||
|
// A 3.0.x blob still holds its password; `resume_client` migrates it.
|
||||||
|
_ if !stored.mailbox_password.is_empty() => KeyState::Stored,
|
||||||
|
_ => KeyState::Locked,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Whether the stored session can be resumed without asking the user:
|
||||||
|
/// `Ok` when it can, [`Error::NotLoggedIn`] or [`Error::Locked`] when not.
|
||||||
|
/// What the daemon waits on before it mounts.
|
||||||
|
pub fn ready() -> Result<()> {
|
||||||
|
match key_state_of(&load()?) {
|
||||||
|
KeyState::Locked => Err(Error::Locked),
|
||||||
|
_ => Ok(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The passphrases the stored session can use without being asked, and which
|
||||||
|
/// of the two places they came from. Prefers the keyring blob: it is what the
|
||||||
|
/// user opted into. A corrupt entry is treated as absent, so it reads as
|
||||||
|
/// locked instead of wedging the daemon.
|
||||||
|
fn find_passphrases(stored: &StoredSession) -> Result<Option<(KeyPassphrases, KeyState)>> {
|
||||||
|
if let Some(found) = stored.key_passphrases.as_ref().and_then(decode) {
|
||||||
|
return Ok(Some((found, KeyState::Stored)));
|
||||||
|
}
|
||||||
|
match kernelkey::load() {
|
||||||
|
Ok(Some(secret)) => Ok(decode_secret(&secret).map(|p| (p, KeyState::Session))),
|
||||||
|
Ok(None) => Ok(None),
|
||||||
|
// No keyring on this system: nothing was ever kept there.
|
||||||
|
Err(e) => {
|
||||||
|
tracing::debug!(error = %e, "kernel keyring not readable; treating the account as locked");
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Supply the mailbox password of a locked account.
|
||||||
|
///
|
||||||
|
/// Verifies it against the account, then keeps the derived passphrases in
|
||||||
|
/// kernel memory for this login session — or, with `remember`, in the keyring.
|
||||||
|
/// A daemon waiting on [`Error::Locked`] picks them up on its next attempt.
|
||||||
|
///
|
||||||
|
/// Fails with [`Error::WrongMailboxPassword`] for a wrong password, which
|
||||||
|
/// changes nothing, and [`Error::ReloginRequired`] for a session that predates
|
||||||
|
/// stored key salts.
|
||||||
|
pub async fn unlock(mailbox: &str, remember: bool) -> Result<()> {
|
||||||
|
let stored = load()?;
|
||||||
|
if stored.key_salts.is_empty() {
|
||||||
|
return Err(Error::ReloginRequired);
|
||||||
|
}
|
||||||
|
let mailbox = Zeroizing::new(mailbox.to_owned());
|
||||||
|
let session = ProtonApiSession::resume(client_config(), stored.to_params())?;
|
||||||
|
register_refresh_handler(&session);
|
||||||
|
let passphrases =
|
||||||
|
derive_verified(&session, mailbox.as_bytes(), stored.key_salts.clone()).await?;
|
||||||
|
keep_passphrases(stored, &passphrases, remember)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Drop the passphrases held in kernel memory, so the account is locked again
|
||||||
|
/// until [`unlock`]. With `forget`, also those in the keyring blob.
|
||||||
|
pub fn lock(forget: bool) -> Result<()> {
|
||||||
|
kernelkey::clear()?;
|
||||||
|
if forget {
|
||||||
|
let mut stored = load()?;
|
||||||
|
if stored.key_passphrases.take().is_some() {
|
||||||
|
write_stored(&stored)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Forget the persisted session (best-effort; absent entry is not an error).
|
/// Forget the persisted session (best-effort; absent entry is not an error).
|
||||||
pub fn logout() -> Result<()> {
|
pub fn logout() -> Result<()> {
|
||||||
// The persisted entity cache describes the account being logged out of. It
|
// The persisted entity cache describes the account being logged out of. It
|
||||||
// is encrypted under that account's mailbox password, but leaving it behind
|
// is encrypted under a key derived from that account's passphrases, but
|
||||||
// would also mean the next account inherits a store it can only ever read as
|
// leaving it behind would also mean the next account inherits a store it can
|
||||||
// misses. Best-effort: failing to remove a cache must not block the logout.
|
// only ever read as misses. Best-effort: failing to remove a cache must not
|
||||||
|
// block the logout.
|
||||||
if let Ok(dirs) = AppDirs::new() {
|
if let Ok(dirs) = AppDirs::new() {
|
||||||
let path = dirs.state_dir().join("sdk_cache.db");
|
let path = dirs.state_dir().join("sdk_cache.db");
|
||||||
if let Some(cache) = crate::sdkcache::SdkCache::opened()
|
if let Some(cache) = crate::sdkcache::SdkCache::opened()
|
||||||
@@ -242,6 +488,9 @@ pub fn logout() -> Result<()> {
|
|||||||
let _ = std::fs::remove_file(format!("{}{suffix}", path.display()));
|
let _ = std::fs::remove_file(format!("{}{suffix}", path.display()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if let Err(e) = kernelkey::clear() {
|
||||||
|
tracing::warn!(error = %e, "clearing the kernel-keyring unlock on logout failed");
|
||||||
|
}
|
||||||
match keyring_entry()?.delete_credential() {
|
match keyring_entry()?.delete_credential() {
|
||||||
Ok(()) | Err(keyring_core::Error::NoEntry) => Ok(()),
|
Ok(()) | Err(keyring_core::Error::NoEntry) => Ok(()),
|
||||||
Err(e) => Err(e.into()),
|
Err(e) => Err(e.into()),
|
||||||
@@ -250,44 +499,87 @@ pub fn logout() -> Result<()> {
|
|||||||
|
|
||||||
/// Resume a persisted session and build an authenticated Drive client.
|
/// Resume a persisted session and build an authenticated Drive client.
|
||||||
///
|
///
|
||||||
/// Returns `Error::NotLoggedIn` when no session has been saved. The caller is
|
/// Returns `Error::NotLoggedIn` when no session has been saved and
|
||||||
/// responsible for persisting rotated tokens over the session's lifetime via
|
/// [`Error::Locked`] when the account is waiting for its mailbox password. Tokens
|
||||||
/// [`persist`] — Proton refresh tokens are single-use, so a refresh that is not
|
/// the session rotates are written back to the keyring as they happen (see
|
||||||
/// written back leaves the keyring holding a stale (now-invalid) refresh token,
|
/// [`register_refresh_handler`]); Proton refresh tokens are single-use, so a
|
||||||
/// and the next resume fails with `InvalidRefreshToken`.
|
/// refresh that is not written back would leave the keyring holding a stale
|
||||||
|
/// refresh token, and the next resume would fail with `InvalidRefreshToken`.
|
||||||
|
///
|
||||||
|
/// Makes no network call for an account whose passphrases are already known, so
|
||||||
|
/// a daemon starting offline can still mount from its cache.
|
||||||
pub async fn resume_client() -> Result<(ProtonDriveClient, ProtonApiSession)> {
|
pub async fn resume_client() -> Result<(ProtonDriveClient, ProtonApiSession)> {
|
||||||
let stored = load()?;
|
let stored = load()?;
|
||||||
let session = ProtonApiSession::resume(client_config(), stored.to_params())?;
|
let session = ProtonApiSession::resume(client_config(), stored.to_params())?;
|
||||||
let password = stored.mailbox_password.clone();
|
register_refresh_handler(&session);
|
||||||
|
|
||||||
// Blobs written before key salts were persisted have none: fetch them once
|
let passphrases = match find_passphrases(&stored)? {
|
||||||
// more and write them back, which only works while the stored access token
|
Some((passphrases, _)) => passphrases,
|
||||||
// still carries the `locked` scope. If it doesn't, the account must be
|
None if !stored.mailbox_password.is_empty() => migrate_legacy(&session, &stored).await?,
|
||||||
// logged into again — no refresh can restore that scope.
|
None => return Err(Error::Locked),
|
||||||
let key_salts = if stored.key_salts.is_empty() {
|
|
||||||
register_refresh_handler(&session, password.clone(), Vec::new());
|
|
||||||
let probe = ProtonDriveClient::new(&session, password.clone().into_bytes());
|
|
||||||
let salts = probe.account().key_salts().await.map_err(|e| match &e {
|
|
||||||
proton_sdk::error::ProtonError::Api(api) if api.is_insufficient_scope() => {
|
|
||||||
Error::ReloginRequired
|
|
||||||
}
|
|
||||||
_ => e.into(),
|
|
||||||
})?;
|
|
||||||
save(&session, &password, salts.clone()).await?;
|
|
||||||
salts
|
|
||||||
} else {
|
|
||||||
stored.key_salts
|
|
||||||
};
|
};
|
||||||
|
|
||||||
register_refresh_handler(&session, password.clone(), key_salts.clone());
|
|
||||||
|
|
||||||
let client = tune(
|
let client = tune(
|
||||||
ProtonDriveClient::with_key_salts(&session, password.clone().into_bytes(), key_salts),
|
ProtonDriveClient::with_key_passphrases(&session, passphrases.clone()),
|
||||||
password.as_bytes(),
|
&passphrases,
|
||||||
);
|
);
|
||||||
Ok((client, session))
|
Ok((client, session))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Turn a blob written by 3.0.x — which holds the mailbox password — into one
|
||||||
|
/// that holds passphrases, so the password stops being stored.
|
||||||
|
///
|
||||||
|
/// The old login saved whatever was typed as the mailbox password, which for a
|
||||||
|
/// two-password account is the *login* password and unlocks nothing. That is
|
||||||
|
/// checked here: a password the account rejects leaves the account locked (and
|
||||||
|
/// the stored copy gone) rather than failing every start forever.
|
||||||
|
async fn migrate_legacy(
|
||||||
|
session: &ProtonApiSession,
|
||||||
|
stored: &StoredSession,
|
||||||
|
) -> Result<KeyPassphrases> {
|
||||||
|
let legacy = Zeroizing::new(stored.mailbox_password.clone());
|
||||||
|
|
||||||
|
// Blobs from before key salts were persisted have none: fetch them once
|
||||||
|
// more, which only works while the stored access token still carries the
|
||||||
|
// `locked` scope. If it doesn't, the account must be logged into again — no
|
||||||
|
// refresh can restore that scope.
|
||||||
|
let key_salts = if stored.key_salts.is_empty() {
|
||||||
|
ProtonDriveClient::new(session, Vec::new())
|
||||||
|
.account()
|
||||||
|
.key_salts()
|
||||||
|
.await
|
||||||
|
.map_err(|e| match &e {
|
||||||
|
ProtonError::Api(api) if api.is_insufficient_scope() => Error::ReloginRequired,
|
||||||
|
_ => e.into(),
|
||||||
|
})?
|
||||||
|
} else {
|
||||||
|
stored.key_salts.clone()
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut migrated = stored.clone();
|
||||||
|
migrated.mailbox_password = String::new();
|
||||||
|
migrated.key_salts = key_salts.clone();
|
||||||
|
|
||||||
|
match derive_verified(session, legacy.as_bytes(), key_salts).await {
|
||||||
|
Ok(passphrases) => {
|
||||||
|
migrated.key_passphrases = Some(encode(&passphrases));
|
||||||
|
write_stored(&migrated)?;
|
||||||
|
tracing::info!(
|
||||||
|
"migrated the stored session from a mailbox password to key passphrases"
|
||||||
|
);
|
||||||
|
Ok(passphrases)
|
||||||
|
}
|
||||||
|
Err(Error::WrongMailboxPassword) => {
|
||||||
|
write_stored(&migrated)?;
|
||||||
|
tracing::warn!(
|
||||||
|
"the stored password does not unlock the account's keys; unlock required"
|
||||||
|
);
|
||||||
|
Err(Error::Locked)
|
||||||
|
}
|
||||||
|
Err(e) => Err(e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The client settings every front-end wants, applied wherever a
|
/// The client settings every front-end wants, applied wherever a
|
||||||
/// [`ProtonDriveClient`] is built for real work.
|
/// [`ProtonDriveClient`] is built for real work.
|
||||||
///
|
///
|
||||||
@@ -301,23 +593,24 @@ pub async fn resume_client() -> Result<(ProtonDriveClient, ProtonApiSession)> {
|
|||||||
/// failure point per write instead of three.
|
/// failure point per write instead of three.
|
||||||
/// - **A persistent entity cache** ([`crate::sdkcache`]), so a restart does not
|
/// - **A persistent entity cache** ([`crate::sdkcache`]), so a restart does not
|
||||||
/// re-fetch and re-decrypt the tree the previous run already walked. It is
|
/// re-fetch and re-decrypt the tree the previous run already walked. It is
|
||||||
/// wrapped in the SDK's [`EncryptedCacheRepository`] keyed by the mailbox
|
/// wrapped in the SDK's [`EncryptedCacheRepository`] keyed by a secret derived
|
||||||
/// password, so the decrypted node names it holds are not readable from the
|
/// from the key passphrases, so the decrypted node names it holds are not
|
||||||
/// file alone — and a password change simply reads as a cold cache, since the
|
/// readable from the file alone — and a password change simply reads as a cold
|
||||||
/// SDK treats an undecryptable entry as a miss and clears the store.
|
/// cache, since the SDK treats an undecryptable entry as a miss and clears the
|
||||||
|
/// store.
|
||||||
///
|
///
|
||||||
/// Opening it is best-effort: a store this process cannot open costs cache
|
/// Opening it is best-effort: a store this process cannot open costs cache
|
||||||
/// hits, not the session, so the client falls back to the SDK's in-memory
|
/// hits, not the session, so the client falls back to the SDK's in-memory
|
||||||
/// default.
|
/// default.
|
||||||
fn tune(client: ProtonDriveClient, mailbox_password: &[u8]) -> ProtonDriveClient {
|
fn tune(client: ProtonDriveClient, passphrases: &KeyPassphrases) -> ProtonDriveClient {
|
||||||
let client = client
|
let client = client
|
||||||
.with_telemetry(TracingTelemetry::shared())
|
.with_telemetry(TracingTelemetry::shared())
|
||||||
.with_small_file_upload(true);
|
.with_small_file_upload(true);
|
||||||
match AppDirs::new().and_then(|dirs| crate::sdkcache::SdkCache::shared(&dirs)) {
|
match AppDirs::new().and_then(|dirs| crate::sdkcache::SdkCache::shared(&dirs)) {
|
||||||
Ok(cache) => client.with_entity_repository(EncryptedCacheRepository::shared(
|
Ok(cache) => {
|
||||||
cache,
|
let key = passphrases.derive_secret(ENTITY_CACHE_PURPOSE);
|
||||||
mailbox_password.to_vec(),
|
client.with_entity_repository(EncryptedCacheRepository::shared(cache, key.to_vec()))
|
||||||
)),
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::warn!(error = %e, "persistent SDK entity cache unavailable; using memory");
|
tracing::warn!(error = %e, "persistent SDK entity cache unavailable; using memory");
|
||||||
client
|
client
|
||||||
@@ -327,49 +620,105 @@ fn tune(client: ProtonDriveClient, mailbox_password: &[u8]) -> ProtonDriveClient
|
|||||||
|
|
||||||
/// Write the session's current tokens back to the keyring.
|
/// Write the session's current tokens back to the keyring.
|
||||||
///
|
///
|
||||||
/// The session does not carry the mailbox password (it is only needed to rebuild
|
/// Everything else in the stored blob — salts, passphrases — is preserved, so
|
||||||
/// the key chain on resume), so it is re-read from the existing stored blob and
|
/// this never undoes an [`unlock`] or [`lock`] made since the session started.
|
||||||
/// preserved. Call whenever the session may have rotated its tokens through the
|
/// Call whenever the session may have rotated its tokens so a later
|
||||||
/// 401-refresh path so a later [`resume_client`] presents a live refresh token.
|
/// [`resume_client`] presents a live refresh token.
|
||||||
pub async fn persist(session: &ProtonApiSession) -> Result<()> {
|
pub async fn persist(session: &ProtonApiSession) -> Result<()> {
|
||||||
let stored = load()?;
|
let tokens = session.current_tokens().await;
|
||||||
save(session, &stored.mailbox_password, stored.key_salts).await
|
store_tokens(tokens.access_token, tokens.refresh_token)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_refresh_handler(
|
fn store_tokens(access_token: String, refresh_token: String) -> Result<()> {
|
||||||
session: &ProtonApiSession,
|
let mut stored = load()?;
|
||||||
mailbox_password: String,
|
stored.access_token = access_token;
|
||||||
key_salts: Vec<KeySalt>,
|
stored.refresh_token = refresh_token;
|
||||||
) {
|
write_stored(&stored)
|
||||||
let session_id = session.session_id().as_str().to_owned();
|
}
|
||||||
let username = session.username().to_owned();
|
|
||||||
let user_id = session.user_id().as_str().to_owned();
|
|
||||||
let scopes = session.scopes().to_vec();
|
|
||||||
let password_mode = match session.password_mode() {
|
|
||||||
PasswordMode::Single => 1,
|
|
||||||
PasswordMode::Dual => 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
/// Persist rotated tokens the moment the session obtains them.
|
||||||
|
///
|
||||||
|
/// The handler re-reads the stored blob instead of capturing one, so it cannot
|
||||||
|
/// write back a stale copy over a later unlock or lock — and cannot resurrect a
|
||||||
|
/// session that was logged out while the daemon still ran.
|
||||||
|
fn register_refresh_handler(session: &ProtonApiSession) {
|
||||||
session.http().set_on_tokens_refreshed(move |tokens| {
|
session.http().set_on_tokens_refreshed(move |tokens| {
|
||||||
let stored = StoredSession {
|
match store_tokens(tokens.access_token, tokens.refresh_token) {
|
||||||
session_id: session_id.clone(),
|
Ok(()) => tracing::info!("successfully auto-persisted refreshed tokens in keyring"),
|
||||||
username: username.clone(),
|
Err(Error::NotLoggedIn) => {}
|
||||||
user_id: user_id.clone(),
|
Err(e) => {
|
||||||
access_token: tokens.access_token,
|
tracing::warn!(error = %e, "failed to auto-persist refreshed tokens in keyring")
|
||||||
refresh_token: tokens.refresh_token,
|
|
||||||
scopes: scopes.clone(),
|
|
||||||
password_mode,
|
|
||||||
mailbox_password: mailbox_password.clone(),
|
|
||||||
key_salts: key_salts.clone(),
|
|
||||||
};
|
|
||||||
if let Ok(json) = serde_json::to_string(&stored)
|
|
||||||
&& let Ok(entry) = keyring_entry()
|
|
||||||
{
|
|
||||||
if let Err(e) = entry.set_password(&json) {
|
|
||||||
tracing::warn!(error = %e, "failed to auto-persist refreshed tokens in keyring");
|
|
||||||
} else {
|
|
||||||
tracing::info!("successfully auto-persisted refreshed tokens in keyring");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
fn passphrases() -> KeyPassphrases {
|
||||||
|
let mut p = KeyPassphrases::new();
|
||||||
|
p.insert("key-a", b"alpha".to_vec());
|
||||||
|
p.insert("key-b", vec![0, 255, 7]);
|
||||||
|
p
|
||||||
|
}
|
||||||
|
|
||||||
|
fn blob(extra: &str) -> String {
|
||||||
|
format!(
|
||||||
|
r#"{{"session_id":"s","username":"u","user_id":"i","access_token":"a",
|
||||||
|
"refresh_token":"r","scopes":[],"password_mode":2{extra}}}"#
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn passphrases_survive_the_blob_encoding() {
|
||||||
|
let decoded = decode(&encode(&passphrases())).expect("decodes");
|
||||||
|
assert_eq!(decoded, passphrases());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn passphrases_survive_the_kernel_payload_encoding() {
|
||||||
|
let decoded = decode_secret(&encode_secret(&passphrases())).expect("decodes");
|
||||||
|
assert_eq!(decoded, passphrases());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn corrupt_or_empty_secrets_read_as_absent() {
|
||||||
|
assert!(decode_secret(b"not json").is_none());
|
||||||
|
assert!(decode(&BTreeMap::new()).is_none());
|
||||||
|
assert!(decode(&BTreeMap::from([("k".into(), "!!!".into())])).is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn legacy_blob_is_read_but_its_password_is_never_written_back() {
|
||||||
|
let stored: StoredSession =
|
||||||
|
serde_json::from_str(&blob(r#","mailbox_password":"hunter2""#)).unwrap();
|
||||||
|
assert_eq!(stored.mailbox_password, "hunter2");
|
||||||
|
assert!(stored.key_passphrases.is_none());
|
||||||
|
|
||||||
|
let written = serde_json::to_string(&stored).unwrap();
|
||||||
|
assert!(!written.contains("hunter2"));
|
||||||
|
assert!(!written.contains("mailbox_password"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn locked_blob_has_no_passphrases_field() {
|
||||||
|
let stored: StoredSession = serde_json::from_str(&blob("")).unwrap();
|
||||||
|
assert!(
|
||||||
|
serde_json::to_string(&stored)
|
||||||
|
.unwrap()
|
||||||
|
.find("key_passphrases")
|
||||||
|
.is_none()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn stored_passphrases_win_over_the_kernel_keyring() {
|
||||||
|
let mut stored: StoredSession = serde_json::from_str(&blob("")).unwrap();
|
||||||
|
stored.key_passphrases = Some(encode(&passphrases()));
|
||||||
|
let (found, origin) = find_passphrases(&stored).unwrap().unwrap();
|
||||||
|
assert_eq!(origin, KeyState::Stored);
|
||||||
|
assert_eq!(found, passphrases());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,6 +32,16 @@ pub enum Error {
|
|||||||
#[error("saved session can no longer unlock your keys — run `pdfs login` again")]
|
#[error("saved session can no longer unlock your keys — run `pdfs login` again")]
|
||||||
ReloginRequired,
|
ReloginRequired,
|
||||||
|
|
||||||
|
/// The account has a separate mailbox password that has not been entered
|
||||||
|
/// since login, so its keys cannot be unlocked. The fix is
|
||||||
|
/// [`auth::unlock`](crate::auth::unlock), not a new login.
|
||||||
|
#[error("account is locked — enter the mailbox password with `pdfs unlock`")]
|
||||||
|
Locked,
|
||||||
|
|
||||||
|
/// The mailbox password was checked against the account and is wrong.
|
||||||
|
#[error("that mailbox password does not unlock your account")]
|
||||||
|
WrongMailboxPassword,
|
||||||
|
|
||||||
/// The login was gated behind human verification. Not a failure the user can
|
/// The login was gated behind human verification. Not a failure the user can
|
||||||
/// fix by retrying: the challenge has to be solved and the login restarted
|
/// fix by retrying: the challenge has to be solved and the login restarted
|
||||||
/// with the resulting token (see [`auth::login_verified`](crate::auth::login_verified)).
|
/// with the resulting token (see [`auth::login_verified`](crate::auth::login_verified)).
|
||||||
@@ -199,9 +209,11 @@ impl From<serde_json::Error> for CoreError {
|
|||||||
impl From<Error> for CoreError {
|
impl From<Error> for CoreError {
|
||||||
fn from(e: Error) -> Self {
|
fn from(e: Error) -> Self {
|
||||||
let kind = match &e {
|
let kind = match &e {
|
||||||
Error::NotLoggedIn | Error::ReloginRequired | Error::HumanVerificationRequired(_) => {
|
Error::NotLoggedIn
|
||||||
ErrorKind::Denied
|
| Error::ReloginRequired
|
||||||
}
|
| Error::Locked
|
||||||
|
| Error::WrongMailboxPassword
|
||||||
|
| Error::HumanVerificationRequired(_) => ErrorKind::Denied,
|
||||||
Error::Proton(proton_sdk::ProtonError::Api(api)) => api_kind(api.code),
|
Error::Proton(proton_sdk::ProtonError::Api(api)) => api_kind(api.code),
|
||||||
// A `ProtonError` that never reached the API is a transport failure.
|
// A `ProtonError` that never reached the API is a transport failure.
|
||||||
Error::Proton(_) => ErrorKind::Offline,
|
Error::Proton(_) => ErrorKind::Offline,
|
||||||
|
|||||||
@@ -0,0 +1,204 @@
|
|||||||
|
//! A secret held in the Linux kernel keyring, for as long as the user is logged in.
|
||||||
|
//!
|
||||||
|
//! This is where the key passphrases of a two-password account live by default:
|
||||||
|
//! the mailbox password is never stored, and the secrets derived from it are
|
||||||
|
//! kept in kernel memory — not on disk, not in the Secret Service — and vanish
|
||||||
|
//! when the user's last session ends or the machine reboots. Both the daemon and
|
||||||
|
//! `pdfs unlock` reach the same entry because it hangs off the *user* keyring.
|
||||||
|
//!
|
||||||
|
//! Kernel keys are not paged to swap, are invisible to other users, and are
|
||||||
|
//! wiped by [`clear`] (`KEYCTL_REVOKE`), which makes them a better home than a
|
||||||
|
//! process's heap. Processes of the same user can still read them, exactly as
|
||||||
|
//! they could ptrace the daemon: this protects against disk, backup and other
|
||||||
|
//! users, not against code already running as you.
|
||||||
|
//!
|
||||||
|
//! The keyring may be unavailable (a container, a kernel built without
|
||||||
|
//! `CONFIG_KEYS`); every operation then reports it as an error and the caller
|
||||||
|
//! falls back to asking again, never to storing the secret somewhere weaker.
|
||||||
|
|
||||||
|
use std::io;
|
||||||
|
|
||||||
|
use zeroize::Zeroizing;
|
||||||
|
|
||||||
|
/// Key description. Namespaced so it cannot collide with another program's key.
|
||||||
|
#[cfg(not(test))]
|
||||||
|
const DESCRIPTION: &[u8] = b"pdfs:key-passphrases\0";
|
||||||
|
/// Tests must never touch a real unlock.
|
||||||
|
#[cfg(test)]
|
||||||
|
const DESCRIPTION: &[u8] = b"pdfs:key-passphrases:test\0";
|
||||||
|
const KEY_TYPE: &[u8] = b"user\0";
|
||||||
|
|
||||||
|
const KEY_SPEC_USER_KEYRING: i32 = -4;
|
||||||
|
const KEYCTL_REVOKE: libc::c_long = 3;
|
||||||
|
const KEYCTL_SETPERM: libc::c_long = 5;
|
||||||
|
const KEYCTL_SEARCH: libc::c_long = 10;
|
||||||
|
const KEYCTL_READ: libc::c_long = 11;
|
||||||
|
|
||||||
|
/// Possessor and owner may view, read, write, search, link and set attributes;
|
||||||
|
/// group and others get nothing.
|
||||||
|
///
|
||||||
|
/// A new key's default grants the owner only *view*, and read access to the
|
||||||
|
/// possessor. A process possesses the user keyring only when its session
|
||||||
|
/// keyring links to it, which a systemd user service or a container does not
|
||||||
|
/// guarantee — so with the default, the daemon could store a key it then
|
||||||
|
/// cannot read back. The owner is the same user that could ptrace the daemon
|
||||||
|
/// anyway, so granting it read access gives up nothing.
|
||||||
|
const PERM_OWNER_AND_POSSESSOR: u32 = 0x3f3f_0000;
|
||||||
|
|
||||||
|
fn last_error<T>() -> io::Result<T> {
|
||||||
|
Err(io::Error::last_os_error())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find() -> io::Result<Option<libc::c_long>> {
|
||||||
|
// SAFETY: both strings are NUL-terminated and outlive the call.
|
||||||
|
let id = unsafe {
|
||||||
|
libc::syscall(
|
||||||
|
libc::SYS_keyctl,
|
||||||
|
KEYCTL_SEARCH,
|
||||||
|
KEY_SPEC_USER_KEYRING,
|
||||||
|
KEY_TYPE.as_ptr(),
|
||||||
|
DESCRIPTION.as_ptr(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if id >= 0 {
|
||||||
|
return Ok(Some(id));
|
||||||
|
}
|
||||||
|
let err = io::Error::last_os_error();
|
||||||
|
match err.raw_os_error() {
|
||||||
|
// ENOKEY: not stored. EKEYREVOKED/EKEYEXPIRED: stored once, now gone.
|
||||||
|
Some(libc::ENOKEY | libc::EKEYREVOKED | libc::EKEYEXPIRED) => Ok(None),
|
||||||
|
_ => Err(err),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Stop this process from being core-dumped or ptraced by an unprivileged
|
||||||
|
/// process of the same user, so the secrets in its memory stay out of crash
|
||||||
|
/// reports. Call once at start of a long-lived process that holds them.
|
||||||
|
pub fn forbid_dumps() {
|
||||||
|
// SAFETY: `PR_SET_DUMPABLE` takes plain integers and only affects this process.
|
||||||
|
let rc = unsafe { libc::prctl(libc::PR_SET_DUMPABLE, 0, 0, 0, 0) };
|
||||||
|
if rc != 0 {
|
||||||
|
tracing::warn!(error = %io::Error::last_os_error(), "could not mark the process non-dumpable");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Store `secret`, replacing any earlier one.
|
||||||
|
pub fn store(secret: &[u8]) -> io::Result<()> {
|
||||||
|
// SAFETY: strings are NUL-terminated; the payload pointer/length pair
|
||||||
|
// describes `secret`, which outlives the call.
|
||||||
|
let id = unsafe {
|
||||||
|
libc::syscall(
|
||||||
|
libc::SYS_add_key,
|
||||||
|
KEY_TYPE.as_ptr(),
|
||||||
|
DESCRIPTION.as_ptr(),
|
||||||
|
secret.as_ptr(),
|
||||||
|
secret.len(),
|
||||||
|
KEY_SPEC_USER_KEYRING,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if id < 0 {
|
||||||
|
return last_error();
|
||||||
|
}
|
||||||
|
// SAFETY: plain integer arguments.
|
||||||
|
let rc = unsafe {
|
||||||
|
libc::syscall(
|
||||||
|
libc::SYS_keyctl,
|
||||||
|
KEYCTL_SETPERM,
|
||||||
|
id,
|
||||||
|
PERM_OWNER_AND_POSSESSOR,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if rc < 0 {
|
||||||
|
// A key whose permissions are unknown is not one to leave behind.
|
||||||
|
let err = io::Error::last_os_error();
|
||||||
|
let _ = clear();
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Read the stored secret, or `None` when there is none.
|
||||||
|
pub fn load() -> io::Result<Option<Zeroizing<Vec<u8>>>> {
|
||||||
|
let Some(id) = find()? else {
|
||||||
|
return Ok(None);
|
||||||
|
};
|
||||||
|
// Size first, then read; retry if the key was replaced in between.
|
||||||
|
for _ in 0..3 {
|
||||||
|
// SAFETY: a null buffer asks the kernel only for the payload length.
|
||||||
|
let len = unsafe {
|
||||||
|
libc::syscall(
|
||||||
|
libc::SYS_keyctl,
|
||||||
|
KEYCTL_READ,
|
||||||
|
id,
|
||||||
|
std::ptr::null_mut::<u8>(),
|
||||||
|
0usize,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if len < 0 {
|
||||||
|
return match io::Error::last_os_error().raw_os_error() {
|
||||||
|
Some(libc::ENOKEY | libc::EKEYREVOKED | libc::EKEYEXPIRED) => Ok(None),
|
||||||
|
_ => last_error(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
let mut buf = Zeroizing::new(vec![0u8; len as usize]);
|
||||||
|
// SAFETY: `buf` is `len` writable bytes.
|
||||||
|
let read = unsafe {
|
||||||
|
libc::syscall(
|
||||||
|
libc::SYS_keyctl,
|
||||||
|
KEYCTL_READ,
|
||||||
|
id,
|
||||||
|
buf.as_mut_ptr(),
|
||||||
|
buf.len(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if read < 0 {
|
||||||
|
return last_error();
|
||||||
|
}
|
||||||
|
if read as usize <= buf.len() {
|
||||||
|
buf.truncate(read as usize);
|
||||||
|
return Ok(Some(buf));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(io::Error::other("the key changed while it was being read"))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Remove the stored secret. Succeeds when there is none.
|
||||||
|
pub fn clear() -> io::Result<()> {
|
||||||
|
let Some(id) = find()? else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
// SAFETY: plain integer arguments.
|
||||||
|
let rc = unsafe { libc::syscall(libc::SYS_keyctl, KEYCTL_REVOKE, id) };
|
||||||
|
if rc < 0 {
|
||||||
|
return match io::Error::last_os_error().raw_os_error() {
|
||||||
|
Some(libc::ENOKEY | libc::EKEYREVOKED) => Ok(()),
|
||||||
|
_ => last_error(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
// The kernel keyring is process-wide state and a sandbox may not offer it,
|
||||||
|
// so one test covers the whole round trip and skips when it is unavailable.
|
||||||
|
#[test]
|
||||||
|
fn stored_secret_round_trips_and_clears() {
|
||||||
|
if store(b"probe").is_err() {
|
||||||
|
eprintln!("kernel keyring unavailable; skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let saved = load().unwrap().expect("stored secret is readable");
|
||||||
|
assert_eq!(saved.as_slice(), b"probe");
|
||||||
|
|
||||||
|
store(b"replaced").unwrap();
|
||||||
|
assert_eq!(load().unwrap().unwrap().as_slice(), b"replaced");
|
||||||
|
|
||||||
|
clear().unwrap();
|
||||||
|
assert!(load().unwrap().is_none());
|
||||||
|
clear().unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ pub mod config;
|
|||||||
pub mod control;
|
pub mod control;
|
||||||
pub mod db;
|
pub mod db;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
pub mod kernelkey;
|
||||||
pub mod localindex;
|
pub mod localindex;
|
||||||
pub mod menu;
|
pub mod menu;
|
||||||
pub mod mounts;
|
pub mod mounts;
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ use mount::{
|
|||||||
};
|
};
|
||||||
use reads::{BlockFlight, BlockRing, PREFETCH_BUDGET, Prefetch, ReaderSlot, STREAM_BYPASS_MIN};
|
use reads::{BlockFlight, BlockRing, PREFETCH_BUDGET, Prefetch, ReaderSlot, STREAM_BYPASS_MIN};
|
||||||
use state::{Entry, Intervals, PendingRevision, State, StateGuard, WriteHandle};
|
use state::{Entry, Intervals, PendingRevision, State, StateGuard, WriteHandle};
|
||||||
|
pub use systemd::idle_sleep;
|
||||||
use tracing::{debug, error, info, warn};
|
use tracing::{debug, error, info, warn};
|
||||||
use transfers::{CountingWriter, JobGuard, OwnedCountingReader, TransferRegistry};
|
use transfers::{CountingWriter, JobGuard, OwnedCountingReader, TransferRegistry};
|
||||||
use r#virtual::{
|
use r#virtual::{
|
||||||
|
|||||||
@@ -74,6 +74,26 @@ pub(crate) fn watchdog_ping() {
|
|||||||
let _ = notify("WATCHDOG=1\n");
|
let _ = notify("WATCHDOG=1\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sleep for `duration`, pinging the watchdog on the way.
|
||||||
|
///
|
||||||
|
/// For the stretches where the daemon is alive but has no mount, and so no
|
||||||
|
/// supervisor: waiting for a login, or backing off after a failed mount. The
|
||||||
|
/// manager arms the watchdog when the process starts, so without these pings a
|
||||||
|
/// daemon that is merely retrying is aborted after `WatchdogSec` and leaves a
|
||||||
|
/// coredump instead of the error it was logging. Never use this while mounted:
|
||||||
|
/// there the ping must prove the control socket answers.
|
||||||
|
pub fn idle_sleep(duration: Duration) {
|
||||||
|
const CHUNK: Duration = Duration::from_secs(10);
|
||||||
|
let mut left = duration;
|
||||||
|
watchdog_ping();
|
||||||
|
while !left.is_zero() {
|
||||||
|
let step = left.min(CHUNK);
|
||||||
|
std::thread::sleep(step);
|
||||||
|
left -= step;
|
||||||
|
watchdog_ping();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Tell the manager the daemon is stopping, so a slow teardown is not mistaken
|
/// Tell the manager the daemon is stopping, so a slow teardown is not mistaken
|
||||||
/// for a hang by the watchdog it is racing.
|
/// for a hang by the watchdog it is racing.
|
||||||
pub(crate) fn stopping() {
|
pub(crate) fn stopping() {
|
||||||
|
|||||||
@@ -119,6 +119,9 @@ struct Ui {
|
|||||||
/// keyring (a DBus round-trip). Populated at startup and updated only on
|
/// keyring (a DBus round-trip). Populated at startup and updated only on
|
||||||
/// login / logout. `None` = signed out.
|
/// login / logout. `None` = signed out.
|
||||||
session: RefCell<Option<auth::StoredSession>>,
|
session: RefCell<Option<auth::StoredSession>>,
|
||||||
|
/// Whether this run already asked for the mailbox password of a locked
|
||||||
|
/// account, so a refresh never re-opens a dialog the user cancelled.
|
||||||
|
unlock_offered: Cell<bool>,
|
||||||
/// Whether the last refresh saw a live mount daemon. Gates the unpin buttons
|
/// Whether the last refresh saw a live mount daemon. Gates the unpin buttons
|
||||||
/// (which need the daemon to evict + re-hydrate) and every mutating action.
|
/// (which need the daemon to evict + re-hydrate) and every mutating action.
|
||||||
mounted: RefCell<bool>,
|
mounted: RefCell<bool>,
|
||||||
@@ -362,6 +365,7 @@ fn build_window(app: &adw::Application) {
|
|||||||
busy: Cell::new(0),
|
busy: Cell::new(0),
|
||||||
opening: RefCell::new(HashSet::new()),
|
opening: RefCell::new(HashSet::new()),
|
||||||
session: RefCell::new(auth::load().ok()),
|
session: RefCell::new(auth::load().ok()),
|
||||||
|
unlock_offered: Cell::new(false),
|
||||||
mounted: RefCell::new(false),
|
mounted: RefCell::new(false),
|
||||||
sidebar: sidebar_list.clone(),
|
sidebar: sidebar_list.clone(),
|
||||||
nav: split.clone(),
|
nav: split.clone(),
|
||||||
|
|||||||
@@ -128,7 +128,12 @@ pub(crate) fn wire_login(ui: &Rc<Ui>) {
|
|||||||
|
|
||||||
set_signing_in(&ui, true);
|
set_signing_in(&ui, true);
|
||||||
ui.login.login_status.set_text(&gettext("Signing in…"));
|
ui.login.login_status.set_text(&gettext("Signing in…"));
|
||||||
let (rx, totp_req_rx, hv_req_rx) = spawn_login(username, password);
|
let LoginChannels {
|
||||||
|
result: rx,
|
||||||
|
totp: totp_req_rx,
|
||||||
|
hv: hv_req_rx,
|
||||||
|
mailbox: mailbox_req_rx,
|
||||||
|
} = spawn_login(username, password);
|
||||||
|
|
||||||
// Surface the 2FA dialog only if the SDK actually asks for a code (i.e.
|
// Surface the 2FA dialog only if the SDK actually asks for a code (i.e.
|
||||||
// the account has 2FA enabled). The worker blocks until the dialog feeds
|
// the account has 2FA enabled). The worker blocks until the dialog feeds
|
||||||
@@ -157,6 +162,21 @@ pub(crate) fn wire_login(ui: &Rc<Ui>) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// And for the mailbox password, which only a two-password account has.
|
||||||
|
// The worker asks again after a wrong answer, so this loops too.
|
||||||
|
let ui_mailbox = ui.clone();
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
|
while let Ok((attempt, answer_tx)) = mailbox_req_rx.recv().await {
|
||||||
|
ask_mailbox(&ui_mailbox, attempt > 0, move |answer| {
|
||||||
|
// A cancelled dialog drops the sender, which the worker
|
||||||
|
// reads as a cancelled login.
|
||||||
|
if let Some(answer) = answer {
|
||||||
|
let _ = answer_tx.send(answer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let ui = ui.clone();
|
let ui = ui.clone();
|
||||||
glib::spawn_future_local(async move {
|
glib::spawn_future_local(async move {
|
||||||
let result = rx
|
let result = rx
|
||||||
@@ -209,6 +229,12 @@ pub(crate) fn login_error_message(error: &pdfs_core::Error) -> String {
|
|||||||
pdfs_core::Error::Other(message) if message.contains("two-factor") => {
|
pdfs_core::Error::Other(message) if message.contains("two-factor") => {
|
||||||
gettext("Sign-in cancelled: no two-factor code was entered.")
|
gettext("Sign-in cancelled: no two-factor code was entered.")
|
||||||
}
|
}
|
||||||
|
pdfs_core::Error::Other(message) if message.contains("mailbox") => {
|
||||||
|
gettext("Sign-in cancelled: no mailbox password was entered.")
|
||||||
|
}
|
||||||
|
pdfs_core::Error::WrongMailboxPassword => {
|
||||||
|
gettext("That mailbox password didn't unlock your account.")
|
||||||
|
}
|
||||||
pdfs_core::Error::Other(message) if message.contains("verification") => gettext(
|
pdfs_core::Error::Other(message) if message.contains("verification") => gettext(
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a new one.",
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a new one.",
|
||||||
),
|
),
|
||||||
@@ -220,26 +246,31 @@ pub(crate) fn login_error_message(error: &pdfs_core::Error) -> String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// What the login worker asks the UI for, and how it reports back.
|
||||||
|
pub(crate) struct LoginChannels {
|
||||||
|
/// The final outcome, once.
|
||||||
|
pub(crate) result: async_channel::Receiver<Result<(), String>>,
|
||||||
|
/// Fires only if the account needs a 2FA code; carries the sender for it.
|
||||||
|
pub(crate) totp: async_channel::Receiver<std::sync::mpsc::Sender<String>>,
|
||||||
|
/// Fires only if the sign-in is gated: the page to show, and the sender for
|
||||||
|
/// the token the user earns on it.
|
||||||
|
pub(crate) hv: async_channel::Receiver<(String, std::sync::mpsc::Sender<String>)>,
|
||||||
|
/// Fires only for a two-password account: how many answers were already
|
||||||
|
/// wrong, and the sender for the password and the "remember" choice.
|
||||||
|
pub(crate) mailbox: async_channel::Receiver<(u32, std::sync::mpsc::Sender<(String, bool)>)>,
|
||||||
|
}
|
||||||
|
|
||||||
/// Run the async SRP + optional 2FA login on a dedicated current-thread Tokio
|
/// Run the async SRP + optional 2FA login on a dedicated current-thread Tokio
|
||||||
/// runtime. Returns two channels: the first yields the final login result once;
|
/// runtime. The returned [`LoginChannels`] carry the final result and the lazy
|
||||||
/// the second fires *only if* the account needs a 2FA code, carrying a
|
/// prompts. Each login closure blocks the worker on a sender the UI answers, so
|
||||||
/// [`std::sync::mpsc::Sender`] the UI uses to feed the code back. The login
|
/// a code is requested lazily and can't expire before the password proof.
|
||||||
/// closure blocks the worker on that sender until the dialog answers, so the
|
pub(crate) fn spawn_login(username: String, password: String) -> LoginChannels {
|
||||||
/// code is requested lazily and can't expire before the password proof.
|
|
||||||
#[allow(clippy::type_complexity)]
|
|
||||||
pub(crate) fn spawn_login(
|
|
||||||
username: String,
|
|
||||||
password: String,
|
|
||||||
) -> (
|
|
||||||
async_channel::Receiver<Result<(), String>>,
|
|
||||||
async_channel::Receiver<std::sync::mpsc::Sender<String>>,
|
|
||||||
async_channel::Receiver<(String, std::sync::mpsc::Sender<String>)>,
|
|
||||||
) {
|
|
||||||
let (tx, rx) = async_channel::bounded(1);
|
let (tx, rx) = async_channel::bounded(1);
|
||||||
// Two, not one: a CAPTCHA-gated login restarts, so a 2FA account is asked
|
// Two, not one: a CAPTCHA-gated login restarts, so a 2FA account is asked
|
||||||
// for a code on each attempt and a single slot would deadlock the worker.
|
// for a code on each attempt and a single slot would deadlock the worker.
|
||||||
let (totp_req_tx, totp_req_rx) = async_channel::bounded(2);
|
let (totp_req_tx, totp_req_rx) = async_channel::bounded(2);
|
||||||
let (hv_req_tx, hv_req_rx) = async_channel::bounded(1);
|
let (hv_req_tx, hv_req_rx) = async_channel::bounded(1);
|
||||||
|
let (mailbox_req_tx, mailbox_req_rx) = async_channel::bounded(1);
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
let rt = match tokio::runtime::Builder::new_current_thread()
|
let rt = match tokio::runtime::Builder::new_current_thread()
|
||||||
.enable_all()
|
.enable_all()
|
||||||
@@ -267,6 +298,19 @@ pub(crate) fn spawn_login(
|
|||||||
.recv()
|
.recv()
|
||||||
.map_err(|_| pdfs_core::Error::Other("two-factor entry cancelled".into()))
|
.map_err(|_| pdfs_core::Error::Other("two-factor entry cancelled".into()))
|
||||||
},
|
},
|
||||||
|
|attempt| {
|
||||||
|
let (answer_tx, answer_rx) = std::sync::mpsc::channel::<(String, bool)>();
|
||||||
|
mailbox_req_tx
|
||||||
|
.send_blocking((attempt, answer_tx))
|
||||||
|
.map_err(|_| pdfs_core::Error::Other("mailbox prompt closed".into()))?;
|
||||||
|
let (password, remember) = answer_rx
|
||||||
|
.recv()
|
||||||
|
.map_err(|_| pdfs_core::Error::Other("mailbox entry cancelled".into()))?;
|
||||||
|
Ok(auth::Mailbox {
|
||||||
|
password: password.into(),
|
||||||
|
remember,
|
||||||
|
})
|
||||||
|
},
|
||||||
|hv| {
|
|hv| {
|
||||||
// Gated: hand the UI the page to show, block on the token the
|
// Gated: hand the UI the page to show, block on the token the
|
||||||
// user earns by solving it.
|
// user earns by solving it.
|
||||||
@@ -287,7 +331,143 @@ pub(crate) fn spawn_login(
|
|||||||
});
|
});
|
||||||
let _ = tx.send_blocking(result);
|
let _ = tx.send_blocking(result);
|
||||||
});
|
});
|
||||||
(rx, totp_req_rx, hv_req_rx)
|
LoginChannels {
|
||||||
|
result: rx,
|
||||||
|
totp: totp_req_rx,
|
||||||
|
hv: hv_req_rx,
|
||||||
|
mailbox: mailbox_req_rx,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ask for the mailbox password of a two-password account.
|
||||||
|
///
|
||||||
|
/// `done` gets the password and the "keep unlocked" choice, or `None` when the
|
||||||
|
/// dialog was cancelled. `retry` says the last answer was wrong. The choice
|
||||||
|
/// defaults to off: storing the mailbox unlock in the keyring trades away what
|
||||||
|
/// a separate mailbox password is for, so it is something to opt into.
|
||||||
|
pub(crate) fn ask_mailbox(
|
||||||
|
ui: &Rc<Ui>,
|
||||||
|
retry: bool,
|
||||||
|
done: impl FnOnce(Option<(String, bool)>) + 'static,
|
||||||
|
) {
|
||||||
|
let body = if retry {
|
||||||
|
gettext("That mailbox password didn't unlock your account. Try again.")
|
||||||
|
} else {
|
||||||
|
gettext("This account has a separate mailbox password. Enter it to unlock your files.")
|
||||||
|
};
|
||||||
|
let dialog = adw::AlertDialog::builder()
|
||||||
|
.heading(gettext("Mailbox Password"))
|
||||||
|
.body(body)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let group = adw::PreferencesGroup::new();
|
||||||
|
let entry = adw::PasswordEntryRow::builder()
|
||||||
|
.title(gettext("Mailbox password"))
|
||||||
|
.activates_default(true)
|
||||||
|
.build();
|
||||||
|
let remember = adw::SwitchRow::builder()
|
||||||
|
.title(gettext("Keep unlocked on this computer"))
|
||||||
|
.subtitle(gettext(
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without asking after every login. Otherwise you enter the password once per session.",
|
||||||
|
))
|
||||||
|
.build();
|
||||||
|
group.add(&entry);
|
||||||
|
group.add(&remember);
|
||||||
|
dialog.set_extra_child(Some(&group));
|
||||||
|
|
||||||
|
dialog.add_response("cancel", &gettext("Cancel"));
|
||||||
|
dialog.add_response("unlock", &gettext("Unlock"));
|
||||||
|
dialog.set_response_appearance("unlock", adw::ResponseAppearance::Suggested);
|
||||||
|
dialog.set_default_response(Some("unlock"));
|
||||||
|
dialog.set_close_response("cancel");
|
||||||
|
|
||||||
|
let done = RefCell::new(Some(done));
|
||||||
|
dialog.connect_response(None, move |_, resp| {
|
||||||
|
let Some(done) = done.borrow_mut().take() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let password = entry.text().to_string();
|
||||||
|
if resp == "unlock" && !password.is_empty() {
|
||||||
|
done(Some((password, remember.is_active())));
|
||||||
|
} else {
|
||||||
|
done(None);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let parent = ui_window(ui).map(|w| w.upcast::<gtk4::Window>());
|
||||||
|
dialog.present(parent.as_ref());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// If the signed-in account is locked, ask for its mailbox password — once per
|
||||||
|
/// run; after a cancel, a toast keeps an Unlock button within reach.
|
||||||
|
///
|
||||||
|
/// The key state is a keyring and kernel-keyring read, so it runs on a worker.
|
||||||
|
pub(crate) fn offer_unlock(ui: &Rc<Ui>) {
|
||||||
|
if ui.unlock_offered.get() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let ui = ui.clone();
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
|
let state = gio::spawn_blocking(|| auth::key_state().ok()).await;
|
||||||
|
if matches!(state, Ok(Some(auth::KeyState::Locked))) && !ui.unlock_offered.replace(true) {
|
||||||
|
prompt_unlock(&ui, false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
enum UnlockOutcome {
|
||||||
|
Unlocked,
|
||||||
|
Wrong,
|
||||||
|
Failed(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Ask for the mailbox password and unlock the account with it.
|
||||||
|
fn prompt_unlock(ui: &Rc<Ui>, retry: bool) {
|
||||||
|
let ui_done = ui.clone();
|
||||||
|
ask_mailbox(ui, retry, move |answer| {
|
||||||
|
let Some((password, remember)) = answer else {
|
||||||
|
toast_action(
|
||||||
|
&ui_done,
|
||||||
|
&gettext("Proton Drive is locked. Enter your mailbox password to unlock it."),
|
||||||
|
&gettext("Unlock"),
|
||||||
|
|ui| prompt_unlock(ui, false),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
|
// Verifying talks to Proton and the restart talks to systemd, so
|
||||||
|
// both run on a worker, never on the main loop.
|
||||||
|
let outcome = gio::spawn_blocking(move || {
|
||||||
|
let rt = match tokio::runtime::Builder::new_current_thread()
|
||||||
|
.enable_all()
|
||||||
|
.build()
|
||||||
|
{
|
||||||
|
Ok(rt) => rt,
|
||||||
|
Err(e) => return UnlockOutcome::Failed(e.to_string()),
|
||||||
|
};
|
||||||
|
match rt.block_on(auth::unlock(&password, remember)) {
|
||||||
|
Ok(()) => {
|
||||||
|
service::restart();
|
||||||
|
UnlockOutcome::Unlocked
|
||||||
|
}
|
||||||
|
Err(pdfs_core::Error::WrongMailboxPassword) => UnlockOutcome::Wrong,
|
||||||
|
Err(e) => UnlockOutcome::Failed(login_error_message(&e)),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
match outcome {
|
||||||
|
Ok(UnlockOutcome::Unlocked) => {
|
||||||
|
toast(&ui_done, &gettext("Unlocked."));
|
||||||
|
refresh(&ui_done);
|
||||||
|
}
|
||||||
|
Ok(UnlockOutcome::Wrong) => prompt_unlock(&ui_done, true),
|
||||||
|
Ok(UnlockOutcome::Failed(message)) => {
|
||||||
|
toast_error(&ui_done, &gettext("Couldn't unlock"), &message)
|
||||||
|
}
|
||||||
|
Err(_) => {}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Show the lazy two-factor dialog and feed the entered code back to the waiting
|
/// Show the lazy two-factor dialog and feed the entered code back to the waiting
|
||||||
@@ -374,6 +554,12 @@ mod tests {
|
|||||||
assert!(login_error_message(&hv).contains("verification wasn't completed"));
|
assert!(login_error_message(&hv).contains("verification wasn't completed"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_cancelled_mailbox_prompt_is_reported_as_such() {
|
||||||
|
let error = pdfs_core::Error::Other("mailbox entry cancelled".into());
|
||||||
|
assert!(login_error_message(&error).contains("no mailbox password"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn an_unmapped_error_keeps_its_text() {
|
fn an_unmapped_error_keeps_its_text() {
|
||||||
let error = pdfs_core::Error::Other("something odd".into());
|
let error = pdfs_core::Error::Other("something odd".into());
|
||||||
|
|||||||
@@ -860,6 +860,7 @@ pub(crate) fn refresh(ui: &Rc<Ui>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offer_unlock(ui);
|
||||||
refresh_status(ui);
|
refresh_status(ui);
|
||||||
refresh_transfers(ui);
|
refresh_transfers(ui);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,6 +166,15 @@ fn poll_state(socket: &Path, default_mountpoint: &Path) -> DriveState {
|
|||||||
// No daemon: describe login state instead so the menu is still useful.
|
// No daemon: describe login state instead so the menu is still useful.
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
let (line, phase) = match auth::load() {
|
let (line, phase) = match auth::load() {
|
||||||
|
Ok(s) if matches!(auth::key_state(), Ok(auth::KeyState::Locked)) => (
|
||||||
|
// Translators: {username} is the Proton account name. The
|
||||||
|
// account has a mailbox password that has to be entered.
|
||||||
|
gettext_f(
|
||||||
|
"Signed in as {username} — locked",
|
||||||
|
&[("username", &s.username)],
|
||||||
|
),
|
||||||
|
Phase::Attention,
|
||||||
|
),
|
||||||
Ok(s) => (
|
Ok(s) => (
|
||||||
// Translators: {username} is the Proton account name.
|
// Translators: {username} is the Proton account name.
|
||||||
gettext_f(
|
gettext_f(
|
||||||
|
|||||||
@@ -11,6 +11,42 @@ scratch (user data in `staging/` and `recovery/` is never touched by this).
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [3.1.0] — 2026-10-07
|
||||||
|
|
||||||
|
Schema: **42**, unchanged.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **Two-password accounts.** An account with a separate mailbox password now signs in: the app
|
||||||
|
and `pdfs login` ask for it after the login password and check it against the account, so a
|
||||||
|
typo is a retry and not a daemon that never mounts. The mailbox password is never stored.
|
||||||
|
What it unlocks is kept in kernel memory for the login session, so it is asked for once per
|
||||||
|
session and is gone after a reboot or when you log out of the machine.
|
||||||
|
- **`pdfs unlock` and `pdfs lock`.** `pdfs unlock` enters the mailbox password of a locked
|
||||||
|
account and starts the daemon's mount; `pdfs lock` forgets it again. `--remember` on `login`
|
||||||
|
and `unlock` (and the "Keep unlocked on this computer" switch in the app) keeps the unlock in
|
||||||
|
the system keyring instead, so the daemon starts without asking; `pdfs lock --forget` removes
|
||||||
|
it. Off by default: it gives up the separation a second password is for.
|
||||||
|
- **Locked state.** `pdfs status`, `pdfs diagnose` and the tray say when the account is waiting
|
||||||
|
for its mailbox password, and the app asks for it when it opens.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **The keyring no longer holds a password.** The session blob keeps the keys' passphrases
|
||||||
|
instead of the mailbox password, and a blob written by 3.0.x is converted on the first start.
|
||||||
|
A stored password the account rejects (a two-password account that was signed in with only
|
||||||
|
its login password) leaves the account locked instead of failing every start.
|
||||||
|
- **The daemon is not dumpable.** It holds the unlock in memory, so core dumps and same-user
|
||||||
|
`ptrace` are off for it.
|
||||||
|
- **The offline cache is re-keyed** from the new secret, so the first start after the update
|
||||||
|
reads it as cold and fetches the tree again once.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **systemd killed a daemon that was only retrying.** `WatchdogSec` was answered only once a
|
||||||
|
mount existed, so a daemon waiting for a login or retrying a failed mount was aborted after
|
||||||
|
two minutes and restarted in a loop, hiding the error it logged. It now answers the watchdog
|
||||||
|
while it waits. ([#26](https://github.com/narrrl/proton-drive-linux/issues/26))
|
||||||
|
- **A refreshed token could overwrite a newer unlock or revive a signed-out session.** Token
|
||||||
|
rotation now updates only the tokens in the stored blob.
|
||||||
|
|
||||||
## [3.0.0] — 2026-10-05
|
## [3.0.0] — 2026-10-05
|
||||||
|
|
||||||
Schema: **42**. The queue table is rebuilt so an id is never given out twice; queued changes
|
Schema: **42**. The queue table is rebuilt so an id is never given out twice; queued changes
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
# Build + install: cd packaging && makepkg -fi
|
# Build + install: cd packaging && makepkg -fi
|
||||||
|
|
||||||
pkgname=proton-drive-linux
|
pkgname=proton-drive-linux
|
||||||
pkgver=3.0.0
|
pkgver=3.1.0
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app + tray"
|
pkgdesc="Unofficial Proton Drive client for Linux: files-on-demand FUSE mount, CLI, GTK4 app + tray"
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
|
|||||||
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d. %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A, %-d. %B %Y, %H:%M"
|
msgstr "%A, %-d. %B %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A, %-d. %B %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "Meine Dateien"
|
msgstr "Meine Dateien"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Fotos"
|
msgstr "Fotos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Mit mir geteilt"
|
msgstr "Mit mir geteilt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Von mir geteilt"
|
msgstr "Von mir geteilt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computer"
|
msgstr "Computer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Papierkorb"
|
msgstr "Papierkorb"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Synchronisierung"
|
msgstr "Synchronisierung"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Keine Internetverbindung"
|
msgstr "Keine Internetverbindung"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Das ist nicht mehr vorhanden"
|
msgstr "Das ist nicht mehr vorhanden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "Kein Zugriff darauf"
|
msgstr "Kein Zugriff darauf"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Etwas anderes hat dies zuerst geändert"
|
msgstr "Etwas anderes hat dies zuerst geändert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Das Proton Drive ist voll"
|
msgstr "Das Proton Drive ist voll"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Einstellungen"
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Tastenkürzel"
|
msgstr "Tastenkürzel"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "Info zu Proton Drive for Linux"
|
msgstr "Info zu Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Hauptmenü"
|
msgstr "Hauptmenü"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -166,23 +166,23 @@ msgstr ""
|
|||||||
"Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG "
|
"Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG "
|
||||||
"unterstützt oder befürwortet."
|
"unterstützt oder befürwortet."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Quellcode"
|
msgstr "Quellcode"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Nutzungsbedingungen von Proton"
|
msgstr "Nutzungsbedingungen von Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Datenschutzerklärung von Proton"
|
msgstr "Datenschutzerklärung von Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Haftungsausschluss"
|
msgstr "Haftungsausschluss"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -207,7 +207,7 @@ msgstr ""
|
|||||||
"bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten "
|
"bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten "
|
||||||
"zusätzlich gesichert werden."
|
"zusätzlich gesichert werden."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -217,7 +217,7 @@ msgstr ""
|
|||||||
"\">GeoNames</a>, lizenziert unter <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, lizenziert unter <a href=\"https://creativecommons.org/"
|
||||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -227,7 +227,7 @@ msgstr ""
|
|||||||
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a> gezeichnet, die "
|
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a> gezeichnet, die "
|
||||||
"gemeinfrei sind."
|
"gemeinfrei sind."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -243,15 +243,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Mitwirkende an Proton Drive for Linux"
|
msgstr "Mitwirkende an Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Proton Drive beenden?"
|
msgstr "Proton Drive beenden?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -260,7 +260,7 @@ msgstr ""
|
|||||||
"eine Verbindung hergestellt wird. Proton Drive startet bei der nächsten "
|
"eine Verbindung hergestellt wird. Proton Drive startet bei der nächsten "
|
||||||
"Anmeldung erneut."
|
"Anmeldung erneut."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -275,7 +275,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -290,30 +291,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbrechen"
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Beenden"
|
msgstr "Beenden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Proton Drive konnte nicht beendet werden"
|
msgstr "Proton Drive konnte nicht beendet werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "Der Proton-Drive-Dienst wurde nicht beendet."
|
msgstr "Der Proton-Drive-Dienst wurde nicht beendet."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Allgemein"
|
msgstr "Allgemein"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Drive durchsuchen"
|
msgstr "Drive durchsuchen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -322,38 +323,38 @@ msgstr "Drive durchsuchen"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Aktualisieren"
|
msgstr "Aktualisieren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Tastenkürzel"
|
msgstr "Tastenkürzel"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Dateien"
|
msgstr "Dateien"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Neuer Ordner"
|
msgstr "Neuer Ordner"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Dateien hochladen"
|
msgstr "Dateien hochladen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Zurück / Vor"
|
msgstr "Zurück / Vor"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Übergeordneter Ordner"
|
msgstr "Übergeordneter Ordner"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Raster / Liste"
|
msgstr "Raster / Liste"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -362,7 +363,7 @@ msgstr "Raster / Liste"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Umbenennen"
|
msgstr "Umbenennen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -372,73 +373,73 @@ msgstr "Umbenennen"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "In den Papierkorb verschieben"
|
msgstr "In den Papierkorb verschieben"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Auswahl aufheben"
|
msgstr "Auswahl aufheben"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Größere Vorschaubilder"
|
msgstr "Größere Vorschaubilder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Kleinere Vorschaubilder"
|
msgstr "Kleinere Vorschaubilder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Vorschaubildgröße zurücksetzen"
|
msgstr "Vorschaubildgröße zurücksetzen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Alles auswählen"
|
msgstr "Alles auswählen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Fotobetrachter"
|
msgstr "Fotobetrachter"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Vorheriges / nächstes Foto"
|
msgstr "Vorheriges / nächstes Foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Erstes / letztes Foto"
|
msgstr "Erstes / letztes Foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Details anzeigen"
|
msgstr "Details anzeigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Vollbild"
|
msgstr "Vollbild"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Schließen"
|
msgstr "Schließen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Zum Umbenennen genau ein Element auswählen"
|
msgstr "Zum Umbenennen genau ein Element auswählen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Nicht verbunden"
|
msgstr "Nicht verbunden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "Der Proton-Drive-Dienst läuft nicht."
|
msgstr "Der Proton-Drive-Dienst läuft nicht."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Verbindung wird hergestellt …"
|
msgstr "Verbindung wird hergestellt …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "Warten auf den Start des Proton-Drive-Dienstes."
|
msgstr "Warten auf den Start des Proton-Drive-Dienstes."
|
||||||
|
|
||||||
@@ -1287,7 +1288,7 @@ msgstr "Alben konnten nicht geladen werden"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1555,7 +1556,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Offline verfügbar machen"
|
msgstr "Offline verfügbar machen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Nur online verfügbar machen"
|
msgstr "Nur online verfügbar machen"
|
||||||
|
|
||||||
@@ -2724,7 +2725,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Synchronisierung bis zur Fortsetzung pausiert"
|
msgstr "Synchronisierung bis zur Fortsetzung pausiert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Synchronisierung pausiert"
|
msgstr "Synchronisierung pausiert"
|
||||||
|
|
||||||
@@ -3200,25 +3201,25 @@ msgstr "E-Mail-Adresse und Passwort eingeben."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Anmeldung läuft …"
|
msgstr "Anmeldung läuft …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Zum Fortfahren die Überprüfung abschließen …"
|
msgstr "Zum Fortfahren die Überprüfung abschließen …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "Anmeldung abgebrochen"
|
msgstr "Anmeldung abgebrochen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr "Zu viele Anmeldeversuche. Einige Minuten warten und erneut versuchen."
|
msgstr "Zu viele Anmeldeversuche. Einige Minuten warten und erneut versuchen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Proton ist nicht erreichbar. Bitte die Internetverbindung prüfen und erneut "
|
"Proton ist nicht erreichbar. Bitte die Internetverbindung prüfen und erneut "
|
||||||
"versuchen."
|
"versuchen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3227,11 +3228,19 @@ msgstr ""
|
|||||||
"gespeichert werden. Bitte sicherstellen, dass ein Schlüsselbund (GNOME "
|
"gespeichert werden. Bitte sicherstellen, dass ein Schlüsselbund (GNOME "
|
||||||
"Keyring oder KWallet) läuft und entsperrt ist."
|
"Keyring oder KWallet) läuft und entsperrt ist."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr "Anmeldung abgebrochen: Es wurde kein Zwei-Faktor-Code eingegeben."
|
msgstr "Anmeldung abgebrochen: Es wurde kein Zwei-Faktor-Code eingegeben."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Anmeldung abgebrochen: Es wurde kein Postfach-Passwort eingegeben."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "Das Postfach-Passwort hat Ihr Konto nicht entsperrt."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3240,35 +3249,79 @@ msgstr ""
|
|||||||
"neue Überprüfung erneut anmelden."
|
"neue Überprüfung erneut anmelden."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Anmeldung fehlgeschlagen: {error}"
|
msgstr "Anmeldung fehlgeschlagen: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "Das Postfach-Passwort hat Ihr Konto nicht entsperrt. Versuchen Sie es erneut."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "Dieses Konto hat ein separates Postfach-Passwort. Geben Sie es ein, um Ihre Dateien zu entsperren."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Postfach-Passwort"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Postfach-Passwort"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Auf diesem Computer entsperrt lassen"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Speichert die Entsperrung im System-Schlüsselbund, sodass sich Proton Drive nach jeder Anmeldung ohne Nachfrage öffnet. Andernfalls geben Sie das Passwort einmal pro Sitzung ein."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Entsperren"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive ist gesperrt. Geben Sie Ihr Postfach-Passwort ein, um es zu entsperren."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Entsperrt."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Entsperren fehlgeschlagen"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Zwei-Faktor-Authentifizierung"
|
msgstr "Zwei-Faktor-Authentifizierung"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Den Code aus der Authentifizierungs-App oder einen der "
|
"Den Code aus der Authentifizierungs-App oder einen der "
|
||||||
"Wiederherstellungscodes eingeben."
|
"Wiederherstellungscodes eingeben."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Authentifizierungscode"
|
msgstr "Authentifizierungscode"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Bestätigen"
|
msgstr "Bestätigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Abmelden?"
|
msgstr "Abmelden?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3277,7 +3330,7 @@ msgstr ""
|
|||||||
"nächsten Anmeldung. Dateien, die sich bereits auf diesem Computer befinden, "
|
"nächsten Anmeldung. Dateien, die sich bereits auf diesem Computer befinden, "
|
||||||
"bleiben, wo sie sind."
|
"bleiben, wo sie sind."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Abmelden"
|
msgstr "Abmelden"
|
||||||
|
|
||||||
@@ -4645,40 +4698,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Jetzt neu starten"
|
msgstr "Jetzt neu starten"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} belegt"
|
msgstr "{size} belegt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} von {total} belegt ({percent} %)"
|
msgstr "{used} von {total} belegt ({percent} %)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive verbunden"
|
msgstr "Proton Drive verbunden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Deine Dateien sind verfügbar."
|
msgstr "Deine Dateien sind verfügbar."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Proton Drive getrennt"
|
msgstr "Proton Drive getrennt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Der Proton-Drive-Dienst wurde beendet. Dateien sind erst nach seinem "
|
"Der Proton-Drive-Dienst wurde beendet. Dateien sind erst nach seinem "
|
||||||
"Neustart wieder verfügbar."
|
"Neustart wieder verfügbar."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Synchronisierung abgeschlossen"
|
msgstr "Synchronisierung abgeschlossen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4687,27 +4740,27 @@ msgstr[1] "Übertragung von {n} Dateien abgeschlossen."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title} – {done} von {total}"
|
msgstr "{title} – {done} von {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title} – {detail} ({done} von {total})"
|
msgstr "{title} – {detail} ({done} von {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title} …"
|
msgstr "{title} …"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title} – {detail} …"
|
msgstr "{title} – {detail} …"
|
||||||
@@ -4715,7 +4768,7 @@ msgstr "{title} – {detail} …"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} – {done} ({speed}/s)"
|
msgstr "{arrow} {name} – {done} ({speed}/s)"
|
||||||
@@ -4723,118 +4776,118 @@ msgstr "{arrow} {name} – {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} – {done} von {total} ({speed}/s)"
|
msgstr "{arrow} {name} – {done} von {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} zwischengespeichert – keine Grenze festgelegt"
|
msgstr "{used} zwischengespeichert – keine Grenze festgelegt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} von {limit} belegt"
|
msgstr "{used} von {limit} belegt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · wird {time} fortgesetzt"
|
msgstr "{queued} · wird {time} fortgesetzt"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Wird {time} fortgesetzt"
|
msgstr "Wird {time} fortgesetzt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Bis zur manuellen Fortsetzung"
|
msgstr "Bis zur manuellen Fortsetzung"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} Änderung erfordert Aufmerksamkeit"
|
msgstr[0] "{n} Änderung erfordert Aufmerksamkeit"
|
||||||
msgstr[1] "{n} Änderungen erfordern Aufmerksamkeit"
|
msgstr[1] "{n} Änderungen erfordern Aufmerksamkeit"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Nur zwischengespeicherte Dateien"
|
msgstr "Nur zwischengespeicherte Dateien"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Wird synchronisiert"
|
msgstr "Wird synchronisiert"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Auf dem neuesten Stand"
|
msgstr "Auf dem neuesten Stand"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive läuft nicht"
|
msgstr "Proton Drive läuft nicht"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Reagiert nicht"
|
msgstr "Reagiert nicht"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive braucht zu lange für eine Antwort"
|
msgstr "Proton Drive braucht zu lange für eine Antwort"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "später"
|
msgstr "später"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "um %H:%M"
|
msgstr "um %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "am %a um %H:%M"
|
msgstr "am %a um %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "am %-d. %b"
|
msgstr "am %-d. %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "Keine offline verfügbaren Dateien"
|
msgstr "Keine offline verfügbaren Dateien"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Mit einem Rechtsklick auf eine Datei „Offline verfügbar machen“ auswählen."
|
"Mit einem Rechtsklick auf eine Datei „Offline verfügbar machen“ auswählen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Konnte nicht auf „nur online“ umgestellt werden"
|
msgstr "Konnte nicht auf „nur online“ umgestellt werden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Weniger anzeigen"
|
msgstr "Weniger anzeigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5898,40 +5951,45 @@ msgstr[1] "↑ {n} werden hochgeladen"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive reagiert nicht"
|
msgstr "Proton Drive reagiert nicht"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Angemeldet als {username} – gesperrt"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Angemeldet als {username} – nicht verbunden"
|
msgstr "Angemeldet als {username} – nicht verbunden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Nicht angemeldet"
|
msgstr "Nicht angemeldet"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Fehler: {error}"
|
msgstr "Fehler: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive hat unerwartet geantwortet"
|
msgstr "Proton Drive hat unerwartet geantwortet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "Aktuell in {mountpoint} ({n} angeheftet)"
|
msgstr[0] "Aktuell in {mountpoint} ({n} angeheftet)"
|
||||||
msgstr[1] "Aktuell in {mountpoint} ({n} angeheftet)"
|
msgstr[1] "Aktuell in {mountpoint} ({n} angeheftet)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Wird synchronisiert – {queued} ({n} angeheftet)"
|
msgstr[0] "Wird synchronisiert – {queued} ({n} angeheftet)"
|
||||||
msgstr[1] "Wird synchronisiert – {queued} ({n} angeheftet)"
|
msgstr[1] "Wird synchronisiert – {queued} ({n} angeheftet)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5939,52 +5997,52 @@ msgstr[0] "Offline – nur zwischengespeicherte Dateien ({n} angeheftet)"
|
|||||||
msgstr[1] "Offline – nur zwischengespeicherte Dateien ({n} angeheftet)"
|
msgstr[1] "Offline – nur zwischengespeicherte Dateien ({n} angeheftet)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Offline – {queued}"
|
msgstr "Offline – {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} Problem – Anzeigen"
|
msgstr[0] "{n} Problem – Anzeigen"
|
||||||
msgstr[1] "{n} Probleme – Anzeigen"
|
msgstr[1] "{n} Probleme – Anzeigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Anmelden …"
|
msgstr "Anmelden …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Proton Drive öffnen"
|
msgstr "Proton Drive öffnen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Ordner öffnen"
|
msgstr "Ordner öffnen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Synchronisierung fortsetzen"
|
msgstr "Synchronisierung fortsetzen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Synchronisierung pausieren"
|
msgstr "Synchronisierung pausieren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Verbinden"
|
msgstr "Verbinden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Symbol im Benachrichtigungsfeld ausblenden"
|
msgstr "Symbol im Benachrichtigungsfeld ausblenden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Proton Drive beenden …"
|
msgstr "Proton Drive beenden …"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Beenden"
|
msgstr "Beenden"
|
||||||
|
|
||||||
|
|||||||
+198
-140
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A %-d %B %Y, %H:%M"
|
msgstr "%A %-d %B %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A %-d %B %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "My files"
|
msgstr "My files"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Photos"
|
msgstr "Photos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Shared with me"
|
msgstr "Shared with me"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Shared by me"
|
msgstr "Shared by me"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computers"
|
msgstr "Computers"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Trash"
|
msgstr "Trash"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Sync"
|
msgstr "Sync"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "You're offline"
|
msgstr "You're offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "That's not there any more"
|
msgstr "That's not there any more"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "You don't have access to that"
|
msgstr "You don't have access to that"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Something changed this first"
|
msgstr "Something changed this first"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Your Proton Drive is full"
|
msgstr "Your Proton Drive is full"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Preferences"
|
msgstr "Preferences"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Keyboard Shortcuts"
|
msgstr "Keyboard Shortcuts"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "About Proton Drive for Linux"
|
msgstr "About Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Main menu"
|
msgstr "Main menu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -166,23 +166,23 @@ msgstr ""
|
|||||||
"Unofficial client — not affiliated with, endorsed by, or supported by Proton "
|
"Unofficial client — not affiliated with, endorsed by, or supported by Proton "
|
||||||
"AG."
|
"AG."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Source Code"
|
msgstr "Source Code"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Proton Terms of Service"
|
msgstr "Proton Terms of Service"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Proton Privacy Policy"
|
msgstr "Proton Privacy Policy"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Disclaimer"
|
msgstr "Disclaimer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -204,7 +204,7 @@ msgstr ""
|
|||||||
"This software is provided “as is”, without warranty of any kind. Keep a copy "
|
"This software is provided “as is”, without warranty of any kind. Keep a copy "
|
||||||
"of any data you cannot afford to lose."
|
"of any data you cannot afford to lose."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -214,7 +214,7 @@ msgstr ""
|
|||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -224,7 +224,7 @@ msgstr ""
|
|||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
"public domain."
|
"public domain."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -240,15 +240,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Proton Drive for Linux contributors"
|
msgstr "Proton Drive for Linux contributors"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Stop Proton Drive?"
|
msgstr "Stop Proton Drive?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -256,7 +256,7 @@ msgstr ""
|
|||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -271,7 +271,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -286,30 +287,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancel"
|
msgstr "Cancel"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Stop"
|
msgstr "Stop"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Couldn't stop Proton Drive"
|
msgstr "Couldn't stop Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "The Proton Drive service did not stop."
|
msgstr "The Proton Drive service did not stop."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "General"
|
msgstr "General"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Search Drive"
|
msgstr "Search Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -318,38 +319,38 @@ msgstr "Search Drive"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Refresh"
|
msgstr "Refresh"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Keyboard shortcuts"
|
msgstr "Keyboard shortcuts"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Files"
|
msgstr "Files"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "New folder"
|
msgstr "New folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Upload files"
|
msgstr "Upload files"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Back / forward"
|
msgstr "Back / forward"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Parent folder"
|
msgstr "Parent folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Grid / list"
|
msgstr "Grid / list"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -358,7 +359,7 @@ msgstr "Grid / list"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Rename"
|
msgstr "Rename"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -368,73 +369,73 @@ msgstr "Rename"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Move to Trash"
|
msgstr "Move to Trash"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Clear the selection"
|
msgstr "Clear the selection"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Larger thumbnails"
|
msgstr "Larger thumbnails"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Smaller thumbnails"
|
msgstr "Smaller thumbnails"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Reset thumbnail size"
|
msgstr "Reset thumbnail size"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Select all"
|
msgstr "Select all"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Photo Viewer"
|
msgstr "Photo Viewer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Previous / next photo"
|
msgstr "Previous / next photo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "First / last photo"
|
msgstr "First / last photo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Show details"
|
msgstr "Show details"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Fullscreen"
|
msgstr "Fullscreen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Close"
|
msgstr "Close"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Select a single item to rename it"
|
msgstr "Select a single item to rename it"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Not connected"
|
msgstr "Not connected"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "The Proton Drive service isn't running."
|
msgstr "The Proton Drive service isn't running."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Connecting…"
|
msgstr "Connecting…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "Waiting for the Proton Drive service to start."
|
msgstr "Waiting for the Proton Drive service to start."
|
||||||
|
|
||||||
@@ -1275,7 +1276,7 @@ msgstr "Couldn't load albums"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1543,7 +1544,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Make available offline"
|
msgstr "Make available offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Make online only"
|
msgstr "Make online only"
|
||||||
|
|
||||||
@@ -2686,7 +2687,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Sync paused until you resume"
|
msgstr "Sync paused until you resume"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Sync paused"
|
msgstr "Sync paused"
|
||||||
|
|
||||||
@@ -3149,23 +3150,23 @@ msgstr "Enter your email and password."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Signing in…"
|
msgstr "Signing in…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Complete the verification to continue…"
|
msgstr "Complete the verification to continue…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "login cancelled"
|
msgstr "login cancelled"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr "Too many sign-in attempts. Wait a few minutes and try again."
|
msgstr "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr "Couldn't reach Proton. Check your internet connection and try again."
|
msgstr "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3173,11 +3174,19 @@ msgstr ""
|
|||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr "Sign-in cancelled: no two-factor code was entered."
|
msgstr "Sign-in cancelled: no two-factor code was entered."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "That mailbox password didn't unlock your account."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3186,34 +3195,78 @@ msgstr ""
|
|||||||
"new one."
|
"new one."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Sign-in failed: {error}"
|
msgstr "Sign-in failed: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "That mailbox password didn't unlock your account. Try again."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Mailbox Password"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Mailbox password"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Keep unlocked on this computer"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Stores the unlock in the system keyring, so Proton Drive opens without asking after every login. Otherwise you enter the password once per session."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Unlock"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Unlocked."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Couldn't unlock"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Two-Factor Authentication"
|
msgstr "Two-Factor Authentication"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Authentication code"
|
msgstr "Authentication code"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Confirm"
|
msgstr "Confirm"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Sign Out?"
|
msgstr "Sign Out?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3221,7 +3274,7 @@ msgstr ""
|
|||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Sign Out"
|
msgstr "Sign Out"
|
||||||
|
|
||||||
@@ -4556,39 +4609,39 @@ msgid "Restart Now"
|
|||||||
msgstr "Restart Now"
|
msgstr "Restart Now"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} used"
|
msgstr "{size} used"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} of {total} used ({percent}%)"
|
msgstr "{used} of {total} used ({percent}%)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive connected"
|
msgstr "Proton Drive connected"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Your files are available."
|
msgstr "Your files are available."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Proton Drive disconnected"
|
msgstr "Proton Drive disconnected"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Sync complete"
|
msgstr "Sync complete"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4597,27 +4650,27 @@ msgstr[1] "{n} files finished transferring."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title} — {done} of {total}"
|
msgstr "{title} — {done} of {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title} — {detail} ({done} of {total})"
|
msgstr "{title} — {detail} ({done} of {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title} — {detail}…"
|
msgstr "{title} — {detail}…"
|
||||||
@@ -4625,7 +4678,7 @@ msgstr "{title} — {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
||||||
@@ -4633,117 +4686,117 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} cached — no limit set"
|
msgstr "{used} cached — no limit set"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} of {limit} used"
|
msgstr "{used} of {limit} used"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · resumes {time}"
|
msgstr "{queued} · resumes {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Resumes {time}"
|
msgstr "Resumes {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Until you resume"
|
msgstr "Until you resume"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} change needs attention"
|
msgstr[0] "{n} change needs attention"
|
||||||
msgstr[1] "{n} changes need attention"
|
msgstr[1] "{n} changes need attention"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Cached files only"
|
msgstr "Cached files only"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Syncing"
|
msgstr "Syncing"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Up to date"
|
msgstr "Up to date"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive isn't running"
|
msgstr "Proton Drive isn't running"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Not responding"
|
msgstr "Not responding"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive is taking too long to answer"
|
msgstr "Proton Drive is taking too long to answer"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "later"
|
msgstr "later"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "at %H:%M"
|
msgstr "at %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "%e %b"
|
msgstr "%e %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "No files kept offline"
|
msgstr "No files kept offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr "Right-click a file and choose “Make available offline”."
|
msgstr "Right-click a file and choose “Make available offline”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Couldn't make it online only"
|
msgstr "Couldn't make it online only"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Show fewer"
|
msgstr "Show fewer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5788,40 +5841,45 @@ msgstr[1] "↑ {n} uploading"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive isn't responding"
|
msgstr "Proton Drive isn't responding"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Signed in as {username} — locked"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Signed in as {username} — not connected"
|
msgstr "Signed in as {username} — not connected"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Not signed in"
|
msgstr "Not signed in"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Error: {error}"
|
msgstr "Error: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive sent an unexpected reply"
|
msgstr "Proton Drive sent an unexpected reply"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "Up to date in {mountpoint} ({n} pinned)"
|
msgstr[0] "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[1] "Up to date in {mountpoint} ({n} pinned)"
|
msgstr[1] "Up to date in {mountpoint} ({n} pinned)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Syncing — {queued} ({n} pinned)"
|
msgstr[0] "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[1] "Syncing — {queued} ({n} pinned)"
|
msgstr[1] "Syncing — {queued} ({n} pinned)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5829,52 +5887,52 @@ msgstr[0] "Offline — cached files only ({n} pinned)"
|
|||||||
msgstr[1] "Offline — cached files only ({n} pinned)"
|
msgstr[1] "Offline — cached files only ({n} pinned)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Offline — {queued}"
|
msgstr "Offline — {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} issue — View"
|
msgstr[0] "{n} issue — View"
|
||||||
msgstr[1] "{n} issues — View"
|
msgstr[1] "{n} issues — View"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Sign In…"
|
msgstr "Sign In…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Open Proton Drive"
|
msgstr "Open Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Open Folder"
|
msgstr "Open Folder"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Resume Sync"
|
msgstr "Resume Sync"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Pause Sync"
|
msgstr "Pause Sync"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Connect"
|
msgstr "Connect"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Hide Tray Icon"
|
msgstr "Hide Tray Icon"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Stop Proton Drive…"
|
msgstr "Stop Proton Drive…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Quit"
|
msgstr "Quit"
|
||||||
|
|
||||||
|
|||||||
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A, %-d de %B de %Y, %H:%M"
|
msgstr "%A, %-d de %B de %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "Mis archivos"
|
msgstr "Mis archivos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Fotos"
|
msgstr "Fotos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Compartido conmigo"
|
msgstr "Compartido conmigo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Compartido por mí"
|
msgstr "Compartido por mí"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Equipos"
|
msgstr "Equipos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Papelera"
|
msgstr "Papelera"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Sincronización"
|
msgstr "Sincronización"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Está sin conexión"
|
msgstr "Está sin conexión"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Eso ya no existe"
|
msgstr "Eso ya no existe"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "No tiene acceso a eso"
|
msgstr "No tiene acceso a eso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Algo lo cambió antes"
|
msgstr "Algo lo cambió antes"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Su Proton Drive está lleno"
|
msgstr "Su Proton Drive está lleno"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Preferencias"
|
msgstr "Preferencias"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Atajos del teclado"
|
msgstr "Atajos del teclado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "Acerca de Proton Drive for Linux"
|
msgstr "Acerca de Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Menú principal"
|
msgstr "Menú principal"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -166,23 +166,23 @@ msgstr ""
|
|||||||
"Cliente no oficial: no está afiliado a Proton AG, ni respaldado ni mantenido "
|
"Cliente no oficial: no está afiliado a Proton AG, ni respaldado ni mantenido "
|
||||||
"por esta."
|
"por esta."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Código fuente"
|
msgstr "Código fuente"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Condiciones del servicio de Proton"
|
msgstr "Condiciones del servicio de Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Política de privacidad de Proton"
|
msgstr "Política de privacidad de Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Aviso legal"
|
msgstr "Aviso legal"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -205,7 +205,7 @@ msgstr ""
|
|||||||
"Este software se proporciona “tal cual”, sin garantía de ningún tipo. Guarde "
|
"Este software se proporciona “tal cual”, sin garantía de ningún tipo. Guarde "
|
||||||
"una copia de los datos que no pueda permitirse perder."
|
"una copia de los datos que no pueda permitirse perder."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -215,7 +215,7 @@ msgstr ""
|
|||||||
"www.geonames.org/\">GeoNames</a>, con licencia <a href=\"https://"
|
"www.geonames.org/\">GeoNames</a>, con licencia <a href=\"https://"
|
||||||
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -225,7 +225,7 @@ msgstr ""
|
|||||||
"fronteras de países de <a href=\"https://www.naturalearthdata.com/\">Natural "
|
"fronteras de países de <a href=\"https://www.naturalearthdata.com/\">Natural "
|
||||||
"Earth</a>, que son de dominio público."
|
"Earth</a>, que son de dominio público."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -241,15 +241,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Colaboradores de Proton Drive for Linux"
|
msgstr "Colaboradores de Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "¿Detener Proton Drive?"
|
msgstr "¿Detener Proton Drive?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -258,7 +258,7 @@ msgstr ""
|
|||||||
"a conectarse. Proton Drive se iniciará de nuevo en su próximo inicio de "
|
"a conectarse. Proton Drive se iniciará de nuevo en su próximo inicio de "
|
||||||
"sesión."
|
"sesión."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -273,7 +273,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -288,30 +289,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Detener"
|
msgstr "Detener"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "No se pudo detener Proton Drive"
|
msgstr "No se pudo detener Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "El servicio de Proton Drive no se detuvo."
|
msgstr "El servicio de Proton Drive no se detuvo."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "General"
|
msgstr "General"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Buscar en Drive"
|
msgstr "Buscar en Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -320,38 +321,38 @@ msgstr "Buscar en Drive"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Actualizar"
|
msgstr "Actualizar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Atajos del teclado"
|
msgstr "Atajos del teclado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Archivos"
|
msgstr "Archivos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Carpeta nueva"
|
msgstr "Carpeta nueva"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Subir archivos"
|
msgstr "Subir archivos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Atrás / adelante"
|
msgstr "Atrás / adelante"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Carpeta superior"
|
msgstr "Carpeta superior"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Cuadrícula / lista"
|
msgstr "Cuadrícula / lista"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -360,7 +361,7 @@ msgstr "Cuadrícula / lista"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Renombrar"
|
msgstr "Renombrar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -370,73 +371,73 @@ msgstr "Renombrar"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Mover a la papelera"
|
msgstr "Mover a la papelera"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Anular la selección"
|
msgstr "Anular la selección"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Miniaturas más grandes"
|
msgstr "Miniaturas más grandes"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Miniaturas más pequeñas"
|
msgstr "Miniaturas más pequeñas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Restablecer el tamaño de las miniaturas"
|
msgstr "Restablecer el tamaño de las miniaturas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Seleccionar todo"
|
msgstr "Seleccionar todo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Visor de fotos"
|
msgstr "Visor de fotos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Foto anterior / siguiente"
|
msgstr "Foto anterior / siguiente"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Primera / última foto"
|
msgstr "Primera / última foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Mostrar detalles"
|
msgstr "Mostrar detalles"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Pantalla completa"
|
msgstr "Pantalla completa"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Cerrar"
|
msgstr "Cerrar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Seleccione un único elemento para renombrarlo"
|
msgstr "Seleccione un único elemento para renombrarlo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Sin conexión"
|
msgstr "Sin conexión"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "El servicio de Proton Drive no está en ejecución."
|
msgstr "El servicio de Proton Drive no está en ejecución."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Conectando…"
|
msgstr "Conectando…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "Esperando a que se inicie el servicio de Proton Drive."
|
msgstr "Esperando a que se inicie el servicio de Proton Drive."
|
||||||
|
|
||||||
@@ -1281,7 +1282,7 @@ msgstr "No se pudieron cargar los álbumes"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1549,7 +1550,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Hacer disponible sin conexión"
|
msgstr "Hacer disponible sin conexión"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Hacer solo en línea"
|
msgstr "Hacer solo en línea"
|
||||||
|
|
||||||
@@ -2707,7 +2708,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Sincronización en pausa hasta que la reanude"
|
msgstr "Sincronización en pausa hasta que la reanude"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Sincronización en pausa"
|
msgstr "Sincronización en pausa"
|
||||||
|
|
||||||
@@ -3174,27 +3175,27 @@ msgstr "Introduzca su correo electrónico y su contraseña."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Iniciando sesión…"
|
msgstr "Iniciando sesión…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Complete la verificación para continuar…"
|
msgstr "Complete la verificación para continuar…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "inicio de sesión cancelado"
|
msgstr "inicio de sesión cancelado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Demasiados intentos de inicio de sesión. Espere unos minutos e inténtelo de "
|
"Demasiados intentos de inicio de sesión. Espere unos minutos e inténtelo de "
|
||||||
"nuevo."
|
"nuevo."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se pudo contactar con Proton. Compruebe su conexión a Internet e "
|
"No se pudo contactar con Proton. Compruebe su conexión a Internet e "
|
||||||
"inténtelo de nuevo."
|
"inténtelo de nuevo."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3203,12 +3204,20 @@ msgstr ""
|
|||||||
"sistema. Asegúrese de que un depósito de claves (GNOME Keyring o KWallet) "
|
"sistema. Asegúrese de que un depósito de claves (GNOME Keyring o KWallet) "
|
||||||
"esté en ejecución y desbloqueado."
|
"esté en ejecución y desbloqueado."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Inicio de sesión cancelado: no se introdujo ningún código de dos factores."
|
"Inicio de sesión cancelado: no se introdujo ningún código de dos factores."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Inicio de sesión cancelado: no se introdujo la contraseña del buzón."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "Esa contraseña del buzón no desbloqueó tu cuenta."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3217,35 +3226,79 @@ msgstr ""
|
|||||||
"sesión para obtener una nueva."
|
"sesión para obtener una nueva."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Falló el inicio de sesión: {error}"
|
msgstr "Falló el inicio de sesión: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "Esa contraseña del buzón no desbloqueó tu cuenta. Inténtalo de nuevo."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "Esta cuenta tiene una contraseña del buzón independiente. Introdúcela para desbloquear tus archivos."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Contraseña del buzón"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Contraseña del buzón"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Mantener desbloqueado en este equipo"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Guarda el desbloqueo en el llavero del sistema, para que Proton Drive se abra sin preguntar después de cada inicio de sesión. De lo contrario, introduces la contraseña una vez por sesión."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Desbloquear"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive está bloqueado. Introduce la contraseña del buzón para desbloquearlo."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Desbloqueado."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "No se pudo desbloquear"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Autenticación en dos pasos"
|
msgstr "Autenticación en dos pasos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Introduzca el código de su aplicación de autenticación o uno de sus códigos "
|
"Introduzca el código de su aplicación de autenticación o uno de sus códigos "
|
||||||
"de recuperación."
|
"de recuperación."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Código de autenticación"
|
msgstr "Código de autenticación"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Confirmar"
|
msgstr "Confirmar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "¿Cerrar la sesión?"
|
msgstr "¿Cerrar la sesión?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3254,7 +3307,7 @@ msgstr ""
|
|||||||
"iniciar sesión. Los archivos que ya están en este equipo se quedan donde "
|
"iniciar sesión. Los archivos que ya están en este equipo se quedan donde "
|
||||||
"están."
|
"están."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Cerrar la sesión"
|
msgstr "Cerrar la sesión"
|
||||||
|
|
||||||
@@ -4606,40 +4659,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Reiniciar ahora"
|
msgstr "Reiniciar ahora"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} usados"
|
msgstr "{size} usados"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} de {total} usados ({percent}%)"
|
msgstr "{used} de {total} usados ({percent}%)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive conectado"
|
msgstr "Proton Drive conectado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Sus archivos están disponibles."
|
msgstr "Sus archivos están disponibles."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Proton Drive desconectado"
|
msgstr "Proton Drive desconectado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El servicio de Proton Drive se detuvo. Los archivos no estarán disponibles "
|
"El servicio de Proton Drive se detuvo. Los archivos no estarán disponibles "
|
||||||
"hasta que se reinicie."
|
"hasta que se reinicie."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Sincronización completada"
|
msgstr "Sincronización completada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4648,27 +4701,27 @@ msgstr[1] "{n} archivos terminaron de transferirse."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title}: {done} de {total}"
|
msgstr "{title}: {done} de {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title}: {detail} ({done} de {total})"
|
msgstr "{title}: {detail} ({done} de {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title}: {detail}…"
|
msgstr "{title}: {detail}…"
|
||||||
@@ -4676,7 +4729,7 @@ msgstr "{title}: {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name}: {done} ({speed}/s)"
|
msgstr "{arrow} {name}: {done} ({speed}/s)"
|
||||||
@@ -4684,119 +4737,119 @@ msgstr "{arrow} {name}: {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name}: {done} de {total} ({speed}/s)"
|
msgstr "{arrow} {name}: {done} de {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} en caché — sin límite"
|
msgstr "{used} en caché — sin límite"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} de {limit} usados"
|
msgstr "{used} de {limit} usados"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · se reanuda {time}"
|
msgstr "{queued} · se reanuda {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Se reanuda {time}"
|
msgstr "Se reanuda {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Hasta que la reanude"
|
msgstr "Hasta que la reanude"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} cambio requiere atención"
|
msgstr[0] "{n} cambio requiere atención"
|
||||||
msgstr[1] "{n} cambios requieren atención"
|
msgstr[1] "{n} cambios requieren atención"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Sin conexión"
|
msgstr "Sin conexión"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Solo archivos en caché"
|
msgstr "Solo archivos en caché"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Sincronizando"
|
msgstr "Sincronizando"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Actualizado"
|
msgstr "Actualizado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive no está en ejecución"
|
msgstr "Proton Drive no está en ejecución"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "No responde"
|
msgstr "No responde"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive está tardando demasiado en responder"
|
msgstr "Proton Drive está tardando demasiado en responder"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "más tarde"
|
msgstr "más tarde"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "a las %H:%M"
|
msgstr "a las %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "%-d %b"
|
msgstr "%-d %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "No hay archivos disponibles sin conexión"
|
msgstr "No hay archivos disponibles sin conexión"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pulse con el botón derecho en un archivo y elija “Hacer disponible sin "
|
"Pulse con el botón derecho en un archivo y elija “Hacer disponible sin "
|
||||||
"conexión”."
|
"conexión”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "No se pudo hacer solo en línea"
|
msgstr "No se pudo hacer solo en línea"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Mostrar menos"
|
msgstr "Mostrar menos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5858,40 +5911,45 @@ msgstr[1] "↑ {n} subiendo"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive no responde"
|
msgstr "Proton Drive no responde"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Sesión iniciada como {username} — bloqueado"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Sesión iniciada como {username} — sin conexión"
|
msgstr "Sesión iniciada como {username} — sin conexión"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Sesión no iniciada"
|
msgstr "Sesión no iniciada"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Error: {error}"
|
msgstr "Error: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive envió una respuesta inesperada"
|
msgstr "Proton Drive envió una respuesta inesperada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "Actualizado en {mountpoint} ({n} fijado)"
|
msgstr[0] "Actualizado en {mountpoint} ({n} fijado)"
|
||||||
msgstr[1] "Actualizado en {mountpoint} ({n} fijados)"
|
msgstr[1] "Actualizado en {mountpoint} ({n} fijados)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Sincronizando: {queued} ({n} anclado)"
|
msgstr[0] "Sincronizando: {queued} ({n} anclado)"
|
||||||
msgstr[1] "Sincronizando: {queued} ({n} anclados)"
|
msgstr[1] "Sincronizando: {queued} ({n} anclados)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5899,52 +5957,52 @@ msgstr[0] "Sin conexión: solo archivos en caché ({n} anclado)"
|
|||||||
msgstr[1] "Sin conexión: solo archivos en caché ({n} anclados)"
|
msgstr[1] "Sin conexión: solo archivos en caché ({n} anclados)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Sin conexión: {queued}"
|
msgstr "Sin conexión: {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} problema: ver"
|
msgstr[0] "{n} problema: ver"
|
||||||
msgstr[1] "{n} problemas: ver"
|
msgstr[1] "{n} problemas: ver"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Iniciar sesión…"
|
msgstr "Iniciar sesión…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Abrir Proton Drive"
|
msgstr "Abrir Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Abrir carpeta"
|
msgstr "Abrir carpeta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Reanudar la sincronización"
|
msgstr "Reanudar la sincronización"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Pausar la sincronización"
|
msgstr "Pausar la sincronización"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Conectar"
|
msgstr "Conectar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Ocultar el icono de la bandeja"
|
msgstr "Ocultar el icono de la bandeja"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Detener Proton Drive…"
|
msgstr "Detener Proton Drive…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Salir"
|
msgstr "Salir"
|
||||||
|
|
||||||
|
|||||||
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A %-d %B %Y à %H:%M"
|
msgstr "%A %-d %B %Y à %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A %-d %B %Y à %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "Mes fichiers"
|
msgstr "Mes fichiers"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Photos"
|
msgstr "Photos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Partagés avec moi"
|
msgstr "Partagés avec moi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Partagés par moi"
|
msgstr "Partagés par moi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Ordinateurs"
|
msgstr "Ordinateurs"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Corbeille"
|
msgstr "Corbeille"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Synchronisation"
|
msgstr "Synchronisation"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what} : {detail}"
|
msgstr "{what} : {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Vous êtes hors ligne"
|
msgstr "Vous êtes hors ligne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Cet élément n’existe plus"
|
msgstr "Cet élément n’existe plus"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "Vous n’avez pas accès à cet élément"
|
msgstr "Vous n’avez pas accès à cet élément"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Quelque chose l’a modifié entre-temps"
|
msgstr "Quelque chose l’a modifié entre-temps"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Votre Proton Drive est plein"
|
msgstr "Votre Proton Drive est plein"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Préférences"
|
msgstr "Préférences"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Raccourcis clavier"
|
msgstr "Raccourcis clavier"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "À propos de Proton Drive for Linux"
|
msgstr "À propos de Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Menu principal"
|
msgstr "Menu principal"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -166,23 +166,23 @@ msgstr ""
|
|||||||
"Client non officiel — non affilié à Proton AG, ni approuvé ni pris en charge "
|
"Client non officiel — non affilié à Proton AG, ni approuvé ni pris en charge "
|
||||||
"par Proton AG."
|
"par Proton AG."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Code source"
|
msgstr "Code source"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Conditions d’utilisation de Proton"
|
msgstr "Conditions d’utilisation de Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Politique de confidentialité de Proton"
|
msgstr "Politique de confidentialité de Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Avertissement"
|
msgstr "Avertissement"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -206,7 +206,7 @@ msgstr ""
|
|||||||
"une copie de toutes les données que vous ne pouvez pas vous permettre de "
|
"une copie de toutes les données que vous ne pouvez pas vous permettre de "
|
||||||
"perdre."
|
"perdre."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -216,7 +216,7 @@ msgstr ""
|
|||||||
"www.geonames.org/\">GeoNames</a>, sous licence <a href=\"https://"
|
"www.geonames.org/\">GeoNames</a>, sous licence <a href=\"https://"
|
||||||
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -226,7 +226,7 @@ msgstr ""
|
|||||||
"frontières des pays de <a href=\"https://www.naturalearthdata.com/\">Natural "
|
"frontières des pays de <a href=\"https://www.naturalearthdata.com/\">Natural "
|
||||||
"Earth</a>, qui sont dans le domaine public."
|
"Earth</a>, qui sont dans le domaine public."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -243,15 +243,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Les contributeurs de Proton Drive for Linux"
|
msgstr "Les contributeurs de Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Arrêter Proton Drive ?"
|
msgstr "Arrêter Proton Drive ?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -260,7 +260,7 @@ msgstr ""
|
|||||||
"vous reconnectez pas. Proton Drive redémarrera à votre prochaine ouverture "
|
"vous reconnectez pas. Proton Drive redémarrera à votre prochaine ouverture "
|
||||||
"de session."
|
"de session."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -275,7 +275,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -290,30 +291,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuler"
|
msgstr "Annuler"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Arrêter"
|
msgstr "Arrêter"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Impossible d’arrêter Proton Drive"
|
msgstr "Impossible d’arrêter Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "Le service Proton Drive ne s’est pas arrêté."
|
msgstr "Le service Proton Drive ne s’est pas arrêté."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Général"
|
msgstr "Général"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Rechercher dans Drive"
|
msgstr "Rechercher dans Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -322,38 +323,38 @@ msgstr "Rechercher dans Drive"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Actualiser"
|
msgstr "Actualiser"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Raccourcis clavier"
|
msgstr "Raccourcis clavier"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Fichiers"
|
msgstr "Fichiers"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Nouveau dossier"
|
msgstr "Nouveau dossier"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Téléverser des fichiers"
|
msgstr "Téléverser des fichiers"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Précédent / suivant"
|
msgstr "Précédent / suivant"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Dossier parent"
|
msgstr "Dossier parent"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Grille / liste"
|
msgstr "Grille / liste"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -362,7 +363,7 @@ msgstr "Grille / liste"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Renommer"
|
msgstr "Renommer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -372,73 +373,73 @@ msgstr "Renommer"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Mettre à la corbeille"
|
msgstr "Mettre à la corbeille"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Effacer la sélection"
|
msgstr "Effacer la sélection"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Miniatures plus grandes"
|
msgstr "Miniatures plus grandes"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Miniatures plus petites"
|
msgstr "Miniatures plus petites"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Réinitialiser la taille des miniatures"
|
msgstr "Réinitialiser la taille des miniatures"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Tout sélectionner"
|
msgstr "Tout sélectionner"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Visionneuse de photos"
|
msgstr "Visionneuse de photos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Photo précédente / suivante"
|
msgstr "Photo précédente / suivante"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Première / dernière photo"
|
msgstr "Première / dernière photo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Afficher les détails"
|
msgstr "Afficher les détails"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Plein écran"
|
msgstr "Plein écran"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Fermer"
|
msgstr "Fermer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Sélectionnez un seul élément pour le renommer"
|
msgstr "Sélectionnez un seul élément pour le renommer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Non connecté"
|
msgstr "Non connecté"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "Le service Proton Drive n’est pas en cours d’exécution."
|
msgstr "Le service Proton Drive n’est pas en cours d’exécution."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Connexion…"
|
msgstr "Connexion…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "En attente du démarrage du service Proton Drive."
|
msgstr "En attente du démarrage du service Proton Drive."
|
||||||
|
|
||||||
@@ -1292,7 +1293,7 @@ msgstr "Impossible de charger les albums"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1560,7 +1561,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Rendre disponible hors ligne"
|
msgstr "Rendre disponible hors ligne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Garder en ligne uniquement"
|
msgstr "Garder en ligne uniquement"
|
||||||
|
|
||||||
@@ -2724,7 +2725,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Synchronisation en pause jusqu’à la reprise"
|
msgstr "Synchronisation en pause jusqu’à la reprise"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Synchronisation en pause"
|
msgstr "Synchronisation en pause"
|
||||||
|
|
||||||
@@ -3200,25 +3201,25 @@ msgstr "Saisissez votre adresse électronique et votre mot de passe."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Connexion…"
|
msgstr "Connexion…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Terminez la vérification pour continuer…"
|
msgstr "Terminez la vérification pour continuer…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "connexion annulée"
|
msgstr "connexion annulée"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Trop de tentatives de connexion. Patientez quelques minutes et réessayez."
|
"Trop de tentatives de connexion. Patientez quelques minutes et réessayez."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Impossible de joindre Proton. Vérifiez votre connexion Internet et réessayez."
|
"Impossible de joindre Proton. Vérifiez votre connexion Internet et réessayez."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3227,11 +3228,19 @@ msgstr ""
|
|||||||
"système. Assurez-vous qu’un trousseau (GNOME Keyring ou KWallet) est en "
|
"système. Assurez-vous qu’un trousseau (GNOME Keyring ou KWallet) est en "
|
||||||
"cours d’exécution et déverrouillé."
|
"cours d’exécution et déverrouillé."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr "Connexion annulée : aucun code à deux facteurs n’a été saisi."
|
msgstr "Connexion annulée : aucun code à deux facteurs n’a été saisi."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Connexion annulée : aucun mot de passe de boîte aux lettres n’a été saisi."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "Ce mot de passe de boîte aux lettres n’a pas déverrouillé votre compte."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3240,35 +3249,79 @@ msgstr ""
|
|||||||
"pour en obtenir une nouvelle."
|
"pour en obtenir une nouvelle."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Échec de la connexion : {error}"
|
msgstr "Échec de la connexion : {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "Ce mot de passe de boîte aux lettres n’a pas déverrouillé votre compte. Réessayez."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "Ce compte a un mot de passe de boîte aux lettres distinct. Saisissez-le pour déverrouiller vos fichiers."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Mot de passe de la boîte aux lettres"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Mot de passe de la boîte aux lettres"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Garder déverrouillé sur cet ordinateur"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Enregistre le déverrouillage dans le trousseau de clés du système, afin que Proton Drive s’ouvre sans demande après chaque connexion. Sinon, vous saisissez le mot de passe une fois par session."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Déverrouiller"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive est verrouillé. Saisissez votre mot de passe de boîte aux lettres pour le déverrouiller."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Déverrouillé."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Impossible de déverrouiller"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Authentification à deux facteurs"
|
msgstr "Authentification à deux facteurs"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Saisissez le code de votre application d’authentification ou l’un de vos "
|
"Saisissez le code de votre application d’authentification ou l’un de vos "
|
||||||
"codes de récupération."
|
"codes de récupération."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Code d’authentification"
|
msgstr "Code d’authentification"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Confirmer"
|
msgstr "Confirmer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Se déconnecter ?"
|
msgstr "Se déconnecter ?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3277,7 +3330,7 @@ msgstr ""
|
|||||||
"vous vous reconnectiez. Les fichiers déjà présents sur cet ordinateur "
|
"vous vous reconnectiez. Les fichiers déjà présents sur cet ordinateur "
|
||||||
"restent en place."
|
"restent en place."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Se déconnecter"
|
msgstr "Se déconnecter"
|
||||||
|
|
||||||
@@ -4643,40 +4696,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Redémarrer maintenant"
|
msgstr "Redémarrer maintenant"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} utilisés"
|
msgstr "{size} utilisés"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} utilisés sur {total} ({percent} %)"
|
msgstr "{used} utilisés sur {total} ({percent} %)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive connecté"
|
msgstr "Proton Drive connecté"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Vos fichiers sont disponibles."
|
msgstr "Vos fichiers sont disponibles."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Proton Drive déconnecté"
|
msgstr "Proton Drive déconnecté"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le service Proton Drive s’est arrêté. Les fichiers ne sont pas disponibles "
|
"Le service Proton Drive s’est arrêté. Les fichiers ne sont pas disponibles "
|
||||||
"tant qu’il n’a pas redémarré."
|
"tant qu’il n’a pas redémarré."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Synchronisation terminée"
|
msgstr "Synchronisation terminée"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4685,27 +4738,27 @@ msgstr[1] "Le transfert de {n} fichiers est terminé."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title} — {done} sur {total}"
|
msgstr "{title} — {done} sur {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title} — {detail} ({done} sur {total})"
|
msgstr "{title} — {detail} ({done} sur {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title} — {detail}…"
|
msgstr "{title} — {detail}…"
|
||||||
@@ -4713,7 +4766,7 @@ msgstr "{title} — {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
||||||
@@ -4721,119 +4774,119 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} sur {total} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} sur {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} en cache — aucune limite définie"
|
msgstr "{used} en cache — aucune limite définie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} utilisés sur {limit}"
|
msgstr "{used} utilisés sur {limit}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · reprise {time}"
|
msgstr "{queued} · reprise {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Reprise {time}"
|
msgstr "Reprise {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Jusqu’à la reprise"
|
msgstr "Jusqu’à la reprise"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} modification requiert votre attention"
|
msgstr[0] "{n} modification requiert votre attention"
|
||||||
msgstr[1] "{n} modifications requièrent votre attention"
|
msgstr[1] "{n} modifications requièrent votre attention"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Hors ligne"
|
msgstr "Hors ligne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Fichiers en cache uniquement"
|
msgstr "Fichiers en cache uniquement"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Synchronisation"
|
msgstr "Synchronisation"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "À jour"
|
msgstr "À jour"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive n’est pas en cours d’exécution"
|
msgstr "Proton Drive n’est pas en cours d’exécution"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Ne répond pas"
|
msgstr "Ne répond pas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive met trop de temps à répondre"
|
msgstr "Proton Drive met trop de temps à répondre"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "plus tard"
|
msgstr "plus tard"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "à %H:%M"
|
msgstr "à %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "%e %b"
|
msgstr "%e %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "Aucun fichier disponible hors ligne"
|
msgstr "Aucun fichier disponible hors ligne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Faites un clic droit sur un fichier et choisissez « Rendre disponible hors "
|
"Faites un clic droit sur un fichier et choisissez « Rendre disponible hors "
|
||||||
"ligne »."
|
"ligne »."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Impossible de le garder en ligne uniquement"
|
msgstr "Impossible de le garder en ligne uniquement"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Afficher moins"
|
msgstr "Afficher moins"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5899,40 +5952,45 @@ msgstr[1] "↑ {n} en téléversement"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive ne répond pas"
|
msgstr "Proton Drive ne répond pas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Connecté en tant que {username} — verrouillé"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Connecté en tant que {username} — non connecté"
|
msgstr "Connecté en tant que {username} — non connecté"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Non connecté"
|
msgstr "Non connecté"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Erreur : {error}"
|
msgstr "Erreur : {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive a envoyé une réponse inattendue"
|
msgstr "Proton Drive a envoyé une réponse inattendue"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "À jour dans {mountpoint} ({n} épinglé)"
|
msgstr[0] "À jour dans {mountpoint} ({n} épinglé)"
|
||||||
msgstr[1] "À jour dans {mountpoint} ({n} épinglés)"
|
msgstr[1] "À jour dans {mountpoint} ({n} épinglés)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Synchronisation — {queued} ({n} épinglé)"
|
msgstr[0] "Synchronisation — {queued} ({n} épinglé)"
|
||||||
msgstr[1] "Synchronisation — {queued} ({n} épinglés)"
|
msgstr[1] "Synchronisation — {queued} ({n} épinglés)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5940,52 +5998,52 @@ msgstr[0] "Hors ligne — fichiers en cache uniquement ({n} épinglé)"
|
|||||||
msgstr[1] "Hors ligne — fichiers en cache uniquement ({n} épinglés)"
|
msgstr[1] "Hors ligne — fichiers en cache uniquement ({n} épinglés)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Hors ligne — {queued}"
|
msgstr "Hors ligne — {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} problème — Afficher"
|
msgstr[0] "{n} problème — Afficher"
|
||||||
msgstr[1] "{n} problèmes — Afficher"
|
msgstr[1] "{n} problèmes — Afficher"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Se connecter…"
|
msgstr "Se connecter…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Ouvrir Proton Drive"
|
msgstr "Ouvrir Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Ouvrir le dossier"
|
msgstr "Ouvrir le dossier"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Reprendre la synchronisation"
|
msgstr "Reprendre la synchronisation"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Mettre en pause la synchronisation"
|
msgstr "Mettre en pause la synchronisation"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Connecter"
|
msgstr "Connecter"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Masquer l’icône de la zone de notification"
|
msgstr "Masquer l’icône de la zone de notification"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Arrêter Proton Drive…"
|
msgstr "Arrêter Proton Drive…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Quitter"
|
msgstr "Quitter"
|
||||||
|
|
||||||
|
|||||||
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A %-d %B %Y, %H:%M"
|
msgstr "%A %-d %B %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A %-d %B %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "I miei file"
|
msgstr "I miei file"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Foto"
|
msgstr "Foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Condivisi con me"
|
msgstr "Condivisi con me"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Condivisi da me"
|
msgstr "Condivisi da me"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computer"
|
msgstr "Computer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Cestino"
|
msgstr "Cestino"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Sincronizzazione"
|
msgstr "Sincronizzazione"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Sei offline"
|
msgstr "Sei offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Non esiste più"
|
msgstr "Non esiste più"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "Non hai accesso a questo elemento"
|
msgstr "Non hai accesso a questo elemento"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "È stato modificato prima da qualcos'altro"
|
msgstr "È stato modificato prima da qualcos'altro"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Il tuo Proton Drive è pieno"
|
msgstr "Il tuo Proton Drive è pieno"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Preferenze"
|
msgstr "Preferenze"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Scorciatoie da tastiera"
|
msgstr "Scorciatoie da tastiera"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "Informazioni su Proton Drive for Linux"
|
msgstr "Informazioni su Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Menu principale"
|
msgstr "Menu principale"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -165,23 +165,23 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Client non ufficiale: non affiliato, approvato né supportato da Proton AG."
|
"Client non ufficiale: non affiliato, approvato né supportato da Proton AG."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Codice sorgente"
|
msgstr "Codice sorgente"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Termini di servizio di Proton"
|
msgstr "Termini di servizio di Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Informativa sulla privacy di Proton"
|
msgstr "Informativa sulla privacy di Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Esclusione di responsabilità"
|
msgstr "Esclusione di responsabilità"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -204,7 +204,7 @@ msgstr ""
|
|||||||
"Questo software è fornito “così com’è”, senza alcuna garanzia. Conserva una "
|
"Questo software è fornito “così com’è”, senza alcuna garanzia. Conserva una "
|
||||||
"copia dei dati che non puoi permetterti di perdere."
|
"copia dei dati che non puoi permetterti di perdere."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -214,7 +214,7 @@ msgstr ""
|
|||||||
"\">GeoNames</a>, con licenza <a href=\"https://creativecommons.org/licenses/"
|
"\">GeoNames</a>, con licenza <a href=\"https://creativecommons.org/licenses/"
|
||||||
"by/4.0/\">CC BY 4.0</a>."
|
"by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -224,7 +224,7 @@ msgstr ""
|
|||||||
"confini nazionali di <a href=\"https://www.naturalearthdata.com/\">Natural "
|
"confini nazionali di <a href=\"https://www.naturalearthdata.com/\">Natural "
|
||||||
"Earth</a>, che sono di pubblico dominio."
|
"Earth</a>, che sono di pubblico dominio."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -240,15 +240,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Collaboratori di Proton Drive for Linux"
|
msgstr "Collaboratori di Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Arrestare Proton Drive?"
|
msgstr "Arrestare Proton Drive?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -256,7 +256,7 @@ msgstr ""
|
|||||||
"I miei file andranno offline e nulla verrà sincronizzato finché non ti "
|
"I miei file andranno offline e nulla verrà sincronizzato finché non ti "
|
||||||
"riconnetti. Proton Drive si riavvierà al prossimo accesso."
|
"riconnetti. Proton Drive si riavvierà al prossimo accesso."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -271,7 +271,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -286,30 +287,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annulla"
|
msgstr "Annulla"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Arresta"
|
msgstr "Arresta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Impossibile arrestare Proton Drive"
|
msgstr "Impossibile arrestare Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "Il servizio di Proton Drive non si è arrestato."
|
msgstr "Il servizio di Proton Drive non si è arrestato."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Generale"
|
msgstr "Generale"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Cerca in Drive"
|
msgstr "Cerca in Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -318,38 +319,38 @@ msgstr "Cerca in Drive"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Aggiorna"
|
msgstr "Aggiorna"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Scorciatoie da tastiera"
|
msgstr "Scorciatoie da tastiera"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "File"
|
msgstr "File"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Nuova cartella"
|
msgstr "Nuova cartella"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Carica file"
|
msgstr "Carica file"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Indietro / avanti"
|
msgstr "Indietro / avanti"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Cartella superiore"
|
msgstr "Cartella superiore"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Griglia / elenco"
|
msgstr "Griglia / elenco"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -358,7 +359,7 @@ msgstr "Griglia / elenco"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Rinomina"
|
msgstr "Rinomina"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -368,73 +369,73 @@ msgstr "Rinomina"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Sposta nel cestino"
|
msgstr "Sposta nel cestino"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Annulla la selezione"
|
msgstr "Annulla la selezione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Miniature più grandi"
|
msgstr "Miniature più grandi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Miniature più piccole"
|
msgstr "Miniature più piccole"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Ripristina la dimensione delle miniature"
|
msgstr "Ripristina la dimensione delle miniature"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Seleziona tutto"
|
msgstr "Seleziona tutto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Visualizzatore di foto"
|
msgstr "Visualizzatore di foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Foto precedente / successiva"
|
msgstr "Foto precedente / successiva"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Prima / ultima foto"
|
msgstr "Prima / ultima foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Mostra dettagli"
|
msgstr "Mostra dettagli"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Schermo intero"
|
msgstr "Schermo intero"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Chiudi"
|
msgstr "Chiudi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Seleziona un solo elemento per rinominarlo"
|
msgstr "Seleziona un solo elemento per rinominarlo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Non connesso"
|
msgstr "Non connesso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "Il servizio di Proton Drive non è in esecuzione."
|
msgstr "Il servizio di Proton Drive non è in esecuzione."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Connessione…"
|
msgstr "Connessione…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "In attesa dell’avvio del servizio di Proton Drive."
|
msgstr "In attesa dell’avvio del servizio di Proton Drive."
|
||||||
|
|
||||||
@@ -1286,7 +1287,7 @@ msgstr "Impossibile caricare gli album"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1554,7 +1555,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Rendi disponibile offline"
|
msgstr "Rendi disponibile offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Rendi solo online"
|
msgstr "Rendi solo online"
|
||||||
|
|
||||||
@@ -2722,7 +2723,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Sincronizzazione in pausa finché non riprendi"
|
msgstr "Sincronizzazione in pausa finché non riprendi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Sincronizzazione in pausa"
|
msgstr "Sincronizzazione in pausa"
|
||||||
|
|
||||||
@@ -3192,25 +3193,25 @@ msgstr "Inserisci la tua email e la password."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Accesso in corso…"
|
msgstr "Accesso in corso…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Completa la verifica per continuare…"
|
msgstr "Completa la verifica per continuare…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "accesso annullato"
|
msgstr "accesso annullato"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr "Troppi tentativi di accesso. Attendi qualche minuto e riprova."
|
msgstr "Troppi tentativi di accesso. Attendi qualche minuto e riprova."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Impossibile raggiungere Proton. Controlla la connessione a Internet e "
|
"Impossibile raggiungere Proton. Controlla la connessione a Internet e "
|
||||||
"riprova."
|
"riprova."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3219,13 +3220,21 @@ msgstr ""
|
|||||||
"portachiavi di sistema. Assicurati che un portachiavi (GNOME Keyring o "
|
"portachiavi di sistema. Assicurati che un portachiavi (GNOME Keyring o "
|
||||||
"KWallet) sia in esecuzione e sbloccato."
|
"KWallet) sia in esecuzione e sbloccato."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Accesso annullato: non è stato inserito alcun codice di autenticazione a due "
|
"Accesso annullato: non è stato inserito alcun codice di autenticazione a due "
|
||||||
"fattori."
|
"fattori."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Accesso annullato: non è stata inserita alcuna password della casella di posta."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "Quella password della casella di posta non ha sbloccato il tuo account."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3234,35 +3243,79 @@ msgstr ""
|
|||||||
"riceverne una nuova."
|
"riceverne una nuova."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Accesso non riuscito: {error}"
|
msgstr "Accesso non riuscito: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "Quella password della casella di posta non ha sbloccato il tuo account. Riprova."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "Questo account ha una password della casella di posta separata. Inseriscila per sbloccare i tuoi file."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Password della casella di posta"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Password della casella di posta"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Mantieni sbloccato su questo computer"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Salva lo sblocco nel portachiavi di sistema, così Proton Drive si apre senza chiedere dopo ogni accesso. Altrimenti inserisci la password una volta per sessione."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Sblocca"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive è bloccato. Inserisci la password della casella di posta per sbloccarlo."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Sbloccato."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Impossibile sbloccare"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Autenticazione a due fattori"
|
msgstr "Autenticazione a due fattori"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Inserisci il codice dell'app di autenticazione o uno dei tuoi codici di "
|
"Inserisci il codice dell'app di autenticazione o uno dei tuoi codici di "
|
||||||
"recupero."
|
"recupero."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Codice di autenticazione"
|
msgstr "Codice di autenticazione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Conferma"
|
msgstr "Conferma"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Disconnettersi?"
|
msgstr "Disconnettersi?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3270,7 +3323,7 @@ msgstr ""
|
|||||||
"Proton Drive si disconnetterà e interromperà la sincronizzazione finché non "
|
"Proton Drive si disconnetterà e interromperà la sincronizzazione finché non "
|
||||||
"accedi di nuovo. I file già presenti su questo computer restano dove sono."
|
"accedi di nuovo. I file già presenti su questo computer restano dove sono."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Disconnetti"
|
msgstr "Disconnetti"
|
||||||
|
|
||||||
@@ -4621,40 +4674,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Riavvia ora"
|
msgstr "Riavvia ora"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} utilizzati"
|
msgstr "{size} utilizzati"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} di {total} utilizzati ({percent}%)"
|
msgstr "{used} di {total} utilizzati ({percent}%)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive connesso"
|
msgstr "Proton Drive connesso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "I tuoi file sono disponibili."
|
msgstr "I tuoi file sono disponibili."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Proton Drive disconnesso"
|
msgstr "Proton Drive disconnesso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Il servizio di Proton Drive si è arrestato. I file non sono disponibili "
|
"Il servizio di Proton Drive si è arrestato. I file non sono disponibili "
|
||||||
"finché non si riavvia."
|
"finché non si riavvia."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Sincronizzazione completata"
|
msgstr "Sincronizzazione completata"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4663,27 +4716,27 @@ msgstr[1] "Trasferimento di {n} file completato."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title}: {done} di {total}"
|
msgstr "{title}: {done} di {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title}: {detail} ({done} di {total})"
|
msgstr "{title}: {detail} ({done} di {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title}: {detail}…"
|
msgstr "{title}: {detail}…"
|
||||||
@@ -4691,7 +4744,7 @@ msgstr "{title}: {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name}: {done} ({speed}/s)"
|
msgstr "{arrow} {name}: {done} ({speed}/s)"
|
||||||
@@ -4699,117 +4752,117 @@ msgstr "{arrow} {name}: {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name}: {done} di {total} ({speed}/s)"
|
msgstr "{arrow} {name}: {done} di {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} in cache — nessun limite impostato"
|
msgstr "{used} in cache — nessun limite impostato"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} di {limit} utilizzati"
|
msgstr "{used} di {limit} utilizzati"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · riprende {time}"
|
msgstr "{queued} · riprende {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Riprende {time}"
|
msgstr "Riprende {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Finché non riprendi"
|
msgstr "Finché non riprendi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} modifica richiede attenzione"
|
msgstr[0] "{n} modifica richiede attenzione"
|
||||||
msgstr[1] "{n} modifiche richiedono attenzione"
|
msgstr[1] "{n} modifiche richiedono attenzione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Solo file in cache"
|
msgstr "Solo file in cache"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Sincronizzazione in corso"
|
msgstr "Sincronizzazione in corso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Aggiornato"
|
msgstr "Aggiornato"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive non è in esecuzione"
|
msgstr "Proton Drive non è in esecuzione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Non risponde"
|
msgstr "Non risponde"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive impiega troppo tempo a rispondere"
|
msgstr "Proton Drive impiega troppo tempo a rispondere"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "più tardi"
|
msgstr "più tardi"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "alle %H:%M"
|
msgstr "alle %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "%e %b"
|
msgstr "%e %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "Nessun file mantenuto offline"
|
msgstr "Nessun file mantenuto offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr "Fai clic destro su un file e scegli “Rendi disponibile offline”."
|
msgstr "Fai clic destro su un file e scegli “Rendi disponibile offline”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Impossibile renderlo solo online"
|
msgstr "Impossibile renderlo solo online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Mostra meno"
|
msgstr "Mostra meno"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5876,40 +5929,45 @@ msgstr[1] "↑ {n} in caricamento"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive non risponde"
|
msgstr "Proton Drive non risponde"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Accesso effettuato come {username} — bloccato"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Accesso effettuato come {username} — non connesso"
|
msgstr "Accesso effettuato come {username} — non connesso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Accesso non eseguito"
|
msgstr "Accesso non eseguito"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Errore: {error}"
|
msgstr "Errore: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive ha inviato una risposta inattesa"
|
msgstr "Proton Drive ha inviato una risposta inattesa"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "Aggiornato in {mountpoint} ({n} fissato)"
|
msgstr[0] "Aggiornato in {mountpoint} ({n} fissato)"
|
||||||
msgstr[1] "Aggiornato in {mountpoint} ({n} fissati)"
|
msgstr[1] "Aggiornato in {mountpoint} ({n} fissati)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Sincronizzazione: {queued} ({n} fissato)"
|
msgstr[0] "Sincronizzazione: {queued} ({n} fissato)"
|
||||||
msgstr[1] "Sincronizzazione: {queued} ({n} fissati)"
|
msgstr[1] "Sincronizzazione: {queued} ({n} fissati)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5917,52 +5975,52 @@ msgstr[0] "Offline: solo file in cache ({n} fissato)"
|
|||||||
msgstr[1] "Offline: solo file in cache ({n} fissati)"
|
msgstr[1] "Offline: solo file in cache ({n} fissati)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Offline: {queued}"
|
msgstr "Offline: {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} problema: visualizza"
|
msgstr[0] "{n} problema: visualizza"
|
||||||
msgstr[1] "{n} problemi: visualizza"
|
msgstr[1] "{n} problemi: visualizza"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Accedi…"
|
msgstr "Accedi…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Apri Proton Drive"
|
msgstr "Apri Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Apri cartella"
|
msgstr "Apri cartella"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Riprendi sincronizzazione"
|
msgstr "Riprendi sincronizzazione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Metti in pausa sincronizzazione"
|
msgstr "Metti in pausa sincronizzazione"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Connetti"
|
msgstr "Connetti"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Nascondi icona nell'area di notifica"
|
msgstr "Nascondi icona nell'area di notifica"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Arresta Proton Drive…"
|
msgstr "Arresta Proton Drive…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Esci"
|
msgstr "Esci"
|
||||||
|
|
||||||
|
|||||||
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A %-d %B %Y, %H:%M"
|
msgstr "%A %-d %B %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A %-d %B %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "Mijn bestanden"
|
msgstr "Mijn bestanden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Foto's"
|
msgstr "Foto's"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Gedeeld met mij"
|
msgstr "Gedeeld met mij"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Gedeeld door mij"
|
msgstr "Gedeeld door mij"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computers"
|
msgstr "Computers"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Prullenbak"
|
msgstr "Prullenbak"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Synchronisatie"
|
msgstr "Synchronisatie"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Je bent offline"
|
msgstr "Je bent offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Dat bestaat niet meer"
|
msgstr "Dat bestaat niet meer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "Je hebt daar geen toegang toe"
|
msgstr "Je hebt daar geen toegang toe"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Er is eerst iets anders gewijzigd"
|
msgstr "Er is eerst iets anders gewijzigd"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Je Proton Drive is vol"
|
msgstr "Je Proton Drive is vol"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Voorkeuren"
|
msgstr "Voorkeuren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Sneltoetsen"
|
msgstr "Sneltoetsen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "Over Proton Drive for Linux"
|
msgstr "Over Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Hoofdmenu"
|
msgstr "Hoofdmenu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -166,23 +166,23 @@ msgstr ""
|
|||||||
"Onofficiële client — niet gelieerd aan, onderschreven door of ondersteund "
|
"Onofficiële client — niet gelieerd aan, onderschreven door of ondersteund "
|
||||||
"door Proton AG."
|
"door Proton AG."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Broncode"
|
msgstr "Broncode"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Servicevoorwaarden van Proton"
|
msgstr "Servicevoorwaarden van Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Privacybeleid van Proton"
|
msgstr "Privacybeleid van Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Disclaimer"
|
msgstr "Disclaimer"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -205,7 +205,7 @@ msgstr ""
|
|||||||
"Deze software wordt geleverd “zoals ze is”, zonder enige garantie. Bewaar "
|
"Deze software wordt geleverd “zoals ze is”, zonder enige garantie. Bewaar "
|
||||||
"een kopie van gegevens die je niet kwijt wilt raken."
|
"een kopie van gegevens die je niet kwijt wilt raken."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -215,7 +215,7 @@ msgstr ""
|
|||||||
"\">GeoNames</a>, gelicentieerd onder <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, gelicentieerd onder <a href=\"https://creativecommons.org/"
|
||||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -225,7 +225,7 @@ msgstr ""
|
|||||||
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a>, die in het "
|
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a>, die in het "
|
||||||
"publieke domein vallen."
|
"publieke domein vallen."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -241,15 +241,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Bijdragers aan Proton Drive for Linux"
|
msgstr "Bijdragers aan Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Proton Drive stoppen?"
|
msgstr "Proton Drive stoppen?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -257,7 +257,7 @@ msgstr ""
|
|||||||
"Mijn bestanden gaat offline en er wordt niets gesynchroniseerd tot je weer "
|
"Mijn bestanden gaat offline en er wordt niets gesynchroniseerd tot je weer "
|
||||||
"verbinding maakt. Proton Drive start opnieuw bij je volgende aanmelding."
|
"verbinding maakt. Proton Drive start opnieuw bij je volgende aanmelding."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -272,7 +272,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -287,30 +288,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuleren"
|
msgstr "Annuleren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Stoppen"
|
msgstr "Stoppen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Kon Proton Drive niet stoppen"
|
msgstr "Kon Proton Drive niet stoppen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "De Proton Drive-service is niet gestopt."
|
msgstr "De Proton Drive-service is niet gestopt."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Algemeen"
|
msgstr "Algemeen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Drive doorzoeken"
|
msgstr "Drive doorzoeken"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -319,38 +320,38 @@ msgstr "Drive doorzoeken"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Verversen"
|
msgstr "Verversen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Sneltoetsen"
|
msgstr "Sneltoetsen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Bestanden"
|
msgstr "Bestanden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Nieuwe map"
|
msgstr "Nieuwe map"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Bestanden uploaden"
|
msgstr "Bestanden uploaden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Terug / vooruit"
|
msgstr "Terug / vooruit"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Bovenliggende map"
|
msgstr "Bovenliggende map"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Raster / lijst"
|
msgstr "Raster / lijst"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -359,7 +360,7 @@ msgstr "Raster / lijst"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Hernoemen"
|
msgstr "Hernoemen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -369,73 +370,73 @@ msgstr "Hernoemen"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Naar prullenbak verplaatsen"
|
msgstr "Naar prullenbak verplaatsen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Selectie wissen"
|
msgstr "Selectie wissen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Grotere miniaturen"
|
msgstr "Grotere miniaturen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Kleinere miniaturen"
|
msgstr "Kleinere miniaturen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Miniatuurgrootte herstellen"
|
msgstr "Miniatuurgrootte herstellen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Alles selecteren"
|
msgstr "Alles selecteren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Fotoweergave"
|
msgstr "Fotoweergave"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Vorige / volgende foto"
|
msgstr "Vorige / volgende foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Eerste / laatste foto"
|
msgstr "Eerste / laatste foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Details tonen"
|
msgstr "Details tonen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Volledig scherm"
|
msgstr "Volledig scherm"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Sluiten"
|
msgstr "Sluiten"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Selecteer één item om het te hernoemen"
|
msgstr "Selecteer één item om het te hernoemen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Niet verbonden"
|
msgstr "Niet verbonden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "De Proton Drive-service draait niet."
|
msgstr "De Proton Drive-service draait niet."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Verbinden…"
|
msgstr "Verbinden…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "Wachten tot de Proton Drive-service is gestart."
|
msgstr "Wachten tot de Proton Drive-service is gestart."
|
||||||
|
|
||||||
@@ -1282,7 +1283,7 @@ msgstr "Kon albums niet laden"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1550,7 +1551,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Offline beschikbaar maken"
|
msgstr "Offline beschikbaar maken"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Alleen online maken"
|
msgstr "Alleen online maken"
|
||||||
|
|
||||||
@@ -2713,7 +2714,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Synchronisatie gepauzeerd totdat je hervat"
|
msgstr "Synchronisatie gepauzeerd totdat je hervat"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Synchronisatie gepauzeerd"
|
msgstr "Synchronisatie gepauzeerd"
|
||||||
|
|
||||||
@@ -3185,26 +3186,26 @@ msgstr "Voer je e-mailadres en wachtwoord in."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Aanmelden…"
|
msgstr "Aanmelden…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Voltooi de verificatie om verder te gaan…"
|
msgstr "Voltooi de verificatie om verder te gaan…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "aanmelden geannuleerd"
|
msgstr "aanmelden geannuleerd"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Te veel aanmeldpogingen. Wacht een paar minuten en probeer het opnieuw."
|
"Te veel aanmeldpogingen. Wacht een paar minuten en probeer het opnieuw."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Kon Proton niet bereiken. Controleer je internetverbinding en probeer het "
|
"Kon Proton niet bereiken. Controleer je internetverbinding en probeer het "
|
||||||
"opnieuw."
|
"opnieuw."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3213,11 +3214,19 @@ msgstr ""
|
|||||||
"opgeslagen. Zorg dat een sleutelbos (GNOME Keyring of KWallet) actief en "
|
"opgeslagen. Zorg dat een sleutelbos (GNOME Keyring of KWallet) actief en "
|
||||||
"ontgrendeld is."
|
"ontgrendeld is."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr "Aanmelden geannuleerd: er is geen tweestapscode ingevoerd."
|
msgstr "Aanmelden geannuleerd: er is geen tweestapscode ingevoerd."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Aanmelden geannuleerd: er is geen mailboxwachtwoord ingevoerd."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "Dat mailboxwachtwoord heeft je account niet ontgrendeld."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3226,33 +3235,77 @@ msgstr ""
|
|||||||
"om een nieuwe te krijgen."
|
"om een nieuwe te krijgen."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Aanmelden mislukt: {error}"
|
msgstr "Aanmelden mislukt: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "Dat mailboxwachtwoord heeft je account niet ontgrendeld. Probeer het opnieuw."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "Dit account heeft een apart mailboxwachtwoord. Voer het in om je bestanden te ontgrendelen."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Mailboxwachtwoord"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Mailboxwachtwoord"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Ontgrendeld houden op deze computer"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Bewaart de ontgrendeling in de sleutelhanger van het systeem, zodat Proton Drive na elke aanmelding opent zonder te vragen. Anders voer je het wachtwoord één keer per sessie in."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Ontgrendelen"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive is vergrendeld. Voer je mailboxwachtwoord in om het te ontgrendelen."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Ontgrendeld."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Ontgrendelen mislukt"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Tweestapsverificatie"
|
msgstr "Tweestapsverificatie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr "Voer de code uit je authenticator-app in, of een van je herstelcodes."
|
msgstr "Voer de code uit je authenticator-app in, of een van je herstelcodes."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Verificatiecode"
|
msgstr "Verificatiecode"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Bevestigen"
|
msgstr "Bevestigen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Afmelden?"
|
msgstr "Afmelden?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3261,7 +3314,7 @@ msgstr ""
|
|||||||
"je opnieuw aanmeldt. Bestanden die al op deze computer staan, blijven waar "
|
"je opnieuw aanmeldt. Bestanden die al op deze computer staan, blijven waar "
|
||||||
"ze zijn."
|
"ze zijn."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Afmelden"
|
msgstr "Afmelden"
|
||||||
|
|
||||||
@@ -4620,40 +4673,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Nu opnieuw starten"
|
msgstr "Nu opnieuw starten"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} gebruikt"
|
msgstr "{size} gebruikt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} van {total} gebruikt ({percent}%)"
|
msgstr "{used} van {total} gebruikt ({percent}%)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive verbonden"
|
msgstr "Proton Drive verbonden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Je bestanden zijn beschikbaar."
|
msgstr "Je bestanden zijn beschikbaar."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Verbinding met Proton Drive verbroken"
|
msgstr "Verbinding met Proton Drive verbroken"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"De Proton Drive-service is gestopt. Bestanden zijn pas weer beschikbaar als "
|
"De Proton Drive-service is gestopt. Bestanden zijn pas weer beschikbaar als "
|
||||||
"hij opnieuw start."
|
"hij opnieuw start."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Synchronisatie voltooid"
|
msgstr "Synchronisatie voltooid"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4662,27 +4715,27 @@ msgstr[1] "{n} bestanden zijn klaar met overdragen."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title} — {done} van {total}"
|
msgstr "{title} — {done} van {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title} — {detail} ({done} van {total})"
|
msgstr "{title} — {detail} ({done} van {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title} — {detail}…"
|
msgstr "{title} — {detail}…"
|
||||||
@@ -4690,7 +4743,7 @@ msgstr "{title} — {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
||||||
@@ -4698,117 +4751,117 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} van {total} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} van {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} in cache — geen limiet ingesteld"
|
msgstr "{used} in cache — geen limiet ingesteld"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} van {limit} gebruikt"
|
msgstr "{used} van {limit} gebruikt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · hervat {time}"
|
msgstr "{queued} · hervat {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Hervat {time}"
|
msgstr "Hervat {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Totdat je hervat"
|
msgstr "Totdat je hervat"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} wijziging vereist aandacht"
|
msgstr[0] "{n} wijziging vereist aandacht"
|
||||||
msgstr[1] "{n} wijzigingen vereisen aandacht"
|
msgstr[1] "{n} wijzigingen vereisen aandacht"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Alleen bestanden in cache"
|
msgstr "Alleen bestanden in cache"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Synchroniseren"
|
msgstr "Synchroniseren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Bijgewerkt"
|
msgstr "Bijgewerkt"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive draait niet"
|
msgstr "Proton Drive draait niet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Reageert niet"
|
msgstr "Reageert niet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive doet er te lang over om te antwoorden"
|
msgstr "Proton Drive doet er te lang over om te antwoorden"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "later"
|
msgstr "later"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "om %H:%M"
|
msgstr "om %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "%e %b"
|
msgstr "%e %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "Geen offline bewaarde bestanden"
|
msgstr "Geen offline bewaarde bestanden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr "Klik met rechts op een bestand en kies “Offline beschikbaar maken”."
|
msgstr "Klik met rechts op een bestand en kies “Offline beschikbaar maken”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Kon het niet alleen online maken"
|
msgstr "Kon het niet alleen online maken"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Minder tonen"
|
msgstr "Minder tonen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5868,40 +5921,45 @@ msgstr[1] "↑ {n} worden geüpload"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive reageert niet"
|
msgstr "Proton Drive reageert niet"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Aangemeld als {username} — vergrendeld"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Aangemeld als {username} — niet verbonden"
|
msgstr "Aangemeld als {username} — niet verbonden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Niet aangemeld"
|
msgstr "Niet aangemeld"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Fout: {error}"
|
msgstr "Fout: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive gaf een onverwacht antwoord"
|
msgstr "Proton Drive gaf een onverwacht antwoord"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "Bijgewerkt in {mountpoint} ({n} vastgezet)"
|
msgstr[0] "Bijgewerkt in {mountpoint} ({n} vastgezet)"
|
||||||
msgstr[1] "Bijgewerkt in {mountpoint} ({n} vastgezet)"
|
msgstr[1] "Bijgewerkt in {mountpoint} ({n} vastgezet)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Synchroniseren — {queued} ({n} vastgezet)"
|
msgstr[0] "Synchroniseren — {queued} ({n} vastgezet)"
|
||||||
msgstr[1] "Synchroniseren — {queued} ({n} vastgezet)"
|
msgstr[1] "Synchroniseren — {queued} ({n} vastgezet)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5909,52 +5967,52 @@ msgstr[0] "Offline — alleen bestanden in cache ({n} vastgezet)"
|
|||||||
msgstr[1] "Offline — alleen bestanden in cache ({n} vastgezet)"
|
msgstr[1] "Offline — alleen bestanden in cache ({n} vastgezet)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Offline — {queued}"
|
msgstr "Offline — {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} probleem — Bekijken"
|
msgstr[0] "{n} probleem — Bekijken"
|
||||||
msgstr[1] "{n} problemen — Bekijken"
|
msgstr[1] "{n} problemen — Bekijken"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Aanmelden…"
|
msgstr "Aanmelden…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Proton Drive openen"
|
msgstr "Proton Drive openen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Map openen"
|
msgstr "Map openen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Synchronisatie hervatten"
|
msgstr "Synchronisatie hervatten"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Synchronisatie pauzeren"
|
msgstr "Synchronisatie pauzeren"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Verbinden"
|
msgstr "Verbinden"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Pictogram in systeemvak verbergen"
|
msgstr "Pictogram in systeemvak verbergen"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Proton Drive stoppen…"
|
msgstr "Proton Drive stoppen…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Afsluiten"
|
msgstr "Afsluiten"
|
||||||
|
|
||||||
|
|||||||
+199
-141
@@ -6,9 +6,9 @@
|
|||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.10.0\n"
|
"Project-Id-Version: proton-drive-linux 3.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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -60,7 +60,7 @@ msgstr ""
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -73,91 +73,91 @@ msgstr ""
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -165,23 +165,23 @@ msgid ""
|
|||||||
"AG."
|
"AG."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -194,21 +194,21 @@ msgid ""
|
|||||||
"of any data you cannot afford to lose."
|
"of any data you cannot afford to lose."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
"public domain."
|
"public domain."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -219,21 +219,21 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -248,7 +248,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -263,30 +264,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -295,38 +296,38 @@ msgstr ""
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -335,7 +336,7 @@ msgstr ""
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -345,73 +346,73 @@ msgstr ""
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1240,7 +1241,7 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1508,7 +1509,7 @@ msgid "Make available offline"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2616,7 +2617,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3052,72 +3053,124 @@ msgstr ""
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4433,38 +4486,38 @@ msgid "Restart Now"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4473,27 +4526,27 @@ msgstr[1] ""
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -4501,7 +4554,7 @@ msgstr ""
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -4509,117 +4562,117 @@ msgstr ""
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5644,40 +5697,45 @@ msgstr[1] ""
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5685,52 +5743,52 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -59,7 +59,7 @@ msgstr "%-d %b %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A, %-d %B %Y, %H:%M"
|
msgstr "%A, %-d %B %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -72,91 +72,91 @@ msgstr "%A, %-d %B %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "Moje pliki"
|
msgstr "Moje pliki"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Zdjęcia"
|
msgstr "Zdjęcia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Udostępnione mi"
|
msgstr "Udostępnione mi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Udostępnione przeze mnie"
|
msgstr "Udostępnione przeze mnie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Komputery"
|
msgstr "Komputery"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Kosz"
|
msgstr "Kosz"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Synchronizacja"
|
msgstr "Synchronizacja"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Brak połączenia z siecią"
|
msgstr "Brak połączenia z siecią"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Ten element już nie istnieje"
|
msgstr "Ten element już nie istnieje"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "Brak dostępu do tego elementu"
|
msgstr "Brak dostępu do tego elementu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Coś zmieniło ten element wcześniej"
|
msgstr "Coś zmieniło ten element wcześniej"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Proton Drive jest pełny"
|
msgstr "Proton Drive jest pełny"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Preferencje"
|
msgstr "Preferencje"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Skróty klawiszowe"
|
msgstr "Skróty klawiszowe"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "O programie Proton Drive for Linux"
|
msgstr "O programie Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Menu główne"
|
msgstr "Menu główne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -168,23 +168,23 @@ msgstr ""
|
|||||||
"Nieoficjalny klient — niepowiązany z Proton AG, niepopierany ani "
|
"Nieoficjalny klient — niepowiązany z Proton AG, niepopierany ani "
|
||||||
"niewspierany przez tę firmę."
|
"niewspierany przez tę firmę."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Kod źródłowy"
|
msgstr "Kod źródłowy"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Warunki korzystania z usług Proton"
|
msgstr "Warunki korzystania z usług Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Polityka prywatności Proton"
|
msgstr "Polityka prywatności Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Zastrzeżenia"
|
msgstr "Zastrzeżenia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -208,7 +208,7 @@ msgstr ""
|
|||||||
"gwarancji. Zachowaj kopię danych, na których utratę nie możesz sobie "
|
"gwarancji. Zachowaj kopię danych, na których utratę nie możesz sobie "
|
||||||
"pozwolić."
|
"pozwolić."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -218,7 +218,7 @@ msgstr ""
|
|||||||
"\">GeoNames</a> udostępnionych na licencji <a href=\"https://"
|
"\">GeoNames</a> udostępnionych na licencji <a href=\"https://"
|
||||||
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -228,7 +228,7 @@ msgstr ""
|
|||||||
"www.naturalearthdata.com/\">Natural Earth</a>, które należą do domeny "
|
"www.naturalearthdata.com/\">Natural Earth</a>, które należą do domeny "
|
||||||
"publicznej."
|
"publicznej."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -244,15 +244,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Współtwórcy programu Proton Drive for Linux"
|
msgstr "Współtwórcy programu Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Zatrzymać Proton Drive?"
|
msgstr "Zatrzymać Proton Drive?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -261,7 +261,7 @@ msgstr ""
|
|||||||
"ponownego połączenia. Proton Drive uruchomi się ponownie przy następnym "
|
"ponownego połączenia. Proton Drive uruchomi się ponownie przy następnym "
|
||||||
"logowaniu."
|
"logowaniu."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -276,7 +276,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -291,30 +292,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Anuluj"
|
msgstr "Anuluj"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Zatrzymaj"
|
msgstr "Zatrzymaj"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Nie można zatrzymać Proton Drive"
|
msgstr "Nie można zatrzymać Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "Usługa Proton Drive nie zatrzymała się."
|
msgstr "Usługa Proton Drive nie zatrzymała się."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Ogólne"
|
msgstr "Ogólne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Przeszukaj Drive"
|
msgstr "Przeszukaj Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -323,38 +324,38 @@ msgstr "Przeszukaj Drive"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Odśwież"
|
msgstr "Odśwież"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Skróty klawiszowe"
|
msgstr "Skróty klawiszowe"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Pliki"
|
msgstr "Pliki"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Nowy katalog"
|
msgstr "Nowy katalog"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Wyślij pliki"
|
msgstr "Wyślij pliki"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Wstecz/dalej"
|
msgstr "Wstecz/dalej"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Katalog nadrzędny"
|
msgstr "Katalog nadrzędny"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Siatka/lista"
|
msgstr "Siatka/lista"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -363,7 +364,7 @@ msgstr "Siatka/lista"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Zmień nazwę"
|
msgstr "Zmień nazwę"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -373,73 +374,73 @@ msgstr "Zmień nazwę"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Przenieś do kosza"
|
msgstr "Przenieś do kosza"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Wyczyść zaznaczenie"
|
msgstr "Wyczyść zaznaczenie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Większe miniatury"
|
msgstr "Większe miniatury"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Mniejsze miniatury"
|
msgstr "Mniejsze miniatury"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Przywróć rozmiar miniatur"
|
msgstr "Przywróć rozmiar miniatur"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Zaznacz wszystko"
|
msgstr "Zaznacz wszystko"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Przeglądarka zdjęć"
|
msgstr "Przeglądarka zdjęć"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Poprzednie/następne zdjęcie"
|
msgstr "Poprzednie/następne zdjęcie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Pierwsze/ostatnie zdjęcie"
|
msgstr "Pierwsze/ostatnie zdjęcie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Wyświetl szczegóły"
|
msgstr "Wyświetl szczegóły"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Pełny ekran"
|
msgstr "Pełny ekran"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Zamknij"
|
msgstr "Zamknij"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Należy zaznaczyć jeden element, aby zmienić jego nazwę"
|
msgstr "Należy zaznaczyć jeden element, aby zmienić jego nazwę"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Brak połączenia"
|
msgstr "Brak połączenia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "Usługa Proton Drive nie jest uruchomiona."
|
msgstr "Usługa Proton Drive nie jest uruchomiona."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Łączenie…"
|
msgstr "Łączenie…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "Oczekiwanie na uruchomienie usługi Proton Drive."
|
msgstr "Oczekiwanie na uruchomienie usługi Proton Drive."
|
||||||
|
|
||||||
@@ -1313,7 +1314,7 @@ msgstr "Nie można wczytać albumów"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1586,7 +1587,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Oznacz jako dostępne offline"
|
msgstr "Oznacz jako dostępne offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Oznacz jako tylko online"
|
msgstr "Oznacz jako tylko online"
|
||||||
|
|
||||||
@@ -2770,7 +2771,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Wstrzymano synchronizację do czasu wznowienia"
|
msgstr "Wstrzymano synchronizację do czasu wznowienia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Wstrzymano synchronizację"
|
msgstr "Wstrzymano synchronizację"
|
||||||
|
|
||||||
@@ -3242,26 +3243,26 @@ msgstr "Proszę podać adres e-mail i hasło."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Logowanie…"
|
msgstr "Logowanie…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Proszę ukończyć weryfikację, aby kontynuować…"
|
msgstr "Proszę ukończyć weryfikację, aby kontynuować…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "anulowano logowanie"
|
msgstr "anulowano logowanie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Za dużo prób logowania. Proszę odczekać kilka minut i spróbować ponownie."
|
"Za dużo prób logowania. Proszę odczekać kilka minut i spróbować ponownie."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nie można połączyć się z Proton. Proszę sprawdzić połączenie z Internetem i "
|
"Nie można połączyć się z Proton. Proszę sprawdzić połączenie z Internetem i "
|
||||||
"spróbować ponownie."
|
"spróbować ponownie."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3270,11 +3271,19 @@ msgstr ""
|
|||||||
"upewnić, że baza kluczy (GNOME Keyring lub KWallet) jest uruchomiona i "
|
"upewnić, że baza kluczy (GNOME Keyring lub KWallet) jest uruchomiona i "
|
||||||
"odblokowana."
|
"odblokowana."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr "Anulowano logowanie: nie wpisano kodu uwierzytelniania dwuetapowego."
|
msgstr "Anulowano logowanie: nie wpisano kodu uwierzytelniania dwuetapowego."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Anulowano logowanie: nie wpisano hasła skrzynki pocztowej."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "To hasło skrzynki pocztowej nie odblokowało Twojego konta."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3283,35 +3292,79 @@ msgstr ""
|
|||||||
"ponownie, aby otrzymać nową."
|
"ponownie, aby otrzymać nową."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Logowanie się nie powiodło: {error}"
|
msgstr "Logowanie się nie powiodło: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "To hasło skrzynki pocztowej nie odblokowało Twojego konta. Spróbuj ponownie."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "To konto ma osobne hasło skrzynki pocztowej. Wpisz je, aby odblokować swoje pliki."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Hasło skrzynki pocztowej"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Hasło skrzynki pocztowej"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Pozostaw odblokowane na tym komputerze"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Zapisuje odblokowanie w systemowym breloku kluczy, aby Proton Drive otwierał się bez pytania po każdym logowaniu. W przeciwnym razie wpisujesz hasło raz na sesję."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Odblokuj"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "Proton Drive jest zablokowany. Wpisz hasło skrzynki pocztowej, aby go odblokować."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Odblokowano."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Nie udało się odblokować"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Uwierzytelnianie dwuskładnikowe"
|
msgstr "Uwierzytelnianie dwuskładnikowe"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Proszę wpisać kod z aplikacji uwierzytelniającej lub jeden z kodów "
|
"Proszę wpisać kod z aplikacji uwierzytelniającej lub jeden z kodów "
|
||||||
"odzyskiwania."
|
"odzyskiwania."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Kod uwierzytelniania"
|
msgstr "Kod uwierzytelniania"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Potwierdź"
|
msgstr "Potwierdź"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Wylogować się?"
|
msgstr "Wylogować się?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3319,7 +3372,7 @@ msgstr ""
|
|||||||
"Proton Drive rozłączy się i przestanie synchronizować do czasu ponownego "
|
"Proton Drive rozłączy się i przestanie synchronizować do czasu ponownego "
|
||||||
"zalogowania. Pliki znajdujące się już na tym komputerze pozostaną na miejscu."
|
"zalogowania. Pliki znajdujące się już na tym komputerze pozostaną na miejscu."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Wyloguj się"
|
msgstr "Wyloguj się"
|
||||||
|
|
||||||
@@ -4689,40 +4742,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Uruchom ponownie teraz"
|
msgstr "Uruchom ponownie teraz"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "Użyto {size}"
|
msgstr "Użyto {size}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "Użyto {used} z {total} ({percent}%)"
|
msgstr "Użyto {used} z {total} ({percent}%)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Połączono z Proton Drive"
|
msgstr "Połączono z Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Twoje pliki są dostępne."
|
msgstr "Twoje pliki są dostępne."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Rozłączono z Proton Drive"
|
msgstr "Rozłączono z Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Usługa Proton Drive zatrzymała się. Pliki będą niedostępne do jej ponownego "
|
"Usługa Proton Drive zatrzymała się. Pliki będą niedostępne do jej ponownego "
|
||||||
"uruchomienia."
|
"uruchomienia."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Ukończono synchronizację"
|
msgstr "Ukończono synchronizację"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4732,27 +4785,27 @@ msgstr[2] "Ukończono przesyłanie {n} plików."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title} — {done} z {total}"
|
msgstr "{title} — {done} z {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title} — {detail} ({done} z {total})"
|
msgstr "{title} — {detail} ({done} z {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title} — {detail}…"
|
msgstr "{title} — {detail}…"
|
||||||
@@ -4760,7 +4813,7 @@ msgstr "{title} — {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
||||||
@@ -4768,38 +4821,38 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} z {total} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} z {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} w pamięci podręcznej — bez limitu"
|
msgstr "{used} w pamięci podręcznej — bez limitu"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "Użyto {used} z {limit}"
|
msgstr "Użyto {used} z {limit}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · wznowienie {time}"
|
msgstr "{queued} · wznowienie {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Wznowienie {time}"
|
msgstr "Wznowienie {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Do czasu wznowienia"
|
msgstr "Do czasu wznowienia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
@@ -4807,81 +4860,81 @@ msgstr[0] "{n} zmiana wymaga uwagi"
|
|||||||
msgstr[1] "{n} zmiany wymagają uwagi"
|
msgstr[1] "{n} zmiany wymagają uwagi"
|
||||||
msgstr[2] "{n} zmian wymaga uwagi"
|
msgstr[2] "{n} zmian wymaga uwagi"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Tylko pliki w pamięci podręcznej"
|
msgstr "Tylko pliki w pamięci podręcznej"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Synchronizowanie"
|
msgstr "Synchronizowanie"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Aktualne"
|
msgstr "Aktualne"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "Proton Drive nie jest uruchomiony"
|
msgstr "Proton Drive nie jest uruchomiony"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Nie odpowiada"
|
msgstr "Nie odpowiada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "Proton Drive zbyt długo nie odpowiada"
|
msgstr "Proton Drive zbyt długo nie odpowiada"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "później"
|
msgstr "później"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "o %H:%M"
|
msgstr "o %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "%-d %b"
|
msgstr "%-d %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "Brak plików dostępnych offline"
|
msgstr "Brak plików dostępnych offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Należy kliknąć plik prawym przyciskiem myszy i wybrać „Oznacz jako dostępne "
|
"Należy kliknąć plik prawym przyciskiem myszy i wybrać „Oznacz jako dostępne "
|
||||||
"offline”."
|
"offline”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Nie można oznaczyć jako tylko online"
|
msgstr "Nie można oznaczyć jako tylko online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Wyświetl mniej"
|
msgstr "Wyświetl mniej"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5959,26 +6012,31 @@ msgstr[2] "↑ wysyłanie: {n}"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "Proton Drive nie odpowiada"
|
msgstr "Proton Drive nie odpowiada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Zalogowano jako {username} — zablokowane"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Zalogowano jako {username} — brak połączenia"
|
msgstr "Zalogowano jako {username} — brak połączenia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Nie zalogowano"
|
msgstr "Nie zalogowano"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Błąd: {error}"
|
msgstr "Błąd: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "Proton Drive wysłał nieoczekiwaną odpowiedź"
|
msgstr "Proton Drive wysłał nieoczekiwaną odpowiedź"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
@@ -5986,7 +6044,7 @@ msgstr[0] "Aktualne w {mountpoint} ({n} przypięty)"
|
|||||||
msgstr[1] "Aktualne w {mountpoint} ({n} przypięte)"
|
msgstr[1] "Aktualne w {mountpoint} ({n} przypięte)"
|
||||||
msgstr[2] "Aktualne w {mountpoint} ({n} przypiętych)"
|
msgstr[2] "Aktualne w {mountpoint} ({n} przypiętych)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
@@ -5994,7 +6052,7 @@ msgstr[0] "Synchronizowanie — {queued} (przypięte: {n})"
|
|||||||
msgstr[1] "Synchronizowanie — {queued} (przypięte: {n})"
|
msgstr[1] "Synchronizowanie — {queued} (przypięte: {n})"
|
||||||
msgstr[2] "Synchronizowanie — {queued} (przypięte: {n})"
|
msgstr[2] "Synchronizowanie — {queued} (przypięte: {n})"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -6003,13 +6061,13 @@ msgstr[1] "Offline — tylko pliki w pamięci podręcznej (przypięte: {n})"
|
|||||||
msgstr[2] "Offline — tylko pliki w pamięci podręcznej (przypięte: {n})"
|
msgstr[2] "Offline — tylko pliki w pamięci podręcznej (przypięte: {n})"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Offline — {queued}"
|
msgstr "Offline — {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
@@ -6017,39 +6075,39 @@ msgstr[0] "{n} problem — wyświetl"
|
|||||||
msgstr[1] "{n} problemy — wyświetl"
|
msgstr[1] "{n} problemy — wyświetl"
|
||||||
msgstr[2] "{n} problemów — wyświetl"
|
msgstr[2] "{n} problemów — wyświetl"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Zaloguj się…"
|
msgstr "Zaloguj się…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Otwórz Proton Drive"
|
msgstr "Otwórz Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Otwórz katalog"
|
msgstr "Otwórz katalog"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Wznów synchronizację"
|
msgstr "Wznów synchronizację"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Wstrzymaj synchronizację"
|
msgstr "Wstrzymaj synchronizację"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Połącz"
|
msgstr "Połącz"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Ukryj ikonę w obszarze powiadamiania"
|
msgstr "Ukryj ikonę w obszarze powiadamiania"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Zatrzymaj Proton Drive…"
|
msgstr "Zatrzymaj Proton Drive…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Zakończ"
|
msgstr "Zakończ"
|
||||||
|
|
||||||
|
|||||||
+198
-140
@@ -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-05 01:01+0200\n"
|
"POT-Creation-Date: 2026-10-07 02:39+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"
|
||||||
@@ -57,7 +57,7 @@ msgstr "%-d de %b de %Y"
|
|||||||
msgid "%A, %B %-d, %Y, %H:%M"
|
msgid "%A, %B %-d, %Y, %H:%M"
|
||||||
msgstr "%A, %-d de %B de %Y, %H:%M"
|
msgstr "%A, %-d de %B de %Y, %H:%M"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:743
|
#: crates/pdfs-gui/src/app/main.rs:747
|
||||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||||
@@ -70,91 +70,91 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
|
|||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr "Meus arquivos"
|
msgstr "Meus arquivos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:746 crates/pdfs-gui/src/app/main.rs:1390
|
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr "Fotos"
|
msgstr "Fotos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:751
|
#: crates/pdfs-gui/src/app/main.rs:755
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr "Compartilhados comigo"
|
msgstr "Compartilhados comigo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:756
|
#: crates/pdfs-gui/src/app/main.rs:760
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr "Compartilhados por mim"
|
msgstr "Compartilhados por mim"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:759
|
#: crates/pdfs-gui/src/app/main.rs:763
|
||||||
#: 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:481
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr "Computadores"
|
msgstr "Computadores"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:760
|
#: crates/pdfs-gui/src/app/main.rs:764
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr "Lixeira"
|
msgstr "Lixeira"
|
||||||
|
|
||||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:762
|
#: crates/pdfs-gui/src/app/main.rs:766
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr "Sincronização"
|
msgstr "Sincronização"
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1079
|
#: crates/pdfs-gui/src/app/main.rs:1083
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr "{what}: {detail}"
|
msgstr "{what}: {detail}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1098
|
#: crates/pdfs-gui/src/app/main.rs:1102
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr "Você está offline"
|
msgstr "Você está offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1099
|
#: crates/pdfs-gui/src/app/main.rs:1103
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr "Isso não existe mais"
|
msgstr "Isso não existe mais"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1100
|
#: crates/pdfs-gui/src/app/main.rs:1104
|
||||||
msgid "You don't have access to that"
|
msgid "You don't have access to that"
|
||||||
msgstr "Você não tem acesso a isso"
|
msgstr "Você não tem acesso a isso"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1101
|
#: crates/pdfs-gui/src/app/main.rs:1105
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr "Algo alterou isso antes"
|
msgstr "Algo alterou isso antes"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1102
|
#: crates/pdfs-gui/src/app/main.rs:1106
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr "Seu Proton Drive está cheio"
|
msgstr "Seu Proton Drive está cheio"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1143 crates/pdfs-gui/src/app/main.rs:1372
|
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Preferências"
|
msgstr "Preferências"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1144
|
#: crates/pdfs-gui/src/app/main.rs:1148
|
||||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||||
msgid "Keyboard Shortcuts"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr "Atalhos de teclado"
|
msgstr "Atalhos de teclado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1146
|
#: crates/pdfs-gui/src/app/main.rs:1150
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr "Sobre o Proton Drive for Linux"
|
msgstr "Sobre o Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1151
|
#: crates/pdfs-gui/src/app/main.rs:1155
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr "Menu principal"
|
msgstr "Menu principal"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr "Proton Drive for Linux"
|
msgstr "Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -165,23 +165,23 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Cliente não oficial — sem afiliação, endosso ou suporte da Proton AG."
|
"Cliente não oficial — sem afiliação, endosso ou suporte da Proton AG."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1220
|
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr "Código-fonte"
|
msgstr "Código-fonte"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr "Termos de Serviço da Proton"
|
msgstr "Termos de Serviço da Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
#: crates/pdfs-gui/src/app/main.rs:1232
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr "Política de Privacidade da Proton"
|
msgstr "Política de Privacidade da Proton"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1233
|
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr "Aviso legal"
|
msgstr "Aviso legal"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -204,7 +204,7 @@ msgstr ""
|
|||||||
"Este software é fornecido “no estado em que se encontra”, sem garantia de "
|
"Este software é fornecido “no estado em que se encontra”, sem garantia de "
|
||||||
"qualquer tipo. Mantenha uma cópia de todos os dados que você não pode perder."
|
"qualquer tipo. Mantenha uma cópia de todos os dados que você não pode perder."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1245
|
#: crates/pdfs-gui/src/app/main.rs:1249
|
||||||
msgid ""
|
msgid ""
|
||||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||||
@@ -214,7 +214,7 @@ msgstr ""
|
|||||||
"\">GeoNames</a>, licenciados sob <a href=\"https://creativecommons.org/"
|
"\">GeoNames</a>, licenciados sob <a href=\"https://creativecommons.org/"
|
||||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid ""
|
msgid ""
|
||||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||||
@@ -224,7 +224,7 @@ msgstr ""
|
|||||||
"fronteiras de países do <a href=\"https://www.naturalearthdata.com/"
|
"fronteiras de países do <a href=\"https://www.naturalearthdata.com/"
|
||||||
"\">Natural Earth</a>, que são de domínio público."
|
"\">Natural Earth</a>, que são de domínio público."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1261
|
#: crates/pdfs-gui/src/app/main.rs:1265
|
||||||
msgid ""
|
msgid ""
|
||||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||||
@@ -240,15 +240,15 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1272
|
#: crates/pdfs-gui/src/app/main.rs:1276
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Colaboradores do Proton Drive for Linux"
|
msgstr "Colaboradores do Proton Drive for Linux"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1310
|
#: crates/pdfs-gui/src/app/main.rs:1314
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr "Parar o Proton Drive?"
|
msgstr "Parar o Proton Drive?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1311
|
#: crates/pdfs-gui/src/app/main.rs:1315
|
||||||
msgid ""
|
msgid ""
|
||||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||||
"Drive starts again at your next login."
|
"Drive starts again at your next login."
|
||||||
@@ -256,7 +256,7 @@ msgstr ""
|
|||||||
"Meus arquivos fica offline e nada é sincronizado até você se conectar "
|
"Meus arquivos fica offline e nada é sincronizado até você se conectar "
|
||||||
"novamente. O Proton Drive será iniciado de novo no seu próximo login."
|
"novamente. O Proton Drive será iniciado de novo no seu próximo login."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1313 crates/pdfs-gui/src/app/main.rs:1588
|
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||||
@@ -271,7 +271,8 @@ msgstr ""
|
|||||||
#: 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
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: crates/pdfs-gui/src/app/pages/login.rs:378
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:492
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
#: crates/pdfs-gui/src/app/pages/shared.rs:946
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
|
||||||
@@ -286,30 +287,30 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1314
|
#: crates/pdfs-gui/src/app/main.rs:1318
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Parar"
|
msgstr "Parar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1331
|
#: crates/pdfs-gui/src/app/main.rs:1335
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr "Não foi possível parar o Proton Drive"
|
msgstr "Não foi possível parar o Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1332
|
#: crates/pdfs-gui/src/app/main.rs:1336
|
||||||
msgid "The Proton Drive service did not stop."
|
msgid "The Proton Drive service did not stop."
|
||||||
msgstr "O serviço do Proton Drive não parou."
|
msgstr "O serviço do Proton Drive não parou."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Geral"
|
msgstr "Geral"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr "Pesquisar no Drive"
|
msgstr "Pesquisar no Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||||
#: 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:554
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||||
@@ -318,38 +319,38 @@ msgstr "Pesquisar no Drive"
|
|||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr "Atualizar"
|
msgstr "Atualizar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Atalhos de teclado"
|
msgstr "Atalhos de teclado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr "Arquivos"
|
msgstr "Arquivos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1379
|
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr "Nova pasta"
|
msgstr "Nova pasta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr "Enviar arquivos"
|
msgstr "Enviar arquivos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr "Voltar / avançar"
|
msgstr "Voltar / avançar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1382
|
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr "Pasta superior"
|
msgstr "Pasta superior"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
#: crates/pdfs-gui/src/app/main.rs:1387
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr "Grade / lista"
|
msgstr "Grade / lista"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
#: crates/pdfs-gui/src/app/main.rs:1388
|
||||||
#: 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
|
||||||
@@ -358,7 +359,7 @@ msgstr "Grade / lista"
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr "Renomear"
|
msgstr "Renomear"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1385 crates/pdfs-gui/src/app/main.rs:1405
|
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
#: crates/pdfs-gui/src/app/pages/browser.rs:357
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
#: crates/pdfs-gui/src/app/pages/browser.rs:900
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
#: crates/pdfs-gui/src/app/pages/browser.rs:932
|
||||||
@@ -368,73 +369,73 @@ msgstr "Renomear"
|
|||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr "Mover para a lixeira"
|
msgstr "Mover para a lixeira"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr "Limpar a seleção"
|
msgstr "Limpar a seleção"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
#: crates/pdfs-gui/src/app/main.rs:1396
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr "Miniaturas maiores"
|
msgstr "Miniaturas maiores"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr "Miniaturas menores"
|
msgstr "Miniaturas menores"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr "Redefinir tamanho das miniaturas"
|
msgstr "Redefinir tamanho das miniaturas"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
#: crates/pdfs-gui/src/app/main.rs:1399
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr "Selecionar tudo"
|
msgstr "Selecionar tudo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1399
|
#: crates/pdfs-gui/src/app/main.rs:1403
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr "Visualizador de fotos"
|
msgstr "Visualizador de fotos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
#: crates/pdfs-gui/src/app/main.rs:1405
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr "Foto anterior / próxima"
|
msgstr "Foto anterior / próxima"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
#: crates/pdfs-gui/src/app/main.rs:1406
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr "Primeira / última foto"
|
msgstr "Primeira / última foto"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1403
|
#: crates/pdfs-gui/src/app/main.rs:1407
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr "Mostrar detalhes"
|
msgstr "Mostrar detalhes"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1404
|
#: crates/pdfs-gui/src/app/main.rs:1408
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr "Tela cheia"
|
msgstr "Tela cheia"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1406
|
#: crates/pdfs-gui/src/app/main.rs:1410
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Fechar"
|
msgstr "Fechar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1496
|
#: crates/pdfs-gui/src/app/main.rs:1500
|
||||||
msgid "Select a single item to rename it"
|
msgid "Select a single item to rename it"
|
||||||
msgstr "Selecione um único item para renomeá-lo"
|
msgstr "Selecione um único item para renomeá-lo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
#: crates/pdfs-gui/src/app/main.rs:1660
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1370
|
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
||||||
msgid "Not connected"
|
msgid "Not connected"
|
||||||
msgstr "Não conectado"
|
msgstr "Não conectado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
#: crates/pdfs-gui/src/app/main.rs:1661
|
||||||
msgid "The Proton Drive service isn't running."
|
msgid "The Proton Drive service isn't running."
|
||||||
msgstr "O serviço do Proton Drive não está em execução."
|
msgstr "O serviço do Proton Drive não está em execução."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1665
|
#: crates/pdfs-gui/src/app/main.rs:1669
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
|
||||||
#: crates/pdfs-gui/src/main.rs:444
|
#: crates/pdfs-gui/src/main.rs:453
|
||||||
msgid "Connecting…"
|
msgid "Connecting…"
|
||||||
msgstr "Conectando…"
|
msgstr "Conectando…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1666
|
#: crates/pdfs-gui/src/app/main.rs:1670
|
||||||
msgid "Waiting for the Proton Drive service to start."
|
msgid "Waiting for the Proton Drive service to start."
|
||||||
msgstr "Aguardando o serviço do Proton Drive iniciar."
|
msgstr "Aguardando o serviço do Proton Drive iniciar."
|
||||||
|
|
||||||
@@ -1283,7 +1284,7 @@ msgstr "Não foi possível carregar os álbuns"
|
|||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1006
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
#: crates/pdfs-gui/src/app/pages/shared.rs:1122
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
#: crates/pdfs-gui/src/app/pages/status.rs:750
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
#: crates/pdfs-gui/src/app/pages/status.rs:1518
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:424
|
||||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:617
|
||||||
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
#: crates/pdfs-gui/src/app/widgets/share_dialog.rs:438
|
||||||
@@ -1551,7 +1552,7 @@ msgid "Make available offline"
|
|||||||
msgstr "Disponibilizar offline"
|
msgstr "Disponibilizar offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
#: crates/pdfs-gui/src/app/pages/browser.rs:347
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1493
|
#: crates/pdfs-gui/src/app/pages/status.rs:1494
|
||||||
msgid "Make online only"
|
msgid "Make online only"
|
||||||
msgstr "Tornar somente online"
|
msgstr "Tornar somente online"
|
||||||
|
|
||||||
@@ -2708,7 +2709,7 @@ msgid "Sync paused until you resume"
|
|||||||
msgstr "Sincronização pausada até você retomar"
|
msgstr "Sincronização pausada até você retomar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
#: crates/pdfs-gui/src/app/pages/locations.rs:529
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1323 crates/pdfs-gui/src/main.rs:237
|
#: crates/pdfs-gui/src/app/pages/status.rs:1324 crates/pdfs-gui/src/main.rs:246
|
||||||
msgid "Sync paused"
|
msgid "Sync paused"
|
||||||
msgstr "Sincronização pausada"
|
msgstr "Sincronização pausada"
|
||||||
|
|
||||||
@@ -3177,25 +3178,25 @@ msgstr "Digite seu e-mail e senha."
|
|||||||
msgid "Signing in…"
|
msgid "Signing in…"
|
||||||
msgstr "Entrando…"
|
msgstr "Entrando…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:155
|
#: crates/pdfs-gui/src/app/pages/login.rs:160
|
||||||
msgid "Complete the verification to continue…"
|
msgid "Complete the verification to continue…"
|
||||||
msgstr "Conclua a verificação para continuar…"
|
msgstr "Conclua a verificação para continuar…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:165
|
#: crates/pdfs-gui/src/app/pages/login.rs:185
|
||||||
msgid "login cancelled"
|
msgid "login cancelled"
|
||||||
msgstr "login cancelado"
|
msgstr "login cancelado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:198
|
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
||||||
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
msgid "Too many sign-in attempts. Wait a few minutes and try again."
|
||||||
msgstr "Muitas tentativas de entrar. Aguarde alguns minutos e tente novamente."
|
msgstr "Muitas tentativas de entrar. Aguarde alguns minutos e tente novamente."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:204
|
#: crates/pdfs-gui/src/app/pages/login.rs:224
|
||||||
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
msgid "Couldn't reach Proton. Check your internet connection and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Não foi possível acessar o Proton. Verifique sua conexão com a internet e "
|
"Não foi possível acessar o Proton. Verifique sua conexão com a internet e "
|
||||||
"tente novamente."
|
"tente novamente."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:207
|
#: crates/pdfs-gui/src/app/pages/login.rs:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
"Signed in, but the session couldn't be saved to the system keyring. Make "
|
||||||
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
|
||||||
@@ -3204,11 +3205,19 @@ msgstr ""
|
|||||||
"Certifique-se de que um chaveiro (GNOME Keyring ou KWallet) esteja em "
|
"Certifique-se de que um chaveiro (GNOME Keyring ou KWallet) esteja em "
|
||||||
"execução e desbloqueado."
|
"execução e desbloqueado."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:210
|
#: crates/pdfs-gui/src/app/pages/login.rs:230
|
||||||
msgid "Sign-in cancelled: no two-factor code was entered."
|
msgid "Sign-in cancelled: no two-factor code was entered."
|
||||||
msgstr "Entrada cancelada: nenhum código de dois fatores foi digitado."
|
msgstr "Entrada cancelada: nenhum código de dois fatores foi digitado."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:213
|
#: crates/pdfs-gui/src/app/pages/login.rs:233
|
||||||
|
msgid "Sign-in cancelled: no mailbox password was entered."
|
||||||
|
msgstr "Entrada cancelada: nenhuma senha da caixa de correio foi digitada."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:236
|
||||||
|
msgid "That mailbox password didn't unlock your account."
|
||||||
|
msgstr "Essa senha da caixa de correio não desbloqueou sua conta."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:239
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
|
||||||
"new one."
|
"new one."
|
||||||
@@ -3217,35 +3226,79 @@ msgstr ""
|
|||||||
"receber uma nova."
|
"receber uma nova."
|
||||||
|
|
||||||
#. Translators: {error} is an error message, usually in English.
|
#. Translators: {error} is an error message, usually in English.
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:218
|
#: crates/pdfs-gui/src/app/pages/login.rs:244
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Sign-in failed: {error}"
|
msgid "Sign-in failed: {error}"
|
||||||
msgstr "Falha ao entrar: {error}"
|
msgstr "Falha ao entrar: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:298
|
#: crates/pdfs-gui/src/app/pages/login.rs:354
|
||||||
|
msgid "That mailbox password didn't unlock your account. Try again."
|
||||||
|
msgstr "Essa senha da caixa de correio não desbloqueou sua conta. Tente novamente."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:356
|
||||||
|
msgid ""
|
||||||
|
"This account has a separate mailbox password. Enter it to unlock your files."
|
||||||
|
msgstr "Esta conta tem uma senha da caixa de correio separada. Digite-a para desbloquear seus arquivos."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:359
|
||||||
|
msgid "Mailbox Password"
|
||||||
|
msgstr "Senha da caixa de correio"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:365
|
||||||
|
msgid "Mailbox password"
|
||||||
|
msgstr "Senha da caixa de correio"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:369
|
||||||
|
msgid "Keep unlocked on this computer"
|
||||||
|
msgstr "Manter desbloqueado neste computador"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:371
|
||||||
|
msgid ""
|
||||||
|
"Stores the unlock in the system keyring, so Proton Drive opens without "
|
||||||
|
"asking after every login. Otherwise you enter the password once per session."
|
||||||
|
msgstr "Guarda o desbloqueio no chaveiro do sistema, para que o Proton Drive abra sem perguntar após cada login. Caso contrário, você digita a senha uma vez por sessão."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:379
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:432
|
||||||
|
msgid "Unlock"
|
||||||
|
msgstr "Desbloquear"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:431
|
||||||
|
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
|
||||||
|
msgstr "O Proton Drive está bloqueado. Digite a senha da caixa de correio para desbloqueá-lo."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:460
|
||||||
|
msgid "Unlocked."
|
||||||
|
msgstr "Desbloqueado."
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:465
|
||||||
|
msgid "Couldn't unlock"
|
||||||
|
msgstr "Não foi possível desbloquear"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/login.rs:478
|
||||||
msgid "Two-Factor Authentication"
|
msgid "Two-Factor Authentication"
|
||||||
msgstr "Autenticação de dois fatores"
|
msgstr "Autenticação de dois fatores"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:300
|
#: crates/pdfs-gui/src/app/pages/login.rs:480
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter the code from your authenticator app, or one of your recovery codes."
|
"Enter the code from your authenticator app, or one of your recovery codes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Digite o código do seu aplicativo autenticador ou um dos seus códigos de "
|
"Digite o código do seu aplicativo autenticador ou um dos seus códigos de "
|
||||||
"recuperação."
|
"recuperação."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:306
|
#: crates/pdfs-gui/src/app/pages/login.rs:486
|
||||||
msgid "Authentication code"
|
msgid "Authentication code"
|
||||||
msgstr "Código de autenticação"
|
msgstr "Código de autenticação"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:313
|
#: crates/pdfs-gui/src/app/pages/login.rs:493
|
||||||
msgid "Confirm"
|
msgid "Confirm"
|
||||||
msgstr "Confirmar"
|
msgstr "Confirmar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:341
|
#: crates/pdfs-gui/src/app/pages/login.rs:521
|
||||||
msgid "Sign Out?"
|
msgid "Sign Out?"
|
||||||
msgstr "Sair?"
|
msgstr "Sair?"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:343
|
#: crates/pdfs-gui/src/app/pages/login.rs:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
|
||||||
"already on this computer stay where they are."
|
"already on this computer stay where they are."
|
||||||
@@ -3253,7 +3306,7 @@ msgstr ""
|
|||||||
"O Proton Drive será desconectado e deixará de sincronizar até você entrar "
|
"O Proton Drive será desconectado e deixará de sincronizar até você entrar "
|
||||||
"novamente. Os arquivos que já estão neste computador permanecem onde estão."
|
"novamente. Os arquivos que já estão neste computador permanecem onde estão."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:345
|
#: crates/pdfs-gui/src/app/pages/login.rs:525
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr "Sair"
|
msgstr "Sair"
|
||||||
|
|
||||||
@@ -4604,40 +4657,40 @@ msgid "Restart Now"
|
|||||||
msgstr "Reiniciar agora"
|
msgstr "Reiniciar agora"
|
||||||
|
|
||||||
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
#. Translators: {size} is an amount of storage, such as "1.2 GiB".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:912
|
#: crates/pdfs-gui/src/app/pages/status.rs:913
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{size} used"
|
msgid "{size} used"
|
||||||
msgstr "{size} usados"
|
msgstr "{size} usados"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:923
|
#: crates/pdfs-gui/src/app/pages/status.rs:924
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {total} used ({percent}%)"
|
msgid "{used} of {total} used ({percent}%)"
|
||||||
msgstr "{used} de {total} usados ({percent}%)"
|
msgstr "{used} de {total} usados ({percent}%)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:961
|
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
||||||
msgid "Proton Drive connected"
|
msgid "Proton Drive connected"
|
||||||
msgstr "Proton Drive conectado"
|
msgstr "Proton Drive conectado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:962
|
#: crates/pdfs-gui/src/app/pages/status.rs:963
|
||||||
msgid "Your files are available."
|
msgid "Your files are available."
|
||||||
msgstr "Seus arquivos estão disponíveis."
|
msgstr "Seus arquivos estão disponíveis."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:967
|
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
||||||
msgid "Proton Drive disconnected"
|
msgid "Proton Drive disconnected"
|
||||||
msgstr "Proton Drive desconectado"
|
msgstr "Proton Drive desconectado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:968
|
#: crates/pdfs-gui/src/app/pages/status.rs:969
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Proton Drive service stopped. Files aren't available until it restarts."
|
"The Proton Drive service stopped. Files aren't available until it restarts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"O serviço do Proton Drive parou. Os arquivos ficarão indisponíveis até ele "
|
"O serviço do Proton Drive parou. Os arquivos ficarão indisponíveis até ele "
|
||||||
"reiniciar."
|
"reiniciar."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1037
|
#: crates/pdfs-gui/src/app/pages/status.rs:1038
|
||||||
msgid "Sync complete"
|
msgid "Sync complete"
|
||||||
msgstr "Sincronização concluída"
|
msgstr "Sincronização concluída"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1039
|
#: crates/pdfs-gui/src/app/pages/status.rs:1040
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} file finished transferring."
|
msgid "{n} file finished transferring."
|
||||||
msgid_plural "{n} files finished transferring."
|
msgid_plural "{n} files finished transferring."
|
||||||
@@ -4646,27 +4699,27 @@ msgstr[1] "{n} arquivos terminaram de ser transferidos."
|
|||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, such as
|
#. Translators: a background job's progress. {title} is the job, such as
|
||||||
#. "Scanning Photos"; {done} and {total} are counts.
|
#. "Scanning Photos"; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1117
|
#: crates/pdfs-gui/src/app/pages/status.rs:1118
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {done} of {total}"
|
msgid "{title} — {done} of {total}"
|
||||||
msgstr "{title} — {done} de {total}"
|
msgstr "{title} — {done} de {total}"
|
||||||
|
|
||||||
#. Translators: a background job's progress. {title} is the job, {detail}
|
#. Translators: a background job's progress. {title} is the job, {detail}
|
||||||
#. what it is working on; {done} and {total} are counts.
|
#. what it is working on; {done} and {total} are counts.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1120
|
#: crates/pdfs-gui/src/app/pages/status.rs:1121
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail} ({done} of {total})"
|
msgid "{title} — {detail} ({done} of {total})"
|
||||||
msgstr "{title} — {detail} ({done} de {total})"
|
msgstr "{title} — {detail} ({done} de {total})"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job.
|
#. Translators: a background job still running. {title} is the job.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1122
|
#: crates/pdfs-gui/src/app/pages/status.rs:1123
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title}…"
|
msgid "{title}…"
|
||||||
msgstr "{title}…"
|
msgstr "{title}…"
|
||||||
|
|
||||||
#. Translators: a background job still running. {title} is the job,
|
#. Translators: a background job still running. {title} is the job,
|
||||||
#. {detail} what it is working on.
|
#. {detail} what it is working on.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1125
|
#: crates/pdfs-gui/src/app/pages/status.rs:1126
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{title} — {detail}…"
|
msgid "{title} — {detail}…"
|
||||||
msgstr "{title} — {detail}…"
|
msgstr "{title} — {detail}…"
|
||||||
@@ -4674,7 +4727,7 @@ msgstr "{title} — {detail}…"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} the size moved so far and {speed} a size such as
|
#. file name, {done} the size moved so far and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1154
|
#: crates/pdfs-gui/src/app/pages/status.rs:1155
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} ({speed}/s)"
|
msgid "{arrow} {name} — {done} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} ({speed}/s)"
|
||||||
@@ -4682,118 +4735,118 @@ msgstr "{arrow} {name} — {done} ({speed}/s)"
|
|||||||
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
#. Translators: a file being transferred. {arrow} is ↑ or ↓, {name} the
|
||||||
#. file name, {done} and {total} sizes and {speed} a size such as
|
#. file name, {done} and {total} sizes and {speed} a size such as
|
||||||
#. "1.2 MiB"; "/s" means per second.
|
#. "1.2 MiB"; "/s" means per second.
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1162
|
#: crates/pdfs-gui/src/app/pages/status.rs:1163
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
msgid "{arrow} {name} — {done} of {total} ({speed}/s)"
|
||||||
msgstr "{arrow} {name} — {done} de {total} ({speed}/s)"
|
msgstr "{arrow} {name} — {done} de {total} ({speed}/s)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1254
|
#: crates/pdfs-gui/src/app/pages/status.rs:1255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} cached — no limit set"
|
msgid "{used} cached — no limit set"
|
||||||
msgstr "{used} em cache — sem limite definido"
|
msgstr "{used} em cache — sem limite definido"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1260
|
#: crates/pdfs-gui/src/app/pages/status.rs:1261
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{used} of {limit} used"
|
msgid "{used} of {limit} used"
|
||||||
msgstr "{used} de {limit} usados"
|
msgstr "{used} de {limit} usados"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1328
|
#: crates/pdfs-gui/src/app/pages/status.rs:1329
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{queued} · resumes {time}"
|
msgid "{queued} · resumes {time}"
|
||||||
msgstr "{queued} · retoma {time}"
|
msgstr "{queued} · retoma {time}"
|
||||||
|
|
||||||
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
#. Translators: {time} is when syncing resumes, such as "at 14:30"
|
||||||
#. or "Tue 09:00".
|
#. or "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1333
|
#: crates/pdfs-gui/src/app/pages/status.rs:1334
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Resumes {time}"
|
msgid "Resumes {time}"
|
||||||
msgstr "Retoma {time}"
|
msgstr "Retoma {time}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1335
|
#: crates/pdfs-gui/src/app/pages/status.rs:1336
|
||||||
msgid "Until you resume"
|
msgid "Until you resume"
|
||||||
msgstr "Até você retomar"
|
msgstr "Até você retomar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1342 crates/pdfs-gui/src/main.rs:239
|
#: crates/pdfs-gui/src/app/pages/status.rs:1343 crates/pdfs-gui/src/main.rs:248
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} change needs attention"
|
msgid "{n} change needs attention"
|
||||||
msgid_plural "{n} changes need attention"
|
msgid_plural "{n} changes need attention"
|
||||||
msgstr[0] "{n} alteração requer atenção"
|
msgstr[0] "{n} alteração requer atenção"
|
||||||
msgstr[1] "{n} alterações requerem atenção"
|
msgstr[1] "{n} alterações requerem atenção"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1352
|
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
#: crates/pdfs-gui/src/app/widgets/details.rs:108
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1353
|
#: crates/pdfs-gui/src/app/pages/status.rs:1354
|
||||||
msgid "Cached files only"
|
msgid "Cached files only"
|
||||||
msgstr "Somente arquivos em cache"
|
msgstr "Somente arquivos em cache"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1358
|
#: crates/pdfs-gui/src/app/pages/status.rs:1359
|
||||||
msgctxt "state"
|
msgctxt "state"
|
||||||
msgid "Syncing"
|
msgid "Syncing"
|
||||||
msgstr "Sincronizando"
|
msgstr "Sincronizando"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1364
|
#: crates/pdfs-gui/src/app/pages/status.rs:1365
|
||||||
msgid "Up to date"
|
msgid "Up to date"
|
||||||
msgstr "Atualizado"
|
msgstr "Atualizado"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1371
|
#: crates/pdfs-gui/src/app/pages/status.rs:1372
|
||||||
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
#: crates/pdfs-gui/src/hud/mod.rs:608 crates/pdfs-gui/src/hud/mod.rs:622
|
||||||
msgid "Proton Drive isn't running"
|
msgid "Proton Drive isn't running"
|
||||||
msgstr "O Proton Drive não está em execução"
|
msgstr "O Proton Drive não está em execução"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1376
|
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Não está respondendo"
|
msgstr "Não está respondendo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1377
|
#: crates/pdfs-gui/src/app/pages/status.rs:1378
|
||||||
msgid "Proton Drive is taking too long to answer"
|
msgid "Proton Drive is taking too long to answer"
|
||||||
msgstr "O Proton Drive está demorando demais para responder"
|
msgstr "O Proton Drive está demorando demais para responder"
|
||||||
|
|
||||||
#. Translators: stands in for a time that could not be read, as in
|
#. Translators: stands in for a time that could not be read, as in
|
||||||
#. "Resumes later".
|
#. "Resumes later".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1415
|
#: crates/pdfs-gui/src/app/pages/status.rs:1416
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1430
|
#: crates/pdfs-gui/src/app/pages/status.rs:1431
|
||||||
msgid "later"
|
msgid "later"
|
||||||
msgstr "mais tarde"
|
msgstr "mais tarde"
|
||||||
|
|
||||||
#. Translators: strftime format for a time later today, such as "at 14:30".
|
#. Translators: strftime format for a time later today, such as "at 14:30".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1419
|
#: crates/pdfs-gui/src/app/pages/status.rs:1420
|
||||||
msgid "at %H:%M"
|
msgid "at %H:%M"
|
||||||
msgstr "às %H:%M"
|
msgstr "às %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a time within the next week, such as
|
#. Translators: strftime format for a time within the next week, such as
|
||||||
#. "Tue 09:00".
|
#. "Tue 09:00".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1423
|
#: crates/pdfs-gui/src/app/pages/status.rs:1424
|
||||||
msgid "%a %H:%M"
|
msgid "%a %H:%M"
|
||||||
msgstr "%a às %H:%M"
|
msgstr "%a às %H:%M"
|
||||||
|
|
||||||
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
#. Translators: strftime format for a date further ahead, such as "23 Sep".
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1426
|
#: crates/pdfs-gui/src/app/pages/status.rs:1427
|
||||||
msgid "%e %b"
|
msgid "%e %b"
|
||||||
msgstr "em %-d de %b"
|
msgstr "em %-d de %b"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1456
|
#: crates/pdfs-gui/src/app/pages/status.rs:1457
|
||||||
msgid "No files kept offline"
|
msgid "No files kept offline"
|
||||||
msgstr "Nenhum arquivo mantido offline"
|
msgstr "Nenhum arquivo mantido offline"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1458
|
#: crates/pdfs-gui/src/app/pages/status.rs:1459
|
||||||
msgid "Right-click a file and choose “Make available offline”."
|
msgid "Right-click a file and choose “Make available offline”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Clique com o botão direito em um arquivo e escolha “Disponibilizar offline”."
|
"Clique com o botão direito em um arquivo e escolha “Disponibilizar offline”."
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1509
|
#: crates/pdfs-gui/src/app/pages/status.rs:1510
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1516
|
#: crates/pdfs-gui/src/app/pages/status.rs:1517
|
||||||
msgid "Couldn't make it online only"
|
msgid "Couldn't make it online only"
|
||||||
msgstr "Não foi possível torná-lo somente online"
|
msgstr "Não foi possível torná-lo somente online"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1533
|
#: crates/pdfs-gui/src/app/pages/status.rs:1534
|
||||||
msgid "Show fewer"
|
msgid "Show fewer"
|
||||||
msgstr "Mostrar menos"
|
msgstr "Mostrar menos"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1536
|
#: crates/pdfs-gui/src/app/pages/status.rs:1537
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Show all {n} file"
|
msgid "Show all {n} file"
|
||||||
msgid_plural "Show all {n} files"
|
msgid_plural "Show all {n} files"
|
||||||
@@ -5855,40 +5908,45 @@ msgstr[1] "↑ {n} enviando"
|
|||||||
msgid "Proton Drive isn't responding"
|
msgid "Proton Drive isn't responding"
|
||||||
msgstr "O Proton Drive não está respondendo"
|
msgstr "O Proton Drive não está respondendo"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:172
|
#: crates/pdfs-gui/src/main.rs:173
|
||||||
|
#, rust-format
|
||||||
|
msgid "Signed in as {username} — locked"
|
||||||
|
msgstr "Conectado como {username} — bloqueado"
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/main.rs:181
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Signed in as {username} — not connected"
|
msgid "Signed in as {username} — not connected"
|
||||||
msgstr "Conectado como {username} — sem conexão"
|
msgstr "Conectado como {username} — sem conexão"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:177
|
#: crates/pdfs-gui/src/main.rs:186
|
||||||
msgid "Not signed in"
|
msgid "Not signed in"
|
||||||
msgstr "Não conectado"
|
msgstr "Não conectado"
|
||||||
|
|
||||||
#. Translators: {error} is an error message, in English.
|
#. Translators: {error} is an error message, in English.
|
||||||
#: crates/pdfs-gui/src/main.rs:180
|
#: crates/pdfs-gui/src/main.rs:189
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Error: {error}"
|
msgid "Error: {error}"
|
||||||
msgstr "Erro: {error}"
|
msgstr "Erro: {error}"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:201
|
#: crates/pdfs-gui/src/main.rs:210
|
||||||
msgid "Proton Drive sent an unexpected reply"
|
msgid "Proton Drive sent an unexpected reply"
|
||||||
msgstr "O Proton Drive enviou uma resposta inesperada"
|
msgstr "O Proton Drive enviou uma resposta inesperada"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:246
|
#: crates/pdfs-gui/src/main.rs:255
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Up to date in {mountpoint} ({n} pinned)"
|
msgid "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
msgid_plural "Up to date in {mountpoint} ({n} pinned)"
|
||||||
msgstr[0] "Atualizado em {mountpoint} ({n} fixado)"
|
msgstr[0] "Atualizado em {mountpoint} ({n} fixado)"
|
||||||
msgstr[1] "Atualizado em {mountpoint} ({n} fixados)"
|
msgstr[1] "Atualizado em {mountpoint} ({n} fixados)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:253
|
#: crates/pdfs-gui/src/main.rs:262
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Syncing — {queued} ({n} pinned)"
|
msgid "Syncing — {queued} ({n} pinned)"
|
||||||
msgid_plural "Syncing — {queued} ({n} pinned)"
|
msgid_plural "Syncing — {queued} ({n} pinned)"
|
||||||
msgstr[0] "Sincronizando — {queued} ({n} fixado)"
|
msgstr[0] "Sincronizando — {queued} ({n} fixado)"
|
||||||
msgstr[1] "Sincronizando — {queued} ({n} fixados)"
|
msgstr[1] "Sincronizando — {queued} ({n} fixados)"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:260
|
#: crates/pdfs-gui/src/main.rs:269
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — cached files only ({n} pinned)"
|
msgid "Offline — cached files only ({n} pinned)"
|
||||||
msgid_plural "Offline — cached files only ({n} pinned)"
|
msgid_plural "Offline — cached files only ({n} pinned)"
|
||||||
@@ -5896,52 +5954,52 @@ msgstr[0] "Offline — somente arquivos em cache ({n} fixado)"
|
|||||||
msgstr[1] "Offline — somente arquivos em cache ({n} fixados)"
|
msgstr[1] "Offline — somente arquivos em cache ({n} fixados)"
|
||||||
|
|
||||||
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
#. Translators: {queued} is a queue summary such as "3 uploads queued".
|
||||||
#: crates/pdfs-gui/src/main.rs:266
|
#: crates/pdfs-gui/src/main.rs:275
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Offline — {queued}"
|
msgid "Offline — {queued}"
|
||||||
msgstr "Offline — {queued}"
|
msgstr "Offline — {queued}"
|
||||||
|
|
||||||
#. Translators: a menu item that opens the list of failing changes.
|
#. Translators: a menu item that opens the list of failing changes.
|
||||||
#: crates/pdfs-gui/src/main.rs:296
|
#: crates/pdfs-gui/src/main.rs:305
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} issue — View"
|
msgid "{n} issue — View"
|
||||||
msgid_plural "{n} issues — View"
|
msgid_plural "{n} issues — View"
|
||||||
msgstr[0] "{n} problema — Ver"
|
msgstr[0] "{n} problema — Ver"
|
||||||
msgstr[1] "{n} problemas — Ver"
|
msgstr[1] "{n} problemas — Ver"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:402
|
#: crates/pdfs-gui/src/main.rs:411
|
||||||
msgid "Sign In…"
|
msgid "Sign In…"
|
||||||
msgstr "Entrar…"
|
msgstr "Entrar…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:403
|
#: crates/pdfs-gui/src/main.rs:412
|
||||||
msgid "Open Proton Drive"
|
msgid "Open Proton Drive"
|
||||||
msgstr "Abrir o Proton Drive"
|
msgstr "Abrir o Proton Drive"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:409
|
#: crates/pdfs-gui/src/main.rs:418
|
||||||
msgid "Open Folder"
|
msgid "Open Folder"
|
||||||
msgstr "Abrir pasta"
|
msgstr "Abrir pasta"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:421
|
#: crates/pdfs-gui/src/main.rs:430
|
||||||
msgid "Resume Sync"
|
msgid "Resume Sync"
|
||||||
msgstr "Retomar sincronização"
|
msgstr "Retomar sincronização"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:423
|
#: crates/pdfs-gui/src/main.rs:432
|
||||||
msgid "Pause Sync"
|
msgid "Pause Sync"
|
||||||
msgstr "Pausar sincronização"
|
msgstr "Pausar sincronização"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:442
|
#: crates/pdfs-gui/src/main.rs:451
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr "Conectar"
|
msgstr "Conectar"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:449
|
#: crates/pdfs-gui/src/main.rs:458
|
||||||
msgid "Hide Tray Icon"
|
msgid "Hide Tray Icon"
|
||||||
msgstr "Ocultar ícone da bandeja"
|
msgstr "Ocultar ícone da bandeja"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:453
|
#: crates/pdfs-gui/src/main.rs:462
|
||||||
msgid "Stop Proton Drive…"
|
msgid "Stop Proton Drive…"
|
||||||
msgstr "Parar o Proton Drive…"
|
msgstr "Parar o Proton Drive…"
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/main.rs:457
|
#: crates/pdfs-gui/src/main.rs:466
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Sair"
|
msgstr "Sair"
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user