mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
feat(gui): rewrite the search launcher with a preview pane
The launcher (pdfs-prompt) now follows the app's theme: the theme code moved into a shared theme.rs, the prompt's stylesheet lives in resources/prompt.css on the libadwaita palette, the Proton-purple accent pin is gone, and every activation re-reads the Proton theme and open_with settings so changes in the app apply without restarting the launcher. The window is rebuilt in src/hud/: - one list with Recent, Pinned and Best matches sections; a click selects, a double-click or Enter opens, focus stays in the entry - rows show a thumbnail, the name with its matched characters in bold, location, sync badge, size and age - a preview pane with a large thumbnail, type, size, modified date, location and availability, plus Open (Enter), Show in Folder (Ctrl+Enter, via FileManager1) and Copy Path (Ctrl+C / Ctrl+Shift+C) - thumbnails from the freedesktop cache, local decoding (written back to the shared cache) or the daemon, on two worker threads - a history of opened files that fills the Recent section and adds a frecency bonus to search ranking - the mount check before opening a Drive file runs off the main thread with a 2 s timeout, and Escape cancels a slow open - rows can be dragged out as files - the search debounce drops to 80 ms New strings are translated in every catalog.
This commit is contained in:
1 parent
7099106802
commit
7a087b8827
22 files changed
+5310
-2929
No files matched your search
@@ -27,5 +27,6 @@ fn main() {
|
||||
println!("cargo:rerun-if-changed=resources/icons");
|
||||
println!("cargo:rerun-if-changed=resources/style.css");
|
||||
println!("cargo:rerun-if-changed=resources/proton-theme.css");
|
||||
println!("cargo:rerun-if-changed=resources/prompt.css");
|
||||
println!("cargo:rerun-if-changed=../../packaging/io.narl.proton-drive-linux.svg");
|
||||
}
|
||||
@@ -33,5 +33,7 @@
|
||||
<gresource prefix="/de/nils/protondrivelinux">
|
||||
<file>style.css</file>
|
||||
<file>proton-theme.css</file>
|
||||
<!-- The search launcher's own sheet, over the same palette. -->
|
||||
<file>prompt.css</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
@@ -0,0 +1,224 @@
|
||||
/* The search launcher (pdfs-prompt). Colours come from the libadwaita
|
||||
palette, so the launcher follows the system accent, light/dark and high
|
||||
contrast like the app; the opt-in Proton theme recolours both alike. */
|
||||
|
||||
window.launcher-window {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.launcher-card {
|
||||
background-color: var(--view-bg-color);
|
||||
color: var(--view-fg-color);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 14px;
|
||||
box-shadow: 0 16px 48px rgb(0 0 0 / 35%);
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
padding: 14px 18px;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
-gtk-icon-size: 20px;
|
||||
color: color-mix(in srgb, currentColor 55%, transparent);
|
||||
}
|
||||
|
||||
.search-entry {
|
||||
background: none;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
padding: 2px 0;
|
||||
font-size: 1.15rem;
|
||||
}
|
||||
|
||||
.key-hint {
|
||||
padding: 2px 8px;
|
||||
border-radius: 6px;
|
||||
background-color: color-mix(in srgb, currentColor 8%, transparent);
|
||||
font-size: 0.75rem;
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.chip-row {
|
||||
padding: 10px 14px;
|
||||
border-bottom: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.chip {
|
||||
padding: 4px 14px;
|
||||
min-height: 0;
|
||||
border-radius: 999px;
|
||||
background: none;
|
||||
border: 1px solid var(--border-color);
|
||||
box-shadow: none;
|
||||
font-size: 0.86rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.chip:hover {
|
||||
background-color: color-mix(in srgb, currentColor 6%, transparent);
|
||||
}
|
||||
|
||||
.chip:checked {
|
||||
background-color: var(--accent-bg-color);
|
||||
color: var(--accent-fg-color);
|
||||
border-color: var(--accent-bg-color);
|
||||
}
|
||||
|
||||
/* --- results ------------------------------------------------------------ */
|
||||
|
||||
.results {
|
||||
padding: 2px 8px 10px 8px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
padding: 12px 10px 6px 10px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 0.78rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.section-icon {
|
||||
-gtk-icon-size: 14px;
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.result-list {
|
||||
background: none;
|
||||
}
|
||||
|
||||
.result-row {
|
||||
padding: 6px 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.result-row:hover {
|
||||
background-color: color-mix(in srgb, currentColor 5%, transparent);
|
||||
}
|
||||
|
||||
/* A soft tint rather than a solid accent bar: the text keeps its colour, so
|
||||
the highlighted match stays readable on the selected row. */
|
||||
.result-row:selected,
|
||||
.result-row:selected:hover {
|
||||
background-color: color-mix(in srgb, var(--accent-bg-color) 18%, transparent);
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.result-name {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.result-location,
|
||||
.result-meta {
|
||||
font-size: 0.8rem;
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.result-row:selected .result-location,
|
||||
.result-row:selected .result-meta {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.thumb {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.result-badge,
|
||||
.preview-badge {
|
||||
-gtk-icon-size: 14px;
|
||||
}
|
||||
|
||||
.badge-pinned {
|
||||
color: var(--success-color);
|
||||
}
|
||||
|
||||
.badge-cached {
|
||||
color: var(--accent-color);
|
||||
}
|
||||
|
||||
.badge-cloud,
|
||||
.badge-local {
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
/* --- preview ------------------------------------------------------------ */
|
||||
|
||||
.preview {
|
||||
padding: 16px;
|
||||
background-color: color-mix(in srgb, currentColor 3%, transparent);
|
||||
}
|
||||
|
||||
.preview-thumb {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.preview-thumb .thumb {
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.preview-name {
|
||||
font-weight: 700;
|
||||
font-size: 1.05rem;
|
||||
}
|
||||
|
||||
.preview-kind {
|
||||
font-size: 0.85rem;
|
||||
opacity: 0.6;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.preview-key {
|
||||
font-size: 0.8rem;
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.preview-value {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.preview-actions {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.preview-action {
|
||||
padding: 6px 8px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.preview-shortcut {
|
||||
font-size: 0.75rem;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.preview-feedback {
|
||||
margin-top: 6px;
|
||||
font-size: 0.8rem;
|
||||
color: var(--accent-color);
|
||||
}
|
||||
|
||||
.preview-empty {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/* --- footer ------------------------------------------------------------- */
|
||||
|
||||
.footer {
|
||||
padding: 8px 16px;
|
||||
border-top: 1px solid var(--border-color);
|
||||
}
|
||||
|
||||
.footer-text {
|
||||
font-size: 0.78rem;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
statuspage.compact > scrolledwindow > viewport > box {
|
||||
margin: 24px 12px;
|
||||
}
|
||||
@@ -8,6 +8,8 @@ pub(crate) mod events;
|
||||
pub(crate) mod i18n;
|
||||
pub(crate) mod pages;
|
||||
pub(crate) mod reload;
|
||||
#[path = "../theme.rs"]
|
||||
pub(crate) mod theme;
|
||||
pub(crate) mod widgets;
|
||||
|
||||
use compat::*;
|
||||
@@ -30,6 +32,7 @@ use pages::takeout::*;
|
||||
use pages::trash::*;
|
||||
use pages::verify::*;
|
||||
use reload::{LoadTicket, Loader, replace_items};
|
||||
use theme::{load_resources, proton_theme_active, set_proton_theme};
|
||||
use widgets::compat::*;
|
||||
use widgets::details::*;
|
||||
use widgets::file_list::*;
|
||||
@@ -210,7 +213,7 @@ fn main() -> glib::ExitCode {
|
||||
.flags(gio::ApplicationFlags::HANDLES_COMMAND_LINE)
|
||||
.build();
|
||||
app.connect_startup(|_| {
|
||||
load_proton_theme();
|
||||
load_resources("/de/nils/protondrivelinux/style.css");
|
||||
if let Ok(dirs) = AppDirs::new() {
|
||||
set_proton_theme(dirs.load_config().proton_theme.unwrap_or(false));
|
||||
}
|
||||
@@ -287,157 +290,6 @@ pub(crate) fn spawn_tray() {
|
||||
}
|
||||
}
|
||||
|
||||
/// Register the bundled GResources (custom icons, the stylesheet) and load the
|
||||
/// app stylesheet. The Proton theme is a separate provider, applied by
|
||||
/// [`set_proton_theme`] from the saved preference.
|
||||
fn load_proton_theme() {
|
||||
let bytes = include_bytes!(concat!(env!("OUT_DIR"), "/pdfs.gresource"));
|
||||
let resource_data = glib::Bytes::from_static(bytes);
|
||||
if let Ok(resource) = gio::Resource::from_data(&resource_data) {
|
||||
gio::resources_register(&resource);
|
||||
} else {
|
||||
tracing::error!("failed to load gresource bundle");
|
||||
}
|
||||
|
||||
let Some(display) = gtk4::gdk::Display::default() else {
|
||||
return;
|
||||
};
|
||||
let provider = gtk4::CssProvider::new();
|
||||
provider.load_from_resource("/de/nils/protondrivelinux/style.css");
|
||||
// Above the user's own gtk.css, which often imports a whole theme: its
|
||||
// `button { padding: 6px 10px; min-width: 16px }` would otherwise pad every
|
||||
// photo tile and push the grid past the window. Every rule in the sheet is
|
||||
// scoped to the app's own classes, so nothing else the user styled changes.
|
||||
// One above the Proton theme too, so the app's rules refine it.
|
||||
gtk4::style_context_add_provider_for_display(
|
||||
&display,
|
||||
&provider,
|
||||
gtk4::STYLE_PROVIDER_PRIORITY_USER + 2,
|
||||
);
|
||||
gtk4::IconTheme::for_display(&display).add_resource_path("/de/nils/protondrivelinux/icons");
|
||||
}
|
||||
|
||||
thread_local! {
|
||||
/// The Proton theme provider while it is installed. Kept so turning the
|
||||
/// preference off can remove exactly what turning it on added.
|
||||
static PROTON_THEME: RefCell<Option<gtk4::CssProvider>> = const { RefCell::new(None) };
|
||||
}
|
||||
|
||||
/// Whether the Proton theme is on.
|
||||
fn proton_theme_active() -> bool {
|
||||
PROTON_THEME.with(|slot| slot.borrow().is_some())
|
||||
}
|
||||
|
||||
/// libadwaita's own stylesheet, bundled in the library.
|
||||
const ADWAITA_STYLESHEET: &str = "/org/gnome/Adwaita/styles/gtk.css";
|
||||
|
||||
/// The Proton palette laid over it, from our own bundle.
|
||||
const PROTON_PALETTE: &str = "/de/nils/protondrivelinux/proton-theme.css";
|
||||
|
||||
/// Make the theme provider's `@media (prefers-color-scheme)` and
|
||||
/// `(prefers-contrast)` rules match what libadwaita shows, now and whenever it
|
||||
/// changes. A provider evaluates those itself, and a new one assumes light.
|
||||
///
|
||||
/// The properties are set by name because they only exist since GTK 4.20, and
|
||||
/// the app still runs on older GTK, whose libadwaita has no such rules anyway.
|
||||
fn follow_style_manager(provider: >k4::CssProvider) {
|
||||
fn set_enum(provider: >k4::CssProvider, property: &str, nick: &str) {
|
||||
let Some(pspec) = provider.find_property(property) else {
|
||||
return;
|
||||
};
|
||||
if let Some(value) = glib::EnumClass::with_type(pspec.value_type())
|
||||
.and_then(|class| class.to_value_by_nick(nick))
|
||||
{
|
||||
provider.set_property_from_value(property, &value);
|
||||
}
|
||||
}
|
||||
fn apply(provider: >k4::CssProvider, manager: &adw::StyleManager) {
|
||||
let scheme = if manager.is_dark() { "dark" } else { "light" };
|
||||
set_enum(provider, "prefers-color-scheme", scheme);
|
||||
let contrast = if manager.is_high_contrast() {
|
||||
"more"
|
||||
} else {
|
||||
"no-preference"
|
||||
};
|
||||
set_enum(provider, "prefers-contrast", contrast);
|
||||
}
|
||||
|
||||
let manager = adw::StyleManager::default();
|
||||
apply(provider, &manager);
|
||||
// Weak, so a provider the preference removed isn't kept alive; its
|
||||
// handlers then do nothing.
|
||||
let weak = provider.downgrade();
|
||||
let weak_dark = weak.clone();
|
||||
manager.connect_dark_notify(move |manager| {
|
||||
if let Some(provider) = weak_dark.upgrade() {
|
||||
apply(&provider, manager);
|
||||
}
|
||||
});
|
||||
manager.connect_high_contrast_notify(move |manager| {
|
||||
if let Some(provider) = weak.upgrade() {
|
||||
apply(&provider, manager);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Paint the app in the Proton web apps' colours (`on`) or follow the system
|
||||
/// theme and accent colour.
|
||||
///
|
||||
/// Setting libadwaita's colour variables alone isn't enough: a GTK theme the
|
||||
/// user's `gtk.css` imports (Catppuccin, Fluent, ...) sits above the app and
|
||||
/// hard-codes its own accent into hundreds of rules. So the theme provider,
|
||||
/// one above the user's CSS, first resets every property, then re-applies
|
||||
/// libadwaita's whole stylesheet and finally the Proton palette, which leaves
|
||||
/// nothing of the user's theme inside the app.
|
||||
fn set_proton_theme(on: bool) {
|
||||
let Some(display) = gtk4::gdk::Display::default() else {
|
||||
return;
|
||||
};
|
||||
PROTON_THEME.with(|slot| {
|
||||
let mut slot = slot.borrow_mut();
|
||||
match (on, slot.as_ref()) {
|
||||
(true, None) => {
|
||||
let stylesheet = |path| {
|
||||
gio::resources_lookup_data(path, gio::ResourceLookupFlags::NONE)
|
||||
.map(|bytes| String::from_utf8_lossy(&bytes).into_owned())
|
||||
};
|
||||
let palette = stylesheet(PROTON_PALETTE).unwrap_or_default();
|
||||
let css = match stylesheet(ADWAITA_STYLESHEET) {
|
||||
// Its images are named relative to the sheet, which a
|
||||
// string loaded here doesn't have.
|
||||
Ok(adwaita) => format!(
|
||||
"* {{ all: unset; }}\n{}\n{palette}",
|
||||
adwaita.replace(
|
||||
"url(\"assets/",
|
||||
"url(\"resource:///org/gnome/Adwaita/styles/assets/"
|
||||
)
|
||||
),
|
||||
// Still recolours everything that follows libadwaita's
|
||||
// variables; only a custom theme's own rules show through.
|
||||
Err(e) => {
|
||||
tracing::warn!("libadwaita stylesheet not found, only recolouring: {e}");
|
||||
palette
|
||||
}
|
||||
};
|
||||
let provider = gtk4::CssProvider::new();
|
||||
follow_style_manager(&provider);
|
||||
provider.load_from_string(&css);
|
||||
gtk4::style_context_add_provider_for_display(
|
||||
&display,
|
||||
&provider,
|
||||
gtk4::STYLE_PROVIDER_PRIORITY_USER + 1,
|
||||
);
|
||||
*slot = Some(provider);
|
||||
}
|
||||
(false, Some(provider)) => {
|
||||
gtk4::style_context_remove_provider_for_display(&display, provider);
|
||||
*slot = None;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Build the application window, wire the two pages, kick off the refresh loop,
|
||||
/// and present it.
|
||||
fn build_window(app: &adw::Application) {
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
//! Match highlighting: which characters of a result name the query matched,
|
||||
//! as Pango markup with those characters in bold.
|
||||
//!
|
||||
//! Each query term is looked for as a substring of the name first, and as a
|
||||
//! subsequence ("rpt" in "report") when that fails, which is roughly how the
|
||||
//! daemon's ranking treats a term too. Case is folded one character at a
|
||||
//! time, so every range stays on a character boundary of the original name,
|
||||
//! whatever the script.
|
||||
|
||||
use gtk4::glib;
|
||||
|
||||
/// One character of a name: its byte range and its case-folded form.
|
||||
struct Folded {
|
||||
start: usize,
|
||||
end: usize,
|
||||
folded: String,
|
||||
}
|
||||
|
||||
fn fold(text: &str) -> Vec<Folded> {
|
||||
text.char_indices()
|
||||
.map(|(start, c)| Folded {
|
||||
start,
|
||||
end: start + c.len_utf8(),
|
||||
folded: c.to_lowercase().collect(),
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// The byte ranges of `name` that `query` matched, sorted and merged.
|
||||
pub(crate) fn ranges(name: &str, query: &str) -> Vec<(usize, usize)> {
|
||||
let chars = fold(name);
|
||||
let mut found: Vec<(usize, usize)> = Vec::new();
|
||||
for term in query.split_whitespace() {
|
||||
let term: Vec<String> = fold(term).into_iter().map(|c| c.folded).collect();
|
||||
if let Some(at) = substring(&chars, &term) {
|
||||
found.push((chars[at].start, chars[at + term.len() - 1].end));
|
||||
} else if let Some(hits) = subsequence(&chars, &term) {
|
||||
found.extend(hits.into_iter().map(|at| (chars[at].start, chars[at].end)));
|
||||
}
|
||||
}
|
||||
found.sort_unstable();
|
||||
let mut merged: Vec<(usize, usize)> = Vec::with_capacity(found.len());
|
||||
for (start, end) in found {
|
||||
match merged.last_mut() {
|
||||
Some(last) if start <= last.1 => last.1 = last.1.max(end),
|
||||
_ => merged.push((start, end)),
|
||||
}
|
||||
}
|
||||
merged
|
||||
}
|
||||
|
||||
/// Where `term` first occurs in `chars`, as a character index.
|
||||
fn substring(chars: &[Folded], term: &[String]) -> Option<usize> {
|
||||
if term.is_empty() || term.len() > chars.len() {
|
||||
return None;
|
||||
}
|
||||
(0..=chars.len() - term.len()).find(|&at| {
|
||||
chars[at..at + term.len()]
|
||||
.iter()
|
||||
.zip(term)
|
||||
.all(|(c, t)| c.folded == *t)
|
||||
})
|
||||
}
|
||||
|
||||
/// The character indices of the leftmost match of `term` as a subsequence,
|
||||
/// or `None` when not every character of it can be found in order.
|
||||
fn subsequence(chars: &[Folded], term: &[String]) -> Option<Vec<usize>> {
|
||||
if term.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let mut hits = Vec::with_capacity(term.len());
|
||||
let mut next = 0;
|
||||
for wanted in term {
|
||||
let at = (next..chars.len()).find(|&i| chars[i].folded == *wanted)?;
|
||||
hits.push(at);
|
||||
next = at + 1;
|
||||
}
|
||||
Some(hits)
|
||||
}
|
||||
|
||||
/// `name` as Pango markup, escaped, with the matched characters in bold.
|
||||
pub(crate) fn markup(name: &str, query: &str) -> String {
|
||||
let mut out = String::with_capacity(name.len() + 16);
|
||||
let mut done = 0;
|
||||
for (start, end) in ranges(name, query) {
|
||||
out.push_str(&glib::markup_escape_text(&name[done..start]));
|
||||
out.push_str("<b>");
|
||||
out.push_str(&glib::markup_escape_text(&name[start..end]));
|
||||
out.push_str("</b>");
|
||||
done = end;
|
||||
}
|
||||
out.push_str(&glib::markup_escape_text(&name[done..]));
|
||||
out
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn a_substring_match_is_one_range_in_any_case() {
|
||||
assert_eq!(ranges("Tax Report.pdf", "REP"), vec![(4, 7)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_term_that_is_no_substring_falls_back_to_a_subsequence() {
|
||||
// r, p and t of "report", not the "rt" pair at the end of a substring.
|
||||
assert_eq!(ranges("report.txt", "rpt"), vec![(0, 1), (2, 3), (5, 6)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_term_with_no_match_highlights_nothing() {
|
||||
assert!(ranges("report.txt", "xyz").is_empty());
|
||||
assert!(ranges("report.txt", "").is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn several_terms_merge_into_sorted_ranges() {
|
||||
assert_eq!(
|
||||
ranges("tax return 2024", "2024 tax ret"),
|
||||
vec![(0, 3), (4, 7), (11, 15)]
|
||||
);
|
||||
assert_eq!(ranges("abc", "ab bc"), vec![(0, 3)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn non_ascii_names_keep_ranges_on_character_boundaries() {
|
||||
assert_eq!(ranges("Über Größe.odt", "über"), vec![(0, 5)]);
|
||||
assert_eq!(ranges("Über Größe.odt", "GRÖ"), vec![(6, 10)]);
|
||||
assert_eq!(markup("Über Größe.odt", "größe"), "Über <b>Größe</b>.odt");
|
||||
assert_eq!(
|
||||
markup("日本語のメモ.txt", "メモ"),
|
||||
"日本語の<b>メモ</b>.txt"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn markup_escapes_the_name_inside_and_outside_matches() {
|
||||
assert_eq!(markup("a<b>&c", "b"), "a<<b>b</b>>&c");
|
||||
assert_eq!(markup("R&D.pdf", "r&d"), "<b>R&D</b>.pdf");
|
||||
assert_eq!(markup("<none>", "zzz"), "<none>");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,363 @@
|
||||
//! Recent files and frecency.
|
||||
//!
|
||||
//! The launcher remembers what it opened in `prompt-history.json` under the
|
||||
//! state directory. With an empty query those files come first, and while
|
||||
//! searching a file opened often and lately gets a bonus on top of its match
|
||||
//! score (see [`frecency_bonus`]).
|
||||
//!
|
||||
//! One writer thread owns the file: it loads it, applies every recorded visit
|
||||
//! in order and writes the result back atomically. A visit recorded before the
|
||||
//! first load finished simply waits in the channel, so it is merged into the
|
||||
//! loaded list rather than overwriting it. The main thread only ever sees
|
||||
//! snapshots.
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::collections::HashMap;
|
||||
use std::io::Write;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::rc::Rc;
|
||||
|
||||
use gtk4::glib;
|
||||
|
||||
use crate::Hit;
|
||||
|
||||
/// How many files the history keeps. More than the launcher ever shows, so
|
||||
/// frecency still knows a file that dropped off the recent list.
|
||||
const MAX_VISITS: usize = 50;
|
||||
|
||||
/// The frecency bonus of one visit made just now.
|
||||
const VISIT_BONUS: f64 = 1500.0;
|
||||
|
||||
/// The bonus halves every this many days without a visit.
|
||||
const HALF_LIFE_DAYS: f64 = 14.0;
|
||||
|
||||
/// The largest frecency bonus. A name match is worth up to 20000 points, so
|
||||
/// history breaks ties between similar matches but cannot beat a much better
|
||||
/// one.
|
||||
const MAX_BONUS: f64 = 6000.0;
|
||||
|
||||
#[derive(Clone, serde::Serialize, serde::Deserialize)]
|
||||
pub(crate) struct Visit {
|
||||
pub(crate) hit: Hit,
|
||||
/// When the file was last opened, in epoch seconds.
|
||||
pub(crate) last: i64,
|
||||
pub(crate) count: u32,
|
||||
}
|
||||
|
||||
/// The history bonus for a file opened `count` times, the last time
|
||||
/// `age_secs` ago.
|
||||
pub(crate) fn frecency_bonus(count: u32, age_secs: i64) -> i64 {
|
||||
let age_days = age_secs.max(0) as f64 / 86_400.0;
|
||||
let bonus = f64::from(count) * VISIT_BONUS * 0.5f64.powf(age_days / HALF_LIFE_DAYS);
|
||||
bonus.min(MAX_BONUS) as i64
|
||||
}
|
||||
|
||||
/// Count one more visit of `hit` at `now`, newest first, and keep at most
|
||||
/// [`MAX_VISITS`]. The stored hit is replaced, so its size, date and sync
|
||||
/// state are the ones from the latest search.
|
||||
fn record(visits: &mut Vec<Visit>, hit: Hit, now: i64) {
|
||||
let key = hit.key();
|
||||
let count = match visits.iter().position(|visit| visit.hit.key() == key) {
|
||||
Some(at) => visits.remove(at).count.saturating_add(1),
|
||||
None => 1,
|
||||
};
|
||||
visits.insert(
|
||||
0,
|
||||
Visit {
|
||||
hit,
|
||||
last: now,
|
||||
count,
|
||||
},
|
||||
);
|
||||
visits.truncate(MAX_VISITS);
|
||||
}
|
||||
|
||||
/// Drop local files that no longer exist. Drive files stay: checking them
|
||||
/// would touch the mount, and a stale one only costs a row.
|
||||
fn prune(visits: &mut Vec<Visit>) -> bool {
|
||||
let before = visits.len();
|
||||
visits.retain(|visit| match &visit.hit {
|
||||
Hit::Local(hit) => Path::new(&hit.path).symlink_metadata().is_ok(),
|
||||
Hit::Drive(_) => true,
|
||||
});
|
||||
visits.len() != before
|
||||
}
|
||||
|
||||
fn load(path: &Path) -> Vec<Visit> {
|
||||
match std::fs::read(path) {
|
||||
Ok(bytes) => serde_json::from_slice(&bytes).unwrap_or_else(|e| {
|
||||
tracing::warn!("ignoring unreadable {}: {e}", path.display());
|
||||
Vec::new()
|
||||
}),
|
||||
Err(_) => Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Write the history through a temporary file and a rename, so a crash
|
||||
/// mid-write leaves the old file rather than half a new one.
|
||||
fn save(path: &Path, visits: &[Visit]) -> std::io::Result<()> {
|
||||
let json = serde_json::to_vec(visits).map_err(std::io::Error::other)?;
|
||||
if let Some(dir) = path.parent() {
|
||||
std::fs::create_dir_all(dir)?;
|
||||
}
|
||||
let tmp = path.with_extension("json.tmp");
|
||||
let mut file = std::fs::File::create(&tmp)?;
|
||||
file.write_all(&json)?;
|
||||
file.sync_all()?;
|
||||
std::fs::rename(&tmp, path)
|
||||
}
|
||||
|
||||
enum Command {
|
||||
Record(Hit, i64),
|
||||
Prune,
|
||||
}
|
||||
|
||||
/// The writer thread's loop: load, then apply commands until the launcher
|
||||
/// exits. `publish` receives the list after the load and after every change.
|
||||
fn serve(path: &Path, commands: &async_channel::Receiver<Command>, publish: impl Fn(Vec<Visit>)) {
|
||||
let mut visits = load(path);
|
||||
let pruned = prune(&mut visits);
|
||||
publish(visits.clone());
|
||||
if pruned && let Err(e) = save(path, &visits) {
|
||||
tracing::warn!("cannot write {}: {e}", path.display());
|
||||
}
|
||||
while let Ok(command) = commands.recv_blocking() {
|
||||
let changed = match command {
|
||||
Command::Record(hit, now) => {
|
||||
record(&mut visits, hit, now);
|
||||
true
|
||||
}
|
||||
Command::Prune => prune(&mut visits),
|
||||
};
|
||||
if changed {
|
||||
if let Err(e) = save(path, &visits) {
|
||||
tracing::warn!("cannot write {}: {e}", path.display());
|
||||
}
|
||||
publish(visits.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The main thread's view of the history.
|
||||
pub(crate) struct History {
|
||||
visits: Rc<RefCell<Vec<Visit>>>,
|
||||
commands: async_channel::Sender<Command>,
|
||||
}
|
||||
|
||||
impl History {
|
||||
/// Start the writer thread. `changed` runs on the main thread whenever a
|
||||
/// new snapshot arrives.
|
||||
pub(crate) fn start(path: PathBuf, changed: impl Fn() + 'static) -> Self {
|
||||
let (commands, inbox) = async_channel::unbounded();
|
||||
let (snapshots, updates) = async_channel::unbounded::<Vec<Visit>>();
|
||||
let spawned = std::thread::Builder::new()
|
||||
.name("prompt-history".into())
|
||||
.spawn(move || {
|
||||
serve(&path, &inbox, |visits| {
|
||||
let _ = snapshots.send_blocking(visits);
|
||||
})
|
||||
});
|
||||
if let Err(e) = spawned {
|
||||
tracing::warn!("cannot start the history writer: {e}");
|
||||
}
|
||||
|
||||
let visits = Rc::new(RefCell::new(Vec::new()));
|
||||
let shared = visits.clone();
|
||||
glib::spawn_future_local(async move {
|
||||
while let Ok(snapshot) = updates.recv().await {
|
||||
*shared.borrow_mut() = snapshot;
|
||||
changed();
|
||||
}
|
||||
});
|
||||
Self { visits, commands }
|
||||
}
|
||||
|
||||
/// Remember that `hit` was opened just now.
|
||||
pub(crate) fn record(&self, hit: Hit) {
|
||||
let _ = self.commands.try_send(Command::Record(hit, now()));
|
||||
}
|
||||
|
||||
/// Forget local files that were deleted since they were opened.
|
||||
pub(crate) fn prune(&self) {
|
||||
let _ = self.commands.try_send(Command::Prune);
|
||||
}
|
||||
|
||||
/// The most recently opened files, newest first.
|
||||
pub(crate) fn recent(&self, limit: usize) -> Vec<Hit> {
|
||||
self.visits
|
||||
.borrow()
|
||||
.iter()
|
||||
.take(limit)
|
||||
.map(|visit| visit.hit.clone())
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// The frecency bonus of every remembered file, by [`Hit::key`].
|
||||
pub(crate) fn bonuses(&self) -> HashMap<(bool, String), i64> {
|
||||
let now = now();
|
||||
self.visits
|
||||
.borrow()
|
||||
.iter()
|
||||
.map(|visit| {
|
||||
(
|
||||
visit.hit.key(),
|
||||
frecency_bonus(visit.count, now - visit.last),
|
||||
)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
fn now() -> i64 {
|
||||
std::time::SystemTime::now()
|
||||
.duration_since(std::time::UNIX_EPOCH)
|
||||
.map_or(0, |d| d.as_secs() as i64)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use pdfs_core::control::{LocalHit, SearchHit};
|
||||
|
||||
const DAY: i64 = 86_400;
|
||||
|
||||
fn drive(name: &str) -> Hit {
|
||||
Hit::Drive(SearchHit {
|
||||
name: name.into(),
|
||||
path: format!("Docs/{name}"),
|
||||
is_dir: false,
|
||||
size: 1,
|
||||
modified: 1,
|
||||
pinned: false,
|
||||
cached: false,
|
||||
uid: format!("v~{name}"),
|
||||
mounted_path: None,
|
||||
score: 0,
|
||||
})
|
||||
}
|
||||
|
||||
fn scratch_dir(test: &str) -> PathBuf {
|
||||
let dir = std::env::temp_dir().join(format!(
|
||||
"pdfs-prompt-history-{test}-{}-{}",
|
||||
std::process::id(),
|
||||
now()
|
||||
));
|
||||
std::fs::create_dir_all(&dir).unwrap();
|
||||
dir
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_bonus_halves_every_two_weeks() {
|
||||
assert_eq!(frecency_bonus(1, 0), 1500);
|
||||
assert_eq!(frecency_bonus(1, 14 * DAY), 750);
|
||||
assert_eq!(frecency_bonus(1, 28 * DAY), 375);
|
||||
assert_eq!(frecency_bonus(2, 14 * DAY), 1500);
|
||||
// A clock that went backwards counts as "just now", not as a boost.
|
||||
assert_eq!(frecency_bonus(1, -DAY), 1500);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_bonus_is_capped() {
|
||||
assert_eq!(frecency_bonus(4, 0), 6000);
|
||||
assert_eq!(frecency_bonus(1000, 0), 6000);
|
||||
assert!(frecency_bonus(1000, 365 * DAY) < 6000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_repeat_visit_moves_the_file_to_the_top_and_counts_it() {
|
||||
let mut visits = Vec::new();
|
||||
record(&mut visits, drive("a.pdf"), 10);
|
||||
record(&mut visits, drive("b.pdf"), 20);
|
||||
record(&mut visits, drive("a.pdf"), 30);
|
||||
assert_eq!(visits.len(), 2);
|
||||
assert_eq!(visits[0].hit.name(), "a.pdf");
|
||||
assert_eq!((visits[0].count, visits[0].last), (2, 30));
|
||||
assert_eq!(visits[1].count, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_history_keeps_the_newest_fifty_files() {
|
||||
let mut visits = Vec::new();
|
||||
for n in 0..60 {
|
||||
record(&mut visits, drive(&format!("{n}.pdf")), n);
|
||||
}
|
||||
assert_eq!(visits.len(), MAX_VISITS);
|
||||
assert_eq!(visits[0].hit.name(), "59.pdf");
|
||||
assert_eq!(visits[MAX_VISITS - 1].hit.name(), "10.pdf");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_history_file_round_trips() {
|
||||
let dir = scratch_dir("round-trip");
|
||||
let path = dir.join("prompt-history.json");
|
||||
let mut visits = Vec::new();
|
||||
record(&mut visits, drive("a.pdf"), 10);
|
||||
record(&mut visits, drive("a.pdf"), 20);
|
||||
save(&path, &visits).unwrap();
|
||||
|
||||
let loaded = load(&path);
|
||||
assert_eq!(loaded.len(), 1);
|
||||
assert_eq!(loaded[0].hit.key(), drive("a.pdf").key());
|
||||
assert_eq!((loaded[0].count, loaded[0].last), (2, 20));
|
||||
assert!(!path.with_extension("json.tmp").exists());
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn visits_recorded_before_the_load_are_merged_into_it() {
|
||||
let dir = scratch_dir("merge");
|
||||
let path = dir.join("prompt-history.json");
|
||||
let mut stored = Vec::new();
|
||||
record(&mut stored, drive("old.pdf"), 10);
|
||||
record(&mut stored, drive("old.pdf"), 20);
|
||||
save(&path, &stored).unwrap();
|
||||
|
||||
// Both visits are queued before the writer has read the file.
|
||||
let (commands, inbox) = async_channel::unbounded();
|
||||
commands
|
||||
.send_blocking(Command::Record(drive("old.pdf"), 30))
|
||||
.unwrap();
|
||||
commands
|
||||
.send_blocking(Command::Record(drive("new.pdf"), 40))
|
||||
.unwrap();
|
||||
drop(commands);
|
||||
|
||||
let published = RefCell::new(Vec::new());
|
||||
serve(&path, &inbox, |visits| published.borrow_mut().push(visits));
|
||||
|
||||
let last = published.borrow().last().cloned().unwrap();
|
||||
assert_eq!(last.len(), 2);
|
||||
assert_eq!(last[0].hit.name(), "new.pdf");
|
||||
assert_eq!((last[1].hit.name(), last[1].count), ("old.pdf", 3));
|
||||
let on_disk = load(&path);
|
||||
assert_eq!(on_disk.len(), 2);
|
||||
assert_eq!(on_disk[1].count, 3);
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pruning_drops_deleted_local_files_only() {
|
||||
let dir = scratch_dir("prune");
|
||||
let kept = dir.join("kept.txt");
|
||||
std::fs::write(&kept, "x").unwrap();
|
||||
let local = |path: &Path| {
|
||||
Hit::Local(LocalHit {
|
||||
name: path.file_name().unwrap().to_string_lossy().into_owned(),
|
||||
path: path.display().to_string(),
|
||||
is_dir: false,
|
||||
size: 1,
|
||||
modified: 1,
|
||||
score: 0,
|
||||
})
|
||||
};
|
||||
let mut visits = Vec::new();
|
||||
record(&mut visits, local(&kept), 1);
|
||||
record(&mut visits, local(&dir.join("gone.txt")), 2);
|
||||
record(&mut visits, drive("remote.pdf"), 3);
|
||||
|
||||
assert!(prune(&mut visits));
|
||||
let names: Vec<&str> = visits.iter().map(|visit| visit.hit.name()).collect();
|
||||
assert_eq!(names, ["remote.pdf", "kept.txt"]);
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,311 @@
|
||||
//! The preview pane beside the results: a thumbnail of the selected hit, what
|
||||
//! it is, where it is and whether it is on this computer, and the actions for
|
||||
//! it with their shortcuts.
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::path::Path;
|
||||
use std::rc::Rc;
|
||||
use std::time::Duration;
|
||||
|
||||
use adw::prelude::*;
|
||||
use gtk4::{gio, glib};
|
||||
|
||||
use super::row::{fill_slot, thumb_slot};
|
||||
use super::thumbs::Thumbs;
|
||||
use crate::{Hit, dates, gettext, human_bytes, pgettext};
|
||||
|
||||
/// Width of the pane.
|
||||
pub(crate) const PREVIEW_WIDTH: i32 = 300;
|
||||
|
||||
/// The thumbnail area, inside the pane's padding.
|
||||
const THUMB_WIDTH: i32 = 268;
|
||||
const THUMB_HEIGHT: i32 = 180;
|
||||
|
||||
/// How long "Path copied" stays up.
|
||||
const COPIED_FEEDBACK: Duration = Duration::from_millis(1500);
|
||||
|
||||
/// One label/value line of the details grid.
|
||||
struct Detail {
|
||||
title: gtk4::Label,
|
||||
value: gtk4::Label,
|
||||
}
|
||||
|
||||
impl Detail {
|
||||
fn new(grid: >k4::Grid, row: i32, title: &str) -> Self {
|
||||
let title = gtk4::Label::builder()
|
||||
.label(title)
|
||||
.xalign(0.0)
|
||||
.valign(gtk4::Align::Start)
|
||||
.build();
|
||||
title.add_css_class("preview-key");
|
||||
let value = gtk4::Label::builder()
|
||||
.xalign(0.0)
|
||||
.hexpand(true)
|
||||
.wrap(true)
|
||||
.wrap_mode(gtk4::pango::WrapMode::WordChar)
|
||||
.build();
|
||||
value.add_css_class("preview-value");
|
||||
grid.attach(&title, 0, row, 1, 1);
|
||||
grid.attach(&value, 1, row, 1, 1);
|
||||
Self { title, value }
|
||||
}
|
||||
|
||||
/// Show `value`, or hide the line when there is nothing to say.
|
||||
fn set(&self, value: Option<&str>) {
|
||||
self.title.set_visible(value.is_some());
|
||||
self.value.set_visible(value.is_some());
|
||||
self.value.set_label(value.unwrap_or_default());
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct Preview {
|
||||
pub(crate) root: gtk4::Box,
|
||||
stack: gtk4::Stack,
|
||||
slot: gtk4::Overlay,
|
||||
name: gtk4::Label,
|
||||
kind: gtk4::Label,
|
||||
size: Detail,
|
||||
modified: Detail,
|
||||
location: Detail,
|
||||
availability: Detail,
|
||||
availability_icon: gtk4::Image,
|
||||
pub(crate) open: gtk4::Button,
|
||||
open_label: gtk4::Label,
|
||||
pub(crate) reveal: gtk4::Button,
|
||||
pub(crate) copy: gtk4::Button,
|
||||
copied: gtk4::Revealer,
|
||||
copied_timer: Rc<RefCell<Option<glib::SourceId>>>,
|
||||
}
|
||||
|
||||
/// A flat action button: the label, and its shortcut at the far end.
|
||||
fn action(icon: &str, label: &str, accelerator: &str) -> (gtk4::Button, gtk4::Label) {
|
||||
let content = gtk4::Box::new(gtk4::Orientation::Horizontal, 10);
|
||||
content.append(>k4::Image::from_icon_name(icon));
|
||||
let text = gtk4::Label::builder()
|
||||
.label(label)
|
||||
.xalign(0.0)
|
||||
.hexpand(true)
|
||||
.build();
|
||||
content.append(&text);
|
||||
let shortcut = gtk4::ShortcutLabel::new(accelerator);
|
||||
shortcut.add_css_class("preview-shortcut");
|
||||
content.append(&shortcut);
|
||||
let button = gtk4::Button::builder()
|
||||
.child(&content)
|
||||
.focus_on_click(false)
|
||||
.focusable(false)
|
||||
.build();
|
||||
button.add_css_class("flat");
|
||||
button.add_css_class("preview-action");
|
||||
(button, text)
|
||||
}
|
||||
|
||||
impl Preview {
|
||||
pub(crate) fn new() -> Self {
|
||||
let details = gtk4::Box::new(gtk4::Orientation::Vertical, 0);
|
||||
|
||||
let slot = thumb_slot(THUMB_WIDTH, THUMB_HEIGHT, 96, gtk4::ContentFit::Contain);
|
||||
slot.add_css_class("preview-thumb");
|
||||
details.append(&slot);
|
||||
|
||||
let name = gtk4::Label::builder()
|
||||
.xalign(0.0)
|
||||
.wrap(true)
|
||||
.wrap_mode(gtk4::pango::WrapMode::WordChar)
|
||||
.lines(3)
|
||||
.ellipsize(gtk4::pango::EllipsizeMode::End)
|
||||
.build();
|
||||
name.add_css_class("preview-name");
|
||||
details.append(&name);
|
||||
|
||||
let kind = gtk4::Label::builder()
|
||||
.xalign(0.0)
|
||||
.ellipsize(gtk4::pango::EllipsizeMode::End)
|
||||
.build();
|
||||
kind.add_css_class("preview-kind");
|
||||
details.append(&kind);
|
||||
|
||||
let grid = gtk4::Grid::builder()
|
||||
.row_spacing(6)
|
||||
.column_spacing(12)
|
||||
.build();
|
||||
grid.add_css_class("preview-details");
|
||||
let size = Detail::new(&grid, 0, &pgettext("column", "Size"));
|
||||
let modified = Detail::new(&grid, 1, &pgettext("column", "Modified"));
|
||||
let location = Detail::new(&grid, 2, &gettext("Location"));
|
||||
// Translators: a heading in the launcher's preview pane, followed by
|
||||
// "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
let availability = Detail::new(&grid, 3, &gettext("Availability"));
|
||||
// The availability value is an icon and a text.
|
||||
let availability_icon = gtk4::Image::new();
|
||||
availability_icon.add_css_class("preview-badge");
|
||||
grid.remove(&availability.value);
|
||||
let availability_box = gtk4::Box::new(gtk4::Orientation::Horizontal, 6);
|
||||
availability_box.append(&availability_icon);
|
||||
availability_box.append(&availability.value);
|
||||
grid.attach(&availability_box, 1, 3, 1, 1);
|
||||
details.append(&grid);
|
||||
|
||||
let spacer = gtk4::Box::builder().vexpand(true).build();
|
||||
details.append(&spacer);
|
||||
|
||||
let actions = gtk4::Box::new(gtk4::Orientation::Vertical, 2);
|
||||
actions.add_css_class("preview-actions");
|
||||
let (open, open_label) = action("document-open-symbolic", "", "Return");
|
||||
let (reveal, _) = action(
|
||||
"folder-open-symbolic",
|
||||
&gettext("Show in Folder"),
|
||||
"<Control>Return",
|
||||
);
|
||||
let (copy, _) = action("edit-copy-symbolic", &gettext("Copy Path"), "<Control>c");
|
||||
actions.append(&open);
|
||||
actions.append(&reveal);
|
||||
actions.append(©);
|
||||
details.append(&actions);
|
||||
|
||||
let copied_label = gtk4::Label::new(Some(&gettext("Path copied")));
|
||||
copied_label.add_css_class("preview-feedback");
|
||||
let copied = gtk4::Revealer::builder()
|
||||
.transition_type(gtk4::RevealerTransitionType::Crossfade)
|
||||
.child(&copied_label)
|
||||
.build();
|
||||
details.append(&copied);
|
||||
|
||||
let empty = gtk4::Image::from_icon_name("system-search-symbolic");
|
||||
empty.set_pixel_size(64);
|
||||
empty.add_css_class("preview-empty");
|
||||
|
||||
let stack = gtk4::Stack::builder()
|
||||
.transition_type(gtk4::StackTransitionType::Crossfade)
|
||||
.transition_duration(100)
|
||||
.vexpand(true)
|
||||
.build();
|
||||
stack.add_named(&empty, Some("empty"));
|
||||
stack.add_named(&details, Some("details"));
|
||||
|
||||
let root = gtk4::Box::builder()
|
||||
.orientation(gtk4::Orientation::Vertical)
|
||||
.width_request(PREVIEW_WIDTH)
|
||||
.build();
|
||||
root.add_css_class("preview");
|
||||
root.append(&stack);
|
||||
|
||||
Self {
|
||||
root,
|
||||
stack,
|
||||
slot,
|
||||
name,
|
||||
kind,
|
||||
size,
|
||||
modified,
|
||||
location,
|
||||
availability,
|
||||
availability_icon,
|
||||
open,
|
||||
open_label,
|
||||
reveal,
|
||||
copy,
|
||||
copied,
|
||||
copied_timer: Rc::new(RefCell::new(None)),
|
||||
}
|
||||
}
|
||||
|
||||
/// Show `hit`, or the empty pane when nothing is selected.
|
||||
pub(crate) fn show(&self, hit: Option<&Hit>, thumbs: &Rc<Thumbs>, mountpoint: &Path) {
|
||||
let Some(hit) = hit else {
|
||||
self.stack.set_visible_child_name("empty");
|
||||
return;
|
||||
};
|
||||
self.stack.set_visible_child_name("details");
|
||||
fill_slot(&self.slot, hit, thumbs, mountpoint);
|
||||
|
||||
self.name.set_label(hit.name());
|
||||
self.name.set_tooltip_text(Some(hit.name()));
|
||||
let content_type = if hit.is_dir() {
|
||||
glib::GString::from("inode/directory")
|
||||
} else {
|
||||
gio::functions::content_type_guess(Some(hit.name()), None).0
|
||||
};
|
||||
self.kind
|
||||
.set_label(&gio::functions::content_type_get_description(&content_type));
|
||||
|
||||
let size = (!hit.is_dir() && hit.size() > 0).then(|| human_bytes(hit.size()));
|
||||
self.size.set(size.as_deref());
|
||||
|
||||
let modified = (hit.modified() > 0).then(|| dates::relative(hit.modified()));
|
||||
self.modified.set(modified.as_deref());
|
||||
self.modified.value.set_tooltip_text(
|
||||
(hit.modified() > 0)
|
||||
.then(|| dates::full(hit.modified()))
|
||||
.as_deref(),
|
||||
);
|
||||
|
||||
let location = hit.location();
|
||||
self.location.set(Some(&location));
|
||||
|
||||
match availability(hit) {
|
||||
Some((icon, class, text)) => {
|
||||
self.availability.set(Some(&text));
|
||||
self.availability_icon.set_icon_name(Some(icon));
|
||||
for other in ["badge-pinned", "badge-cached", "badge-cloud", "badge-local"] {
|
||||
self.availability_icon.remove_css_class(other);
|
||||
}
|
||||
self.availability_icon.add_css_class(class);
|
||||
self.availability_icon.set_visible(true);
|
||||
}
|
||||
None => {
|
||||
self.availability.set(None);
|
||||
self.availability_icon.set_visible(false);
|
||||
}
|
||||
}
|
||||
|
||||
self.open_label.set_label(&if hit.is_dir() {
|
||||
gettext("Open folder")
|
||||
} else {
|
||||
pgettext("verb", "Open")
|
||||
});
|
||||
}
|
||||
|
||||
/// Say "Path copied" for a moment.
|
||||
pub(crate) fn flash_copied(&self) {
|
||||
self.copied.set_reveal_child(true);
|
||||
if let Some(source) = self.copied_timer.borrow_mut().take() {
|
||||
source.remove();
|
||||
}
|
||||
let copied = self.copied.clone();
|
||||
let slot = self.copied_timer.clone();
|
||||
let timer = glib::timeout_add_local_once(COPIED_FEEDBACK, move || {
|
||||
slot.borrow_mut().take();
|
||||
copied.set_reveal_child(false);
|
||||
});
|
||||
*self.copied_timer.borrow_mut() = Some(timer);
|
||||
}
|
||||
}
|
||||
|
||||
/// Where the hit's content is: its icon, its style class and its wording.
|
||||
fn availability(hit: &Hit) -> Option<(&'static str, &'static str, String)> {
|
||||
match hit {
|
||||
Hit::Local(_) => Some((
|
||||
"drive-harddisk-symbolic",
|
||||
"badge-local",
|
||||
gettext("On this computer"),
|
||||
)),
|
||||
Hit::Drive(drive) if drive.pinned => Some((
|
||||
"pdfs-offline-symbolic",
|
||||
"badge-pinned",
|
||||
gettext("Available offline"),
|
||||
)),
|
||||
// A folder is never downloaded as a whole; only pinning says anything.
|
||||
Hit::Drive(drive) if drive.is_dir => None,
|
||||
Hit::Drive(drive) if drive.cached => Some((
|
||||
"pdfs-cached-symbolic",
|
||||
"badge-cached",
|
||||
pgettext("file state", "Downloaded"),
|
||||
)),
|
||||
Hit::Drive(_) => Some((
|
||||
"pdfs-online-only-symbolic",
|
||||
"badge-cloud",
|
||||
pgettext("file state", "Online only"),
|
||||
)),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
//! Result rows: a thumbnail or icon, the name with its matched characters in
|
||||
//! bold, the location, and on the right the sync state, size and age.
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::rc::Rc;
|
||||
|
||||
use adw::prelude::*;
|
||||
use gtk4::{gdk, gio};
|
||||
|
||||
use super::highlight;
|
||||
use super::thumbs::Thumbs;
|
||||
use crate::theme::proton_theme_active;
|
||||
use crate::{Hit, format_age, human_bytes};
|
||||
|
||||
/// Edge of a row's thumbnail.
|
||||
const ROW_THUMB: i32 = 40;
|
||||
|
||||
/// A thumbnail surface: an icon, with a picture laid over it that shows once
|
||||
/// the thumbnail has loaded. [`Thumbs`] paints the picture.
|
||||
pub(crate) fn thumb_slot(
|
||||
width: i32,
|
||||
height: i32,
|
||||
icon_size: i32,
|
||||
fit: gtk4::ContentFit,
|
||||
) -> gtk4::Overlay {
|
||||
let fallback = gtk4::Image::builder().pixel_size(icon_size).build();
|
||||
let picture = gtk4::Picture::builder()
|
||||
.width_request(width)
|
||||
.height_request(height)
|
||||
.content_fit(fit)
|
||||
.can_shrink(true)
|
||||
.visible(false)
|
||||
.build();
|
||||
picture.set_overflow(gtk4::Overflow::Hidden);
|
||||
picture.add_css_class("thumb");
|
||||
|
||||
let overlay = gtk4::Overlay::new();
|
||||
overlay.set_size_request(width, height);
|
||||
overlay.set_halign(gtk4::Align::Center);
|
||||
overlay.set_valign(gtk4::Align::Center);
|
||||
overlay.set_child(Some(&fallback));
|
||||
overlay.add_overlay(&picture);
|
||||
overlay
|
||||
}
|
||||
|
||||
/// Show `hit` in a slot from [`thumb_slot`]: its icon at once, and its
|
||||
/// thumbnail when there is one.
|
||||
pub(crate) fn fill_slot(slot: >k4::Overlay, hit: &Hit, thumbs: &Rc<Thumbs>, mountpoint: &Path) {
|
||||
let Some(fallback) = slot.child().and_downcast::<gtk4::Image>() else {
|
||||
return;
|
||||
};
|
||||
let Some(picture) = fallback.next_sibling().and_downcast::<gtk4::Picture>() else {
|
||||
return;
|
||||
};
|
||||
fallback.set_from_gicon(&icon_for(hit.name(), hit.is_dir()));
|
||||
fallback.set_visible(true);
|
||||
picture.set_visible(false);
|
||||
picture.set_paintable(gdk::Paintable::NONE);
|
||||
thumbs.want(hit, mountpoint, &picture);
|
||||
}
|
||||
|
||||
/// The desktop's own full-colour icon for a file name, so results look like
|
||||
/// the user's file manager. Folders are Proton's purple ones while the Proton
|
||||
/// theme is on, as in the app's browser.
|
||||
pub(crate) fn icon_for(name: &str, is_dir: bool) -> gio::Icon {
|
||||
if is_dir {
|
||||
let folder = if proton_theme_active() {
|
||||
"pdfs-proton-folder"
|
||||
} else {
|
||||
"folder"
|
||||
};
|
||||
return gio::ThemedIcon::new(folder).upcast();
|
||||
}
|
||||
let (content_type, _uncertain) = gio::functions::content_type_guess(Some(name), None);
|
||||
gio::functions::content_type_get_icon(&content_type)
|
||||
}
|
||||
|
||||
/// The sync badge of a Drive file, as in the app's browser: pinned, cached,
|
||||
/// or online only. Folders and local files have none.
|
||||
pub(crate) fn badge_for(hit: &Hit) -> Option<(&'static str, &'static str)> {
|
||||
let Hit::Drive(drive) = hit else {
|
||||
return None;
|
||||
};
|
||||
if drive.is_dir {
|
||||
return None;
|
||||
}
|
||||
Some(if drive.pinned {
|
||||
("pdfs-offline-symbolic", "badge-pinned")
|
||||
} else if drive.cached {
|
||||
("pdfs-cached-symbolic", "badge-cached")
|
||||
} else {
|
||||
("pdfs-online-only-symbolic", "badge-cloud")
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn build_row(
|
||||
hit: &Hit,
|
||||
query: &str,
|
||||
thumbs: &Rc<Thumbs>,
|
||||
mountpoint: &Path,
|
||||
) -> gtk4::ListBoxRow {
|
||||
let row = gtk4::ListBoxRow::new();
|
||||
row.add_css_class("result-row");
|
||||
// Focus stays in the search entry; the list only shows the cursor.
|
||||
row.set_focusable(false);
|
||||
|
||||
let content = gtk4::Box::new(gtk4::Orientation::Horizontal, 12);
|
||||
|
||||
let slot = thumb_slot(ROW_THUMB, ROW_THUMB, 32, gtk4::ContentFit::Cover);
|
||||
fill_slot(&slot, hit, thumbs, mountpoint);
|
||||
content.append(&slot);
|
||||
|
||||
let text = gtk4::Box::new(gtk4::Orientation::Vertical, 1);
|
||||
text.set_hexpand(true);
|
||||
text.set_valign(gtk4::Align::Center);
|
||||
|
||||
let name = gtk4::Label::builder()
|
||||
.label(highlight::markup(hit.name(), query))
|
||||
.use_markup(true)
|
||||
.xalign(0.0)
|
||||
.ellipsize(gtk4::pango::EllipsizeMode::Middle)
|
||||
.build();
|
||||
name.add_css_class("result-name");
|
||||
text.append(&name);
|
||||
|
||||
let location = gtk4::Label::builder()
|
||||
.label(hit.location())
|
||||
.xalign(0.0)
|
||||
.ellipsize(gtk4::pango::EllipsizeMode::Start)
|
||||
.build();
|
||||
location.add_css_class("result-location");
|
||||
text.append(&location);
|
||||
content.append(&text);
|
||||
|
||||
let meta = gtk4::Box::new(gtk4::Orientation::Horizontal, 10);
|
||||
meta.set_valign(gtk4::Align::Center);
|
||||
if let Some((icon, class)) = badge_for(hit) {
|
||||
let badge = gtk4::Image::from_icon_name(icon);
|
||||
badge.add_css_class("result-badge");
|
||||
badge.add_css_class(class);
|
||||
meta.append(&badge);
|
||||
}
|
||||
if !hit.is_dir() && hit.size() > 0 {
|
||||
let size = gtk4::Label::new(Some(&human_bytes(hit.size())));
|
||||
size.add_css_class("result-meta");
|
||||
meta.append(&size);
|
||||
}
|
||||
if hit.modified() > 0 {
|
||||
let modified = gtk4::Label::new(Some(&format_age(hit.modified())));
|
||||
modified.add_css_class("result-meta");
|
||||
meta.append(&modified);
|
||||
}
|
||||
content.append(&meta);
|
||||
|
||||
row.set_child(Some(&content));
|
||||
row
|
||||
}
|
||||
|
||||
/// Let a row be dragged into a file manager or an application as a file.
|
||||
/// `dropped` runs once a drop was accepted; a cancelled drag changes nothing.
|
||||
pub(crate) fn attach_drag(row: >k4::ListBoxRow, path: PathBuf, dropped: impl Fn() + 'static) {
|
||||
let source = gtk4::DragSource::new();
|
||||
source.set_actions(gdk::DragAction::COPY);
|
||||
let files = gdk::FileList::from_array(&[gio::File::for_path(&path)]);
|
||||
source.set_content(Some(&gdk::ContentProvider::for_value(&files.to_value())));
|
||||
|
||||
let cancelled = Rc::new(Cell::new(false));
|
||||
let begin = cancelled.clone();
|
||||
source.connect_drag_begin(move |source, _| {
|
||||
begin.set(false);
|
||||
if let Some(widget) = source.widget() {
|
||||
source.set_icon(Some(>k4::WidgetPaintable::new(Some(&widget))), 0, 0);
|
||||
}
|
||||
});
|
||||
let cancel = cancelled.clone();
|
||||
source.connect_drag_cancel(move |_, _, _| {
|
||||
cancel.set(true);
|
||||
false
|
||||
});
|
||||
source.connect_drag_end(move |_, _, _| {
|
||||
if !cancelled.get() {
|
||||
dropped();
|
||||
}
|
||||
});
|
||||
row.add_controller(source);
|
||||
}
|
||||
@@ -0,0 +1,697 @@
|
||||
//! Thumbnails for the launcher's rows and preview pane.
|
||||
//!
|
||||
//! The main thread keeps a small LRU of textures, the keys known to have no
|
||||
//! thumbnail, and the pictures waiting for one (as weak references, so a row
|
||||
//! that was rebuilt or dropped keeps nothing alive). Everything that touches
|
||||
//! a file runs on two worker threads, which try in order:
|
||||
//!
|
||||
//! 1. the freedesktop thumbnail cache, valid only when its `Thumb::MTime`
|
||||
//! matches the file's;
|
||||
//! 2. for local images, decoding the file itself, and writing the result back
|
||||
//! to that cache for the next time and for every other application;
|
||||
//! 3. for Drive images, the daemon's `FileThumbs`, batched after a short quiet
|
||||
//! period.
|
||||
//!
|
||||
//! Workers hand back `gdk::Texture`s, never a `Pixbuf`, which may not cross
|
||||
//! threads. Each job carries the render epoch it was queued in, and workers
|
||||
//! skip jobs a newer query has made pointless.
|
||||
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::collections::{HashMap, HashSet, VecDeque};
|
||||
use std::io::Write;
|
||||
use std::os::unix::fs::{DirBuilderExt, OpenOptionsExt};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::rc::{Rc, Weak};
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::{AtomicU64, Ordering};
|
||||
use std::time::{Duration, UNIX_EPOCH};
|
||||
|
||||
use gtk4::gdk_pixbuf::Pixbuf;
|
||||
use gtk4::prelude::*;
|
||||
use gtk4::{gdk, glib};
|
||||
|
||||
use pdfs_core::control::{FileThumbRequest, Request, Response, is_thumbnail_image_name};
|
||||
|
||||
use crate::{Hit, spawn_request};
|
||||
|
||||
/// Decoded textures kept in memory. A launcher shows a few dozen rows, so
|
||||
/// this covers several searches back.
|
||||
const TEXTURE_CACHE_MAX: usize = 128;
|
||||
const MISSING_MAX: usize = 1024;
|
||||
const WORKERS: usize = 2;
|
||||
|
||||
/// Edge of the thumbnails this loader decodes and writes: the freedesktop
|
||||
/// "large" size.
|
||||
const THUMB_SIZE: i32 = 256;
|
||||
|
||||
/// Local images above this size are not decoded here; a thumbnail is not
|
||||
/// worth reading that much.
|
||||
const MAX_SOURCE_BYTES: u64 = 64 * 1024 * 1024;
|
||||
|
||||
/// Quiet period before Drive misses go to the daemon as one batch, so typing
|
||||
/// a word asks once for the final result set.
|
||||
const DAEMON_DEBOUNCE: Duration = Duration::from_millis(150);
|
||||
const DAEMON_RETRY: Duration = Duration::from_secs(1);
|
||||
const DAEMON_BATCH: usize = 32;
|
||||
|
||||
/// Where a job finds its image.
|
||||
enum Source {
|
||||
/// A file on this machine.
|
||||
Local(PathBuf),
|
||||
/// A Drive file: the thumbnail cache is keyed by its mounted path, and
|
||||
/// the daemon is asked on a miss.
|
||||
Drive {
|
||||
mounted: PathBuf,
|
||||
request: FileThumbRequest,
|
||||
},
|
||||
/// A thumbnail the daemon made, in its own cache.
|
||||
Daemon(PathBuf),
|
||||
}
|
||||
|
||||
struct Job {
|
||||
epoch: u64,
|
||||
key: String,
|
||||
source: Source,
|
||||
}
|
||||
|
||||
enum Outcome {
|
||||
Texture(gdk::Texture),
|
||||
Missing,
|
||||
/// Not in the thumbnail cache; the daemon has to make it.
|
||||
Daemon(FileThumbRequest),
|
||||
/// Queued for an older render; handed back in case it is wanted again.
|
||||
Skipped(Source),
|
||||
}
|
||||
|
||||
struct Done {
|
||||
key: String,
|
||||
outcome: Outcome,
|
||||
}
|
||||
|
||||
pub(crate) struct Thumbs {
|
||||
socket: PathBuf,
|
||||
epoch: Arc<AtomicU64>,
|
||||
jobs: async_channel::Sender<Job>,
|
||||
|
||||
textures: RefCell<HashMap<String, gdk::Texture>>,
|
||||
/// Least recently used first.
|
||||
order: RefCell<VecDeque<String>>,
|
||||
missing: RefCell<HashSet<String>>,
|
||||
missing_order: RefCell<VecDeque<String>>,
|
||||
waiters: RefCell<HashMap<String, Vec<glib::WeakRef<gtk4::Picture>>>>,
|
||||
/// Keys with a worker job or a daemon request outstanding.
|
||||
working: RefCell<HashSet<String>>,
|
||||
|
||||
/// Drive misses waiting for the next batch, by key.
|
||||
queued: RefCell<HashMap<String, FileThumbRequest>>,
|
||||
/// Drive items the daemon is working on under `generation`, by key.
|
||||
sent: RefCell<HashMap<String, FileThumbRequest>>,
|
||||
generation: Cell<u64>,
|
||||
reserving: Cell<bool>,
|
||||
inflight: Cell<bool>,
|
||||
flush: RefCell<Option<glib::SourceId>>,
|
||||
}
|
||||
|
||||
impl Thumbs {
|
||||
pub(crate) fn new(socket: PathBuf) -> Rc<Self> {
|
||||
let epoch = Arc::new(AtomicU64::new(0));
|
||||
let (jobs, inbox) = async_channel::unbounded::<Job>();
|
||||
let (done, results) = async_channel::unbounded::<Done>();
|
||||
for n in 0..WORKERS {
|
||||
let inbox = inbox.clone();
|
||||
let done = done.clone();
|
||||
let epoch = epoch.clone();
|
||||
let spawned = std::thread::Builder::new()
|
||||
.name(format!("prompt-thumbs-{n}"))
|
||||
.spawn(move || work(n, &inbox, &done, &epoch));
|
||||
if let Err(e) = spawned {
|
||||
tracing::warn!("cannot start a thumbnail worker: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
let thumbs = Rc::new(Self {
|
||||
socket,
|
||||
epoch,
|
||||
jobs,
|
||||
textures: RefCell::new(HashMap::new()),
|
||||
order: RefCell::new(VecDeque::new()),
|
||||
missing: RefCell::new(HashSet::new()),
|
||||
missing_order: RefCell::new(VecDeque::new()),
|
||||
waiters: RefCell::new(HashMap::new()),
|
||||
working: RefCell::new(HashSet::new()),
|
||||
queued: RefCell::new(HashMap::new()),
|
||||
sent: RefCell::new(HashMap::new()),
|
||||
generation: Cell::new(0),
|
||||
reserving: Cell::new(false),
|
||||
inflight: Cell::new(false),
|
||||
flush: RefCell::new(None),
|
||||
});
|
||||
let weak = Rc::downgrade(&thumbs);
|
||||
glib::spawn_future_local(async move {
|
||||
while let Ok(done) = results.recv().await {
|
||||
let Some(thumbs) = weak.upgrade() else {
|
||||
break;
|
||||
};
|
||||
thumbs.finish(done);
|
||||
}
|
||||
});
|
||||
thumbs
|
||||
}
|
||||
|
||||
/// Paint `hit`'s thumbnail into `picture` now if it is known, or as soon
|
||||
/// as it is. Folders and non-images keep the slot's icon.
|
||||
pub(crate) fn want(self: &Rc<Self>, hit: &Hit, mountpoint: &Path, picture: >k4::Picture) {
|
||||
let key = hit.thumb_key();
|
||||
// The widget name binds the picture to one key: a late reply for
|
||||
// another hit must not paint into it.
|
||||
picture.set_widget_name(&key);
|
||||
if hit.is_dir() || !is_thumbnail_image_name(hit.name()) {
|
||||
return;
|
||||
}
|
||||
if matches!(hit, Hit::Drive(drive) if drive.uid.is_empty()) {
|
||||
return;
|
||||
}
|
||||
let cached = self.textures.borrow().get(&key).cloned();
|
||||
if let Some(texture) = cached {
|
||||
self.touch(&key);
|
||||
paint(picture, &key, &texture);
|
||||
return;
|
||||
}
|
||||
if self.missing.borrow().contains(&key) {
|
||||
return;
|
||||
}
|
||||
self.waiters
|
||||
.borrow_mut()
|
||||
.entry(key.clone())
|
||||
.or_default()
|
||||
.push(picture.downgrade());
|
||||
if !self.working.borrow_mut().insert(key.clone()) {
|
||||
return;
|
||||
}
|
||||
let source = match hit {
|
||||
Hit::Local(local) => Source::Local(PathBuf::from(&local.path)),
|
||||
Hit::Drive(drive) => Source::Drive {
|
||||
mounted: hit.fs_path(mountpoint),
|
||||
request: FileThumbRequest {
|
||||
uid: drive.uid.clone(),
|
||||
modified: drive.modified,
|
||||
name: drive.name.clone(),
|
||||
},
|
||||
},
|
||||
};
|
||||
self.dispatch(key, source);
|
||||
}
|
||||
|
||||
/// The rows are about to be rebuilt: forget their pictures, and let the
|
||||
/// workers skip what was queued for them.
|
||||
pub(crate) fn begin_render(&self) {
|
||||
self.epoch.fetch_add(1, Ordering::SeqCst);
|
||||
self.waiters.borrow_mut().clear();
|
||||
}
|
||||
|
||||
/// The rows are rebuilt and have asked for their thumbnails. Drive work
|
||||
/// for hits that are gone is dropped, and cancelled at the daemon when it
|
||||
/// had already been sent.
|
||||
pub(crate) fn end_render(self: &Rc<Self>) {
|
||||
let wanted: HashSet<String> = self.waiters.borrow().keys().cloned().collect();
|
||||
let mut dropped = Vec::new();
|
||||
self.queued.borrow_mut().retain(|key, _| {
|
||||
let keep = wanted.contains(key);
|
||||
if !keep {
|
||||
dropped.push(key.clone());
|
||||
}
|
||||
keep
|
||||
});
|
||||
let stale = self.sent.borrow().keys().any(|key| !wanted.contains(key));
|
||||
if stale {
|
||||
self.cancel_daemon();
|
||||
// Still-wanted items go back into the next batch, under a fresh
|
||||
// generation.
|
||||
let sent: Vec<(String, FileThumbRequest)> = self.sent.borrow_mut().drain().collect();
|
||||
for (key, request) in sent {
|
||||
if wanted.contains(&key) {
|
||||
self.queued.borrow_mut().insert(key, request);
|
||||
} else {
|
||||
dropped.push(key);
|
||||
}
|
||||
}
|
||||
self.schedule(DAEMON_DEBOUNCE);
|
||||
}
|
||||
let mut working = self.working.borrow_mut();
|
||||
for key in dropped {
|
||||
working.remove(&key);
|
||||
}
|
||||
}
|
||||
|
||||
/// The launcher was dismissed: stop everything.
|
||||
pub(crate) fn cancel_all(&self) {
|
||||
self.epoch.fetch_add(1, Ordering::SeqCst);
|
||||
self.waiters.borrow_mut().clear();
|
||||
self.working.borrow_mut().clear();
|
||||
self.queued.borrow_mut().clear();
|
||||
self.sent.borrow_mut().clear();
|
||||
if let Some(source) = self.flush.borrow_mut().take() {
|
||||
source.remove();
|
||||
}
|
||||
self.cancel_daemon();
|
||||
}
|
||||
|
||||
fn dispatch(&self, key: String, source: Source) {
|
||||
let job = Job {
|
||||
epoch: self.epoch.load(Ordering::SeqCst),
|
||||
key: key.clone(),
|
||||
source,
|
||||
};
|
||||
if self.jobs.try_send(job).is_err() {
|
||||
self.working.borrow_mut().remove(&key);
|
||||
}
|
||||
}
|
||||
|
||||
fn wanted(&self, key: &str) -> bool {
|
||||
self.waiters.borrow().contains_key(key)
|
||||
}
|
||||
|
||||
fn finish(self: &Rc<Self>, done: Done) {
|
||||
let Done { key, outcome } = done;
|
||||
match outcome {
|
||||
Outcome::Texture(texture) => {
|
||||
self.working.borrow_mut().remove(&key);
|
||||
self.store_texture(&key, texture.clone());
|
||||
let waiters = self.waiters.borrow_mut().remove(&key);
|
||||
for picture in waiters.into_iter().flatten() {
|
||||
if let Some(picture) = picture.upgrade() {
|
||||
paint(&picture, &key, &texture);
|
||||
}
|
||||
}
|
||||
}
|
||||
Outcome::Missing => {
|
||||
self.working.borrow_mut().remove(&key);
|
||||
self.store_missing(key.clone());
|
||||
self.waiters.borrow_mut().remove(&key);
|
||||
}
|
||||
Outcome::Daemon(request) => {
|
||||
if self.wanted(&key) {
|
||||
self.queued.borrow_mut().insert(key, request);
|
||||
self.schedule(DAEMON_DEBOUNCE);
|
||||
} else {
|
||||
self.working.borrow_mut().remove(&key);
|
||||
}
|
||||
}
|
||||
Outcome::Skipped(source) => {
|
||||
// A newer render may want the same image again.
|
||||
if self.wanted(&key) {
|
||||
self.dispatch(key, source);
|
||||
} else {
|
||||
self.working.borrow_mut().remove(&key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn touch(&self, key: &str) {
|
||||
let mut order = self.order.borrow_mut();
|
||||
if let Some(at) = order.iter().position(|held| held == key) {
|
||||
order.remove(at);
|
||||
order.push_back(key.to_string());
|
||||
}
|
||||
}
|
||||
|
||||
fn store_texture(&self, key: &str, texture: gdk::Texture) {
|
||||
let mut textures = self.textures.borrow_mut();
|
||||
if textures.insert(key.to_string(), texture).is_none() {
|
||||
self.order.borrow_mut().push_back(key.to_string());
|
||||
} else {
|
||||
drop(textures);
|
||||
self.touch(key);
|
||||
return;
|
||||
}
|
||||
let mut order = self.order.borrow_mut();
|
||||
while order.len() > TEXTURE_CACHE_MAX {
|
||||
if let Some(old) = order.pop_front() {
|
||||
textures.remove(&old);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn store_missing(&self, key: String) {
|
||||
let mut missing = self.missing.borrow_mut();
|
||||
let mut order = self.missing_order.borrow_mut();
|
||||
if missing.insert(key.clone()) {
|
||||
order.push_back(key);
|
||||
}
|
||||
while order.len() > MISSING_MAX {
|
||||
if let Some(old) = order.pop_front() {
|
||||
missing.remove(&old);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Stop the daemon's work for this launcher. The generation is shared
|
||||
/// with the app, so this is only sent when something was asked for.
|
||||
fn cancel_daemon(&self) {
|
||||
let generation = self.generation.replace(0);
|
||||
if generation != 0 {
|
||||
// The reply is not needed; `spawn_request` owns the round-trip.
|
||||
drop(spawn_request(
|
||||
self.socket.clone(),
|
||||
Request::CancelFileThumbs {
|
||||
generation: generation.saturating_add(1),
|
||||
},
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
fn schedule(self: &Rc<Self>, delay: Duration) {
|
||||
if let Some(source) = self.flush.borrow_mut().take() {
|
||||
source.remove();
|
||||
}
|
||||
let weak = Rc::downgrade(self);
|
||||
let source = glib::timeout_add_local_once(delay, move || {
|
||||
if let Some(thumbs) = weak.upgrade() {
|
||||
thumbs.flush.borrow_mut().take();
|
||||
thumbs.send_batch();
|
||||
}
|
||||
});
|
||||
*self.flush.borrow_mut() = Some(source);
|
||||
}
|
||||
|
||||
fn send_batch(self: &Rc<Self>) {
|
||||
if self.inflight.get() || self.queued.borrow().is_empty() {
|
||||
return;
|
||||
}
|
||||
if self.generation.get() == 0 {
|
||||
self.reserve();
|
||||
return;
|
||||
}
|
||||
let batch: Vec<(String, FileThumbRequest)> = {
|
||||
let mut queued = self.queued.borrow_mut();
|
||||
let keys: Vec<String> = queued.keys().take(DAEMON_BATCH).cloned().collect();
|
||||
keys.into_iter()
|
||||
.filter_map(|key| queued.remove_entry(&key))
|
||||
.collect()
|
||||
};
|
||||
self.sent.borrow_mut().extend(batch.iter().cloned());
|
||||
let generation = self.generation.get();
|
||||
self.inflight.set(true);
|
||||
let rx = spawn_request(
|
||||
self.socket.clone(),
|
||||
Request::FileThumbs {
|
||||
items: batch.iter().map(|(_, request)| request.clone()).collect(),
|
||||
generation,
|
||||
},
|
||||
);
|
||||
let weak = Rc::downgrade(self);
|
||||
glib::spawn_future_local(async move {
|
||||
let reply = rx.recv().await;
|
||||
let Some(thumbs) = weak.upgrade() else {
|
||||
return;
|
||||
};
|
||||
thumbs.inflight.set(false);
|
||||
thumbs.receive(generation, batch, reply);
|
||||
if !thumbs.queued.borrow().is_empty() {
|
||||
thumbs.schedule(Duration::ZERO);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn receive(
|
||||
self: &Rc<Self>,
|
||||
generation: u64,
|
||||
batch: Vec<(String, FileThumbRequest)>,
|
||||
reply: Result<Result<Response, String>, async_channel::RecvError>,
|
||||
) {
|
||||
// Cancelled while in flight: `end_render` or `cancel_all` already
|
||||
// re-queued what is still wanted. A finished thumbnail is still worth
|
||||
// painting.
|
||||
let current = generation == self.generation.get();
|
||||
match reply {
|
||||
Ok(Ok(Response::Thumbs { items })) => {
|
||||
let mut by_uid: HashMap<String, (String, FileThumbRequest)> = batch
|
||||
.into_iter()
|
||||
.map(|(key, request)| (request.uid.clone(), (key, request)))
|
||||
.collect();
|
||||
let mut again = Vec::new();
|
||||
for item in items {
|
||||
let Some((key, request)) = by_uid.remove(&item.uid) else {
|
||||
continue;
|
||||
};
|
||||
if let Some(path) = item.path {
|
||||
if current {
|
||||
self.sent.borrow_mut().remove(&key);
|
||||
}
|
||||
if self.wanted(&key) {
|
||||
self.working.borrow_mut().insert(key.clone());
|
||||
self.dispatch(key, Source::Daemon(PathBuf::from(path)));
|
||||
} else {
|
||||
self.working.borrow_mut().remove(&key);
|
||||
}
|
||||
} else if !current {
|
||||
continue;
|
||||
} else if item.pending {
|
||||
again.push((key, request));
|
||||
} else {
|
||||
self.sent.borrow_mut().remove(&key);
|
||||
self.working.borrow_mut().remove(&key);
|
||||
self.store_missing(key.clone());
|
||||
self.waiters.borrow_mut().remove(&key);
|
||||
}
|
||||
}
|
||||
if current {
|
||||
again.extend(by_uid.into_values());
|
||||
self.retry(again);
|
||||
}
|
||||
}
|
||||
Ok(Ok(Response::FileThumbsStale)) if current => {
|
||||
self.generation.set(0);
|
||||
self.retry(batch);
|
||||
}
|
||||
Ok(Ok(Response::Error { message, .. })) if current => {
|
||||
tracing::debug!("launcher thumbnails failed: {message}");
|
||||
self.retry(batch);
|
||||
}
|
||||
_ if current => self.retry(batch),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
/// Ask again for items the daemon is still making, after a pause.
|
||||
fn retry(self: &Rc<Self>, items: Vec<(String, FileThumbRequest)>) {
|
||||
if items.is_empty() {
|
||||
return;
|
||||
}
|
||||
let weak = Rc::downgrade(self);
|
||||
glib::timeout_add_local_once(DAEMON_RETRY, move || {
|
||||
let Some(thumbs) = weak.upgrade() else {
|
||||
return;
|
||||
};
|
||||
for (key, request) in items {
|
||||
// Gone from `sent` means cancelled or already answered.
|
||||
if thumbs.sent.borrow_mut().remove(&key).is_some() && thumbs.wanted(&key) {
|
||||
thumbs.queued.borrow_mut().insert(key, request);
|
||||
} else {
|
||||
thumbs.working.borrow_mut().remove(&key);
|
||||
}
|
||||
}
|
||||
thumbs.send_batch();
|
||||
});
|
||||
}
|
||||
|
||||
fn reserve(self: &Rc<Self>) {
|
||||
if self.reserving.replace(true) {
|
||||
return;
|
||||
}
|
||||
let rx = spawn_request(self.socket.clone(), Request::ReserveFileThumbGeneration);
|
||||
let weak: Weak<Self> = Rc::downgrade(self);
|
||||
glib::spawn_future_local(async move {
|
||||
let reply = rx.recv().await;
|
||||
let Some(thumbs) = weak.upgrade() else {
|
||||
return;
|
||||
};
|
||||
thumbs.reserving.set(false);
|
||||
match reply {
|
||||
Ok(Ok(Response::FileThumbGeneration { generation })) if generation != 0 => {
|
||||
thumbs.generation.set(generation);
|
||||
thumbs.send_batch();
|
||||
}
|
||||
_ => thumbs.schedule(DAEMON_RETRY),
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// Show `texture` in `picture` if the picture still belongs to `key`, and hide
|
||||
/// the icon underneath it.
|
||||
fn paint(picture: >k4::Picture, key: &str, texture: &gdk::Texture) {
|
||||
if picture.widget_name() != key {
|
||||
return;
|
||||
}
|
||||
picture.set_paintable(Some(texture));
|
||||
picture.set_visible(true);
|
||||
if let Some(overlay) = picture.parent().and_downcast::<gtk4::Overlay>()
|
||||
&& let Some(fallback) = overlay.child()
|
||||
{
|
||||
fallback.set_visible(false);
|
||||
}
|
||||
}
|
||||
|
||||
fn work(
|
||||
index: usize,
|
||||
inbox: &async_channel::Receiver<Job>,
|
||||
done: &async_channel::Sender<Done>,
|
||||
epoch: &AtomicU64,
|
||||
) {
|
||||
while let Ok(job) = inbox.recv_blocking() {
|
||||
// A daemon thumbnail is already made; decoding it is cheap and the
|
||||
// texture is cached for the next render.
|
||||
let stale =
|
||||
!matches!(job.source, Source::Daemon(_)) && job.epoch < epoch.load(Ordering::SeqCst);
|
||||
let outcome = if stale {
|
||||
Outcome::Skipped(job.source)
|
||||
} else {
|
||||
load(index, job.source)
|
||||
};
|
||||
if done
|
||||
.send_blocking(Done {
|
||||
key: job.key,
|
||||
outcome,
|
||||
})
|
||||
.is_err()
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn load(worker: usize, source: Source) -> Outcome {
|
||||
match source {
|
||||
Source::Local(path) => {
|
||||
let Ok(meta) = std::fs::metadata(&path) else {
|
||||
return Outcome::Missing;
|
||||
};
|
||||
let mtime = meta
|
||||
.modified()
|
||||
.ok()
|
||||
.and_then(|at| at.duration_since(UNIX_EPOCH).ok())
|
||||
.map_or(0, |at| at.as_secs() as i64);
|
||||
if let Some(pixbuf) = cached(&path, mtime) {
|
||||
return texture(&pixbuf);
|
||||
}
|
||||
if meta.len() > MAX_SOURCE_BYTES {
|
||||
return Outcome::Missing;
|
||||
}
|
||||
let Some((pixbuf, scaled)) = decode(&path) else {
|
||||
return Outcome::Missing;
|
||||
};
|
||||
// An image that already fits is its own thumbnail.
|
||||
if scaled && let Err(e) = write_cached(worker, &path, mtime, &pixbuf) {
|
||||
tracing::debug!("cannot cache a thumbnail of {}: {e}", path.display());
|
||||
}
|
||||
texture(&pixbuf)
|
||||
}
|
||||
Source::Drive { mounted, request } => match cached(&mounted, request.modified) {
|
||||
Some(pixbuf) => texture(&pixbuf),
|
||||
None => Outcome::Daemon(request),
|
||||
},
|
||||
Source::Daemon(path) => match gdk::Texture::from_filename(&path) {
|
||||
Ok(texture) => Outcome::Texture(texture),
|
||||
Err(e) => {
|
||||
tracing::debug!("cannot decode {}: {e}", path.display());
|
||||
Outcome::Missing
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/// `$XDG_CACHE_HOME/thumbnails`.
|
||||
fn thumbnail_root() -> PathBuf {
|
||||
glib::user_cache_dir().join("thumbnails")
|
||||
}
|
||||
|
||||
/// The URI and its MD5, which name a file's entry in the thumbnail cache.
|
||||
fn cache_name(path: &Path) -> Option<(String, String)> {
|
||||
let uri = glib::filename_to_uri(path, None).ok()?.to_string();
|
||||
let md5 = glib::compute_checksum_for_data(glib::ChecksumType::Md5, uri.as_bytes())?.to_string();
|
||||
Some((uri, md5))
|
||||
}
|
||||
|
||||
/// A thumbnail from the shared cache, if one was made for this version of
|
||||
/// the file.
|
||||
fn cached(path: &Path, mtime: i64) -> Option<Pixbuf> {
|
||||
let (_, md5) = cache_name(path)?;
|
||||
let root = thumbnail_root();
|
||||
["large", "x-large", "normal"].iter().find_map(|size| {
|
||||
let pixbuf = Pixbuf::from_file(root.join(size).join(format!("{md5}.png"))).ok()?;
|
||||
let stamp = pixbuf.option("tEXt::Thumb::MTime")?;
|
||||
(stamp.parse::<i64>().ok()? == mtime).then_some(pixbuf)
|
||||
})
|
||||
}
|
||||
|
||||
/// Decode a local image at most [`THUMB_SIZE`] on its longer edge, upright.
|
||||
/// The bool says whether it had to be scaled down.
|
||||
fn decode(path: &Path) -> Option<(Pixbuf, bool)> {
|
||||
let (_, width, height) = Pixbuf::file_info(path)?;
|
||||
let scaled = width > THUMB_SIZE || height > THUMB_SIZE;
|
||||
let pixbuf = if scaled {
|
||||
Pixbuf::from_file_at_scale(path, THUMB_SIZE, THUMB_SIZE, true)
|
||||
} else {
|
||||
Pixbuf::from_file(path)
|
||||
}
|
||||
.ok()?;
|
||||
let pixbuf = pixbuf.apply_embedded_orientation().unwrap_or(pixbuf);
|
||||
Some((pixbuf, scaled))
|
||||
}
|
||||
|
||||
/// Store a thumbnail as the freedesktop spec asks: in `large/`, with
|
||||
/// `Thumb::URI` and `Thumb::MTime`, readable only by the user, and written
|
||||
/// through a temporary file so another reader never sees half of it.
|
||||
fn write_cached(worker: usize, path: &Path, mtime: i64, pixbuf: &Pixbuf) -> std::io::Result<()> {
|
||||
let (uri, md5) = cache_name(path).ok_or_else(|| std::io::Error::other("no file URI"))?;
|
||||
let dir = thumbnail_root().join("large");
|
||||
std::fs::DirBuilder::new()
|
||||
.recursive(true)
|
||||
.mode(0o700)
|
||||
.create(&dir)?;
|
||||
let mtime = mtime.to_string();
|
||||
let png = pixbuf
|
||||
.save_to_bufferv(
|
||||
"png",
|
||||
&[
|
||||
("tEXt::Thumb::URI", uri.as_str()),
|
||||
("tEXt::Thumb::MTime", mtime.as_str()),
|
||||
],
|
||||
)
|
||||
.map_err(std::io::Error::other)?;
|
||||
let tmp = dir.join(format!(
|
||||
"{md5}.png.pdfs-{}-{worker}.tmp",
|
||||
std::process::id()
|
||||
));
|
||||
let written = std::fs::OpenOptions::new()
|
||||
.write(true)
|
||||
.create(true)
|
||||
.truncate(true)
|
||||
.mode(0o600)
|
||||
.open(&tmp)
|
||||
.and_then(|mut file| file.write_all(&png))
|
||||
.and_then(|()| std::fs::rename(&tmp, dir.join(format!("{md5}.png"))));
|
||||
if written.is_err() {
|
||||
let _ = std::fs::remove_file(&tmp);
|
||||
}
|
||||
written
|
||||
}
|
||||
|
||||
/// A `Pixbuf` may not leave its thread; its pixels, as a memory texture, can.
|
||||
fn texture(pixbuf: &Pixbuf) -> Outcome {
|
||||
let format = if pixbuf.has_alpha() {
|
||||
gdk::MemoryFormat::R8g8b8a8
|
||||
} else {
|
||||
gdk::MemoryFormat::R8g8b8
|
||||
};
|
||||
let texture = gdk::MemoryTexture::new(
|
||||
pixbuf.width(),
|
||||
pixbuf.height(),
|
||||
format,
|
||||
&pixbuf.read_pixel_bytes(),
|
||||
pixbuf.rowstride() as usize,
|
||||
);
|
||||
Outcome::Texture(texture.upcast())
|
||||
}
|
||||
+77
-1183
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,158 @@
|
||||
//! The bundled resources and the optional Proton theme, shared by `pdfs-app`
|
||||
//! and `pdfs-prompt` so both paint the same way from the same preference.
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
use adw::prelude::*;
|
||||
use gtk4::{gio, glib};
|
||||
|
||||
/// Register the bundled GResources (custom icons, the stylesheets) and load
|
||||
/// `stylesheet`, the front end's own sheet. The Proton theme is a separate
|
||||
/// provider, applied by [`set_proton_theme`] from the saved preference.
|
||||
pub(crate) fn load_resources(stylesheet: &str) {
|
||||
let bytes = include_bytes!(concat!(env!("OUT_DIR"), "/pdfs.gresource"));
|
||||
let resource_data = glib::Bytes::from_static(bytes);
|
||||
if let Ok(resource) = gio::Resource::from_data(&resource_data) {
|
||||
gio::resources_register(&resource);
|
||||
} else {
|
||||
tracing::error!("failed to load gresource bundle");
|
||||
}
|
||||
|
||||
let Some(display) = gtk4::gdk::Display::default() else {
|
||||
return;
|
||||
};
|
||||
let provider = gtk4::CssProvider::new();
|
||||
provider.load_from_resource(stylesheet);
|
||||
// Above the user's own gtk.css, which often imports a whole theme: its
|
||||
// `button { padding: 6px 10px; min-width: 16px }` would otherwise pad every
|
||||
// photo tile and push the grid past the window. Every rule in the sheet is
|
||||
// scoped to the app's own classes, so nothing else the user styled changes.
|
||||
// One above the Proton theme too, so the app's rules refine it.
|
||||
gtk4::style_context_add_provider_for_display(
|
||||
&display,
|
||||
&provider,
|
||||
gtk4::STYLE_PROVIDER_PRIORITY_USER + 2,
|
||||
);
|
||||
gtk4::IconTheme::for_display(&display).add_resource_path("/de/nils/protondrivelinux/icons");
|
||||
}
|
||||
|
||||
thread_local! {
|
||||
/// The Proton theme provider while it is installed. Kept so turning the
|
||||
/// preference off can remove exactly what turning it on added.
|
||||
static PROTON_THEME: RefCell<Option<gtk4::CssProvider>> = const { RefCell::new(None) };
|
||||
}
|
||||
|
||||
/// Whether the Proton theme is on.
|
||||
pub(crate) fn proton_theme_active() -> bool {
|
||||
PROTON_THEME.with(|slot| slot.borrow().is_some())
|
||||
}
|
||||
|
||||
/// libadwaita's own stylesheet, bundled in the library.
|
||||
const ADWAITA_STYLESHEET: &str = "/org/gnome/Adwaita/styles/gtk.css";
|
||||
|
||||
/// The Proton palette laid over it, from our own bundle.
|
||||
const PROTON_PALETTE: &str = "/de/nils/protondrivelinux/proton-theme.css";
|
||||
|
||||
/// Make the theme provider's `@media (prefers-color-scheme)` and
|
||||
/// `(prefers-contrast)` rules match what libadwaita shows, now and whenever it
|
||||
/// changes. A provider evaluates those itself, and a new one assumes light.
|
||||
///
|
||||
/// The properties are set by name because they only exist since GTK 4.20, and
|
||||
/// the app still runs on older GTK, whose libadwaita has no such rules anyway.
|
||||
fn follow_style_manager(provider: >k4::CssProvider) {
|
||||
fn set_enum(provider: >k4::CssProvider, property: &str, nick: &str) {
|
||||
let Some(pspec) = provider.find_property(property) else {
|
||||
return;
|
||||
};
|
||||
if let Some(value) = glib::EnumClass::with_type(pspec.value_type())
|
||||
.and_then(|class| class.to_value_by_nick(nick))
|
||||
{
|
||||
provider.set_property_from_value(property, &value);
|
||||
}
|
||||
}
|
||||
fn apply(provider: >k4::CssProvider, manager: &adw::StyleManager) {
|
||||
let scheme = if manager.is_dark() { "dark" } else { "light" };
|
||||
set_enum(provider, "prefers-color-scheme", scheme);
|
||||
let contrast = if manager.is_high_contrast() {
|
||||
"more"
|
||||
} else {
|
||||
"no-preference"
|
||||
};
|
||||
set_enum(provider, "prefers-contrast", contrast);
|
||||
}
|
||||
|
||||
let manager = adw::StyleManager::default();
|
||||
apply(provider, &manager);
|
||||
// Weak, so a provider the preference removed isn't kept alive; its
|
||||
// handlers then do nothing.
|
||||
let weak = provider.downgrade();
|
||||
let weak_dark = weak.clone();
|
||||
manager.connect_dark_notify(move |manager| {
|
||||
if let Some(provider) = weak_dark.upgrade() {
|
||||
apply(&provider, manager);
|
||||
}
|
||||
});
|
||||
manager.connect_high_contrast_notify(move |manager| {
|
||||
if let Some(provider) = weak.upgrade() {
|
||||
apply(&provider, manager);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Paint the window in the Proton web apps' colours (`on`) or follow the
|
||||
/// system theme and accent colour.
|
||||
///
|
||||
/// Setting libadwaita's colour variables alone isn't enough: a GTK theme the
|
||||
/// user's `gtk.css` imports (Catppuccin, Fluent, ...) sits above the app and
|
||||
/// hard-codes its own accent into hundreds of rules. So the theme provider,
|
||||
/// one above the user's CSS, first resets every property, then re-applies
|
||||
/// libadwaita's whole stylesheet and finally the Proton palette, which leaves
|
||||
/// nothing of the user's theme inside the app.
|
||||
pub(crate) fn set_proton_theme(on: bool) {
|
||||
let Some(display) = gtk4::gdk::Display::default() else {
|
||||
return;
|
||||
};
|
||||
PROTON_THEME.with(|slot| {
|
||||
let mut slot = slot.borrow_mut();
|
||||
match (on, slot.as_ref()) {
|
||||
(true, None) => {
|
||||
let stylesheet = |path| {
|
||||
gio::resources_lookup_data(path, gio::ResourceLookupFlags::NONE)
|
||||
.map(|bytes| String::from_utf8_lossy(&bytes).into_owned())
|
||||
};
|
||||
let palette = stylesheet(PROTON_PALETTE).unwrap_or_default();
|
||||
let css = match stylesheet(ADWAITA_STYLESHEET) {
|
||||
// Its images are named relative to the sheet, which a
|
||||
// string loaded here doesn't have.
|
||||
Ok(adwaita) => format!(
|
||||
"* {{ all: unset; }}\n{}\n{palette}",
|
||||
adwaita.replace(
|
||||
"url(\"assets/",
|
||||
"url(\"resource:///org/gnome/Adwaita/styles/assets/"
|
||||
)
|
||||
),
|
||||
// Still recolours everything that follows libadwaita's
|
||||
// variables; only a custom theme's own rules show through.
|
||||
Err(e) => {
|
||||
tracing::warn!("libadwaita stylesheet not found, only recolouring: {e}");
|
||||
palette
|
||||
}
|
||||
};
|
||||
let provider = gtk4::CssProvider::new();
|
||||
follow_style_manager(&provider);
|
||||
provider.load_from_string(&css);
|
||||
gtk4::style_context_add_provider_for_display(
|
||||
&display,
|
||||
&provider,
|
||||
gtk4::STYLE_PROVIDER_PRIORITY_USER + 1,
|
||||
);
|
||||
*slot = Some(provider);
|
||||
}
|
||||
(false, Some(provider)) => {
|
||||
gtk4::style_context_remove_provider_for_display(&display, provider);
|
||||
*slot = None;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -28,6 +28,8 @@ crates/pdfs-gui/src/app/widgets/thumbnails.rs
|
||||
crates/pdfs-gui/src/app/widgets/versions_dialog.rs
|
||||
crates/pdfs-gui/src/dmenu.rs
|
||||
crates/pdfs-gui/src/fzf.rs
|
||||
crates/pdfs-gui/src/hud/mod.rs
|
||||
crates/pdfs-gui/src/hud/preview.rs
|
||||
crates/pdfs-gui/src/i18n.rs
|
||||
crates/pdfs-gui/src/main.rs
|
||||
crates/pdfs-gui/src/prompt.rs
|
||||
|
||||
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: German\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d. %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A, %-d. %B %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A, %-d. %B %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "Meine Dateien"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Fotos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Mit mir geteilt"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Von mir geteilt"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Computer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Papierkorb"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Synchronisierung"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Keine Internetverbindung"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Das ist nicht mehr vorhanden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "Kein Zugriff darauf"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Etwas anderes hat dies zuerst geändert"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Das Proton Drive ist voll"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Tastenkürzel"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "Info zu Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Hauptmenü"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -164,23 +164,23 @@ msgstr ""
|
||||
"Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG "
|
||||
"unterstützt oder befürwortet."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Quellcode"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Nutzungsbedingungen von Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Datenschutzerklärung von Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Haftungsausschluss"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -205,7 +205,7 @@ msgstr ""
|
||||
"bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten "
|
||||
"zusätzlich gesichert werden."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -215,7 +215,7 @@ msgstr ""
|
||||
"\">GeoNames</a>, lizenziert unter <a href=\"https://creativecommons.org/"
|
||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -225,7 +225,7 @@ msgstr ""
|
||||
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a> gezeichnet, die "
|
||||
"gemeinfrei sind."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Mitwirkende an Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Proton Drive beenden?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -258,7 +258,7 @@ msgstr ""
|
||||
"eine Verbindung hergestellt wird. Proton Drive startet bei der nächsten "
|
||||
"Anmeldung erneut."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -287,30 +287,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Beenden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Proton Drive konnte nicht beendet werden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "Der Proton-Drive-Dienst wurde nicht beendet."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "Allgemein"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Drive durchsuchen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -319,38 +319,38 @@ msgstr "Drive durchsuchen"
|
||||
msgid "Refresh"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Tastenkürzel"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Dateien"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Neuer Ordner"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Dateien hochladen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Zurück / Vor"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Übergeordneter Ordner"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Raster / Liste"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -359,7 +359,7 @@ msgstr "Raster / Liste"
|
||||
msgid "Rename"
|
||||
msgstr "Umbenennen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -369,72 +369,73 @@ msgstr "Umbenennen"
|
||||
msgid "Move to Trash"
|
||||
msgstr "In den Papierkorb verschieben"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Auswahl aufheben"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Größere Vorschaubilder"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Kleinere Vorschaubilder"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Vorschaubildgröße zurücksetzen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Alles auswählen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Fotobetrachter"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Vorheriges / nächstes Foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Erstes / letztes Foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Details anzeigen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Vollbild"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Zum Umbenennen genau ein Element auswählen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Nicht verbunden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "Der Proton-Drive-Dienst läuft nicht."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Verbindung wird hergestellt …"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "Warten auf den Start des Proton-Drive-Dienstes."
|
||||
|
||||
@@ -479,7 +480,7 @@ msgstr "Nichts im aktuellen Protokoll entspricht diesem Filter."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Erneut versuchen"
|
||||
|
||||
@@ -1238,6 +1239,7 @@ msgstr "Der Proton-Drive-Dienst hat nicht geantwortet."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Öffnen"
|
||||
@@ -1428,6 +1430,7 @@ msgstr "Name"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Größe"
|
||||
@@ -1606,6 +1609,7 @@ msgstr[1] "{n} Dateien sind jetzt nur online verfügbar"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Geändert"
|
||||
@@ -1614,6 +1618,7 @@ msgstr "Geändert"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Ort"
|
||||
|
||||
@@ -1632,6 +1637,7 @@ msgstr "Abspielen"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Offline verfügbar"
|
||||
|
||||
@@ -2054,7 +2060,6 @@ msgstr "Proton Drive herunterladen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Dieser Computer"
|
||||
|
||||
@@ -2546,7 +2551,7 @@ msgid "About Sync Modes"
|
||||
msgstr "Über Synchronisierungsarten"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Ordner"
|
||||
|
||||
@@ -3423,7 +3428,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Foto zum Hochladen auswählen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Bilder"
|
||||
|
||||
@@ -4602,7 +4607,7 @@ msgid "Up to date"
|
||||
msgstr "Auf dem neuesten Stand"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive läuft nicht"
|
||||
|
||||
@@ -5147,6 +5152,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Ordner öffnen"
|
||||
|
||||
@@ -5529,6 +5535,137 @@ msgstr "(keine angehefteten Elemente – zum Suchen tippen)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(Anwendungsverzeichnisse nicht ermittelbar)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Zuletzt verwendet"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "In Proton Drive angeheftet"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Beste Treffer"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Proton Drive durchsuchen"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "In Drive und auf diesem Computer suchen"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "Keine Ergebnisse"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive läuft nicht"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Proton Drive starten, um deine Dateien zu durchsuchen."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ Navigieren · ↵ Öffnen · Tab Filter"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Das Drive durchsuchen"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Dieser Computer wird noch indiziert – lokale Ergebnisse erscheinen in Kürze."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Eine andere Suche oder einen anderen Filter versuchen."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Mit dem Tippen beginnen, um Proton Drive und die Dateien auf diesem Computer "
|
||||
"zu durchsuchen."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "Keine angehefteten Dateien"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} angeheftete Datei"
|
||||
msgstr[1] "{n} angeheftete Dateien"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} auf diesem Computer · wird indiziert …"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} auf diesem Computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "{name} wird geöffnet …"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Öffnen fehlgeschlagen: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Proton Drive ist nicht erreichbar"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Verfügbarkeit"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Im Ordner anzeigen"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Pfad kopieren"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Pfad kopiert"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "Auf diesem Computer"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Heruntergeladen"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Nur online"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5682,16 +5819,16 @@ msgid "Quit"
|
||||
msgstr "Beenden"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Dokumente"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Medien"
|
||||
|
||||
@@ -5700,143 +5837,49 @@ msgstr "Medien"
|
||||
msgid "My files / {path}"
|
||||
msgstr "Meine Dateien / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Proton Drive durchsuchen"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "In Drive und auf diesem Computer suchen"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Beste Treffer"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "Keine Ergebnisse"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive läuft nicht"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Proton Drive starten, um deine Dateien zu durchsuchen."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ Navigieren · ↵ Öffnen · Tab Filter"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "In Proton Drive angeheftet"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Das Drive durchsuchen"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Dieser Computer wird noch indiziert – lokale Ergebnisse erscheinen in Kürze."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Eine andere Suche oder einen anderen Filter versuchen."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Mit dem Tippen beginnen, um Proton Drive und die Dateien auf diesem Computer "
|
||||
"zu durchsuchen."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "Keine angehefteten Dateien"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} angeheftete Datei"
|
||||
msgstr[1] "{n} angeheftete Dateien"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} auf diesem Computer · wird indiziert …"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} auf diesem Computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "{name} wird geöffnet …"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Öffnen fehlgeschlagen: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Proton Drive ist nicht erreichbar"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Persönlicher Ordner"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Persönlicher Ordner / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "jetzt"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count} Min."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count} Std."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count} T."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count} Mon."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count} J."
|
||||
@@ -5986,9 +6029,6 @@ msgstr "Proton-Drive-Hintergrunddienst nicht erreichbar: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Identität dieses Computers verwenden"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "Auf diesem Computer"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
+215
-175
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: English (United Kingdom)\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A %-d %B %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A %-d %B %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "My files"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Photos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Shared with me"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Shared by me"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Computers"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Trash"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Sync"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "You're offline"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "That's not there any more"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "You don't have access to that"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Something changed this first"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Your Proton Drive is full"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Preferences"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Keyboard Shortcuts"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "About Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Main menu"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -164,23 +164,23 @@ msgstr ""
|
||||
"Unofficial client — not affiliated with, endorsed by, or supported by Proton "
|
||||
"AG."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Source Code"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Proton Terms of Service"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Proton Privacy Policy"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Disclaimer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -202,7 +202,7 @@ msgstr ""
|
||||
"This software is provided “as is”, without warranty of any kind. Keep a copy "
|
||||
"of any data you cannot afford to lose."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -212,7 +212,7 @@ msgstr ""
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -222,7 +222,7 @@ msgstr ""
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
"public domain."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -238,15 +238,15 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Proton Drive for Linux contributors"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Stop Proton Drive?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -254,7 +254,7 @@ msgstr ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -283,30 +283,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Couldn't stop Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "The Proton Drive service did not stop."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Search Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -315,38 +315,38 @@ msgstr "Search Drive"
|
||||
msgid "Refresh"
|
||||
msgstr "Refresh"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Keyboard shortcuts"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Files"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "New folder"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Upload files"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Back / forward"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Parent folder"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Grid / list"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -355,7 +355,7 @@ msgstr "Grid / list"
|
||||
msgid "Rename"
|
||||
msgstr "Rename"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -365,72 +365,73 @@ msgstr "Rename"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Move to Trash"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Clear the selection"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Larger thumbnails"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Smaller thumbnails"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Reset thumbnail size"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Select all"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Photo Viewer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Previous / next photo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "First / last photo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Show details"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Fullscreen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Select a single item to rename it"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Not connected"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "The Proton Drive service isn't running."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Connecting…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "Waiting for the Proton Drive service to start."
|
||||
|
||||
@@ -475,7 +476,7 @@ msgstr "Nothing in the recent log fits this filter."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Retry"
|
||||
|
||||
@@ -1231,6 +1232,7 @@ msgstr "The Proton Drive service didn't respond."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Open"
|
||||
@@ -1421,6 +1423,7 @@ msgstr "Name"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Size"
|
||||
@@ -1595,6 +1598,7 @@ msgstr[1] "{n} files are now online only"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Modified"
|
||||
@@ -1603,6 +1607,7 @@ msgstr "Modified"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Location"
|
||||
|
||||
@@ -1621,6 +1626,7 @@ msgstr "Play"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Available offline"
|
||||
|
||||
@@ -2036,7 +2042,6 @@ msgstr "Get Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "This computer"
|
||||
|
||||
@@ -2516,7 +2521,7 @@ msgid "About Sync Modes"
|
||||
msgstr "About Sync Modes"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Folders"
|
||||
|
||||
@@ -3376,7 +3381,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Select Photo to Upload"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Images"
|
||||
|
||||
@@ -4521,7 +4526,7 @@ msgid "Up to date"
|
||||
msgstr "Up to date"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive isn't running"
|
||||
|
||||
@@ -5053,6 +5058,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Open folder"
|
||||
|
||||
@@ -5431,6 +5437,134 @@ msgstr "(no pinned files — type to search)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(cannot resolve app dirs)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Recent"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Pinned in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Best matches"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Search Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Search in Drive and on this computer"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "No results"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive is not running"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Start Proton Drive to search your files."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navigate · ↵ open · Tab filter"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Search your Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr "Still indexing this computer — local results will fill in shortly."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Try a different search, or another filter."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr "Start typing to search Proton Drive and the files on this computer."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "No pinned files"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} pinned file"
|
||||
msgstr[1] "{n} pinned files"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} on this computer · indexing…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} on this computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Opening {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Could not open: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Couldn't reach Proton Drive"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Availability"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Show in Folder"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Copy Path"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Path copied"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "On this computer"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Downloaded"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Online only"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5584,16 +5718,16 @@ msgid "Quit"
|
||||
msgstr "Quit"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "All"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Documents"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Media"
|
||||
|
||||
@@ -5602,140 +5736,49 @@ msgstr "Media"
|
||||
msgid "My files / {path}"
|
||||
msgstr "My files / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Search Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Search in Drive and on this computer"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Best matches"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "No results"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive is not running"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Start Proton Drive to search your files."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navigate · ↵ open · Tab filter"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Pinned in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Search your Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr "Still indexing this computer — local results will fill in shortly."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Try a different search, or another filter."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr "Start typing to search Proton Drive and the files on this computer."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "No pinned files"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} pinned file"
|
||||
msgstr[1] "{n} pinned files"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} on this computer · indexing…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} on this computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Opening {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Could not open: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Couldn't reach Proton Drive"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Home / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "now"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count}m"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count}h"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count}d"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count}mo"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count}y"
|
||||
@@ -5882,9 +5925,6 @@ msgstr "cannot reach the Proton Drive daemon: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Use this computer's identity"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "On this computer"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: Spanish\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A, %-d de %B de %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "Mis archivos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Fotos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Compartido conmigo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Compartido por mí"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Equipos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Papelera"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Sincronización"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Está sin conexión"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Eso ya no existe"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "No tiene acceso a eso"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Algo lo cambió antes"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Su Proton Drive está lleno"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencias"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Atajos del teclado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "Acerca de Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Menú principal"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -164,23 +164,23 @@ msgstr ""
|
||||
"Cliente no oficial: no está afiliado a Proton AG, ni respaldado ni mantenido "
|
||||
"por esta."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Código fuente"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Condiciones del servicio de Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Política de privacidad de Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Aviso legal"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -203,7 +203,7 @@ msgstr ""
|
||||
"Este software se proporciona “tal cual”, sin garantía de ningún tipo. Guarde "
|
||||
"una copia de los datos que no pueda permitirse perder."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -213,7 +213,7 @@ msgstr ""
|
||||
"www.geonames.org/\">GeoNames</a>, con licencia <a href=\"https://"
|
||||
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -223,7 +223,7 @@ msgstr ""
|
||||
"fronteras de países de <a href=\"https://www.naturalearthdata.com/\">Natural "
|
||||
"Earth</a>, que son de dominio público."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -239,15 +239,15 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Colaboradores de Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "¿Detener Proton Drive?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -256,7 +256,7 @@ msgstr ""
|
||||
"a conectarse. Proton Drive se iniciará de nuevo en su próximo inicio de "
|
||||
"sesión."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -285,30 +285,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Detener"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "No se pudo detener Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "El servicio de Proton Drive no se detuvo."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Buscar en Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -317,38 +317,38 @@ msgstr "Buscar en Drive"
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Atajos del teclado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Archivos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Carpeta nueva"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Subir archivos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Atrás / adelante"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Carpeta superior"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Cuadrícula / lista"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -357,7 +357,7 @@ msgstr "Cuadrícula / lista"
|
||||
msgid "Rename"
|
||||
msgstr "Renombrar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -367,72 +367,73 @@ msgstr "Renombrar"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Mover a la papelera"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Anular la selección"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Miniaturas más grandes"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Miniaturas más pequeñas"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Restablecer el tamaño de las miniaturas"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Seleccionar todo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Visor de fotos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Foto anterior / siguiente"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Primera / última foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Mostrar detalles"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pantalla completa"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Seleccione un único elemento para renombrarlo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Sin conexión"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "El servicio de Proton Drive no está en ejecución."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Conectando…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "Esperando a que se inicie el servicio de Proton Drive."
|
||||
|
||||
@@ -477,7 +478,7 @@ msgstr "Nada del registro reciente coincide con este filtro."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Reintentar"
|
||||
|
||||
@@ -1236,6 +1237,7 @@ msgstr "El servicio de Proton Drive no respondió."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
@@ -1426,6 +1428,7 @@ msgstr "Nombre"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Tamaño"
|
||||
@@ -1601,6 +1604,7 @@ msgstr[1] "{n} archivos ahora están solo en línea"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Modificado"
|
||||
@@ -1609,6 +1613,7 @@ msgstr "Modificado"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Ubicación"
|
||||
|
||||
@@ -1627,6 +1632,7 @@ msgstr "Reproducir"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Disponible sin conexión"
|
||||
|
||||
@@ -2047,7 +2053,6 @@ msgstr "Obtener Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Este equipo"
|
||||
|
||||
@@ -2533,7 +2538,7 @@ msgid "About Sync Modes"
|
||||
msgstr "Acerca de los modos de sincronización"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Carpetas"
|
||||
|
||||
@@ -3407,7 +3412,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Seleccionar la foto que subir"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Imágenes"
|
||||
|
||||
@@ -4570,7 +4575,7 @@ msgid "Up to date"
|
||||
msgstr "Actualizado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive no está en ejecución"
|
||||
|
||||
@@ -5112,6 +5117,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Abrir carpeta"
|
||||
|
||||
@@ -5495,6 +5501,138 @@ msgstr "(no hay archivos anclados; escriba para buscar)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(no se pueden resolver las carpetas de la aplicación)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Recientes"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Anclado en Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Mejores coincidencias"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Buscar en Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Buscar en Drive y en este equipo"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "No hay resultados"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive no está en ejecución"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Inicie Proton Drive para buscar en sus archivos."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navegar · ↵ abrir · Tab filtrar"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Buscar en su Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Todavía se está indexando este equipo; los resultados locales aparecerán en "
|
||||
"breve."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Pruebe con otra búsqueda u otro filtro."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Empiece a escribir para buscar en Proton Drive y en los archivos de este "
|
||||
"equipo."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "No hay archivos anclados"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} archivo anclado"
|
||||
msgstr[1] "{n} archivos anclados"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} en Drive · {local} en este equipo · indexando…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} en Drive · {local} en este equipo"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Abriendo {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "No se pudo abrir: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "No se pudo contactar con Proton Drive"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Disponibilidad"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Mostrar en la carpeta"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Copiar ruta"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Ruta copiada"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "En este equipo"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Descargado"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Solo en línea"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5648,16 +5786,16 @@ msgid "Quit"
|
||||
msgstr "Salir"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Todo"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Documentos"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Multimedia"
|
||||
|
||||
@@ -5666,144 +5804,49 @@ msgstr "Multimedia"
|
||||
msgid "My files / {path}"
|
||||
msgstr "Mis archivos / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Buscar en Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Buscar en Drive y en este equipo"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Mejores coincidencias"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "No hay resultados"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive no está en ejecución"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Inicie Proton Drive para buscar en sus archivos."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navegar · ↵ abrir · Tab filtrar"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Anclado en Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Buscar en su Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Todavía se está indexando este equipo; los resultados locales aparecerán en "
|
||||
"breve."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Pruebe con otra búsqueda u otro filtro."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Empiece a escribir para buscar en Proton Drive y en los archivos de este "
|
||||
"equipo."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "No hay archivos anclados"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} archivo anclado"
|
||||
msgstr[1] "{n} archivos anclados"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} en Drive · {local} en este equipo · indexando…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} en Drive · {local} en este equipo"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Abriendo {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "No se pudo abrir: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "No se pudo contactar con Proton Drive"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Carpeta personal"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Carpeta personal / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "ahora"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count} min"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count} h"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count} d"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count} mes."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count} a"
|
||||
@@ -5954,9 +5997,6 @@ msgstr "no se puede contactar con el demonio de Proton Drive: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Usar la identidad de este equipo"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "En este equipo"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: French\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A %-d %B %Y à %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A %-d %B %Y à %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "Mes fichiers"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Photos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Partagés avec moi"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Partagés par moi"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Ordinateurs"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Corbeille"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Synchronisation"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what} : {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Vous êtes hors ligne"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Cet élément n’existe plus"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "Vous n’avez pas accès à cet élément"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Quelque chose l’a modifié entre-temps"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Votre Proton Drive est plein"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Préférences"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Raccourcis clavier"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "À propos de Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Menu principal"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -164,23 +164,23 @@ msgstr ""
|
||||
"Client non officiel — non affilié à Proton AG, ni approuvé ni pris en charge "
|
||||
"par Proton AG."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Code source"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Conditions d’utilisation de Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Politique de confidentialité de Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Avertissement"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -204,7 +204,7 @@ msgstr ""
|
||||
"une copie de toutes les données que vous ne pouvez pas vous permettre de "
|
||||
"perdre."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -214,7 +214,7 @@ msgstr ""
|
||||
"www.geonames.org/\">GeoNames</a>, sous licence <a href=\"https://"
|
||||
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -224,7 +224,7 @@ msgstr ""
|
||||
"frontières des pays de <a href=\"https://www.naturalearthdata.com/\">Natural "
|
||||
"Earth</a>, qui sont dans le domaine public."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.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
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Les contributeurs de Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Arrêter Proton Drive ?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -258,7 +258,7 @@ msgstr ""
|
||||
"vous reconnectez pas. Proton Drive redémarrera à votre prochaine ouverture "
|
||||
"de session."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -287,30 +287,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Arrêter"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Impossible d’arrêter Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "Le service Proton Drive ne s’est pas arrêté."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Rechercher dans Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -319,38 +319,38 @@ msgstr "Rechercher dans Drive"
|
||||
msgid "Refresh"
|
||||
msgstr "Actualiser"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Raccourcis clavier"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Fichiers"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Nouveau dossier"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Téléverser des fichiers"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Précédent / suivant"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Dossier parent"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Grille / liste"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -359,7 +359,7 @@ msgstr "Grille / liste"
|
||||
msgid "Rename"
|
||||
msgstr "Renommer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -369,72 +369,73 @@ msgstr "Renommer"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Mettre à la corbeille"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Effacer la sélection"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Miniatures plus grandes"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Miniatures plus petites"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Réinitialiser la taille des miniatures"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Tout sélectionner"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Visionneuse de photos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Photo précédente / suivante"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Première / dernière photo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Afficher les détails"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Plein écran"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Sélectionnez un seul élément pour le renommer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Non connecté"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "Le service Proton Drive n’est pas en cours d’exécution."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Connexion…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "En attente du démarrage du service Proton Drive."
|
||||
|
||||
@@ -479,7 +480,7 @@ msgstr "Rien dans le journal récent ne correspond à ce filtre."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Réessayer"
|
||||
|
||||
@@ -1243,6 +1244,7 @@ msgstr "Le service Proton Drive n’a pas répondu."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Ouvrir"
|
||||
@@ -1433,6 +1435,7 @@ msgstr "Nom"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Taille"
|
||||
@@ -1609,6 +1612,7 @@ msgstr[1] "{n} fichiers sont désormais en ligne uniquement"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Modifié"
|
||||
@@ -1617,6 +1621,7 @@ msgstr "Modifié"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Emplacement"
|
||||
|
||||
@@ -1635,6 +1640,7 @@ msgstr "Lire"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Disponible hors ligne"
|
||||
|
||||
@@ -2056,7 +2062,6 @@ msgstr "Obtenir Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Cet ordinateur"
|
||||
|
||||
@@ -2546,7 +2551,7 @@ msgid "About Sync Modes"
|
||||
msgstr "À propos des modes de synchronisation"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Dossiers"
|
||||
|
||||
@@ -3421,7 +3426,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Sélectionner une photo à téléverser"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Images"
|
||||
|
||||
@@ -4598,7 +4603,7 @@ msgid "Up to date"
|
||||
msgstr "À jour"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive n’est pas en cours d’exécution"
|
||||
|
||||
@@ -5143,6 +5148,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Ouvrir le dossier"
|
||||
|
||||
@@ -5527,6 +5533,138 @@ msgstr "(aucun fichier épinglé — tapez pour rechercher)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(impossible de déterminer les répertoires de l’application)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Récents"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Épinglé dans Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Meilleurs résultats"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Rechercher dans Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Rechercher dans Drive et sur cet ordinateur"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Échap"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "Aucun résultat"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive n’est pas en cours d’exécution"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Démarrez Proton Drive pour rechercher dans vos fichiers."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ naviguer · ↵ ouvrir · Tab filtrer"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Rechercher dans votre Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Indexation de cet ordinateur en cours — les résultats locaux vont bientôt "
|
||||
"apparaître."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Essayez une autre recherche ou un autre filtre."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Commencez à taper pour rechercher dans Proton Drive et dans les fichiers de "
|
||||
"cet ordinateur."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "Aucun fichier épinglé"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} fichier épinglé"
|
||||
msgstr[1] "{n} fichiers épinglés"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} dans Drive · {local} sur cet ordinateur · indexation…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} dans Drive · {local} sur cet ordinateur"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Ouverture de {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Impossible d’ouvrir : {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Impossible de joindre Proton Drive"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Disponibilité"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Afficher dans le dossier"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Copier le chemin"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Chemin copié"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "Sur cet ordinateur"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Téléchargé"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "En ligne uniquement"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5680,16 +5818,16 @@ msgid "Quit"
|
||||
msgstr "Quitter"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Tout"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Documents"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Médias"
|
||||
|
||||
@@ -5698,144 +5836,49 @@ msgstr "Médias"
|
||||
msgid "My files / {path}"
|
||||
msgstr "Mes fichiers / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Rechercher dans Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Rechercher dans Drive et sur cet ordinateur"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Échap"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Meilleurs résultats"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "Aucun résultat"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive n’est pas en cours d’exécution"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Démarrez Proton Drive pour rechercher dans vos fichiers."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ naviguer · ↵ ouvrir · Tab filtrer"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Épinglé dans Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Rechercher dans votre Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Indexation de cet ordinateur en cours — les résultats locaux vont bientôt "
|
||||
"apparaître."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Essayez une autre recherche ou un autre filtre."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Commencez à taper pour rechercher dans Proton Drive et dans les fichiers de "
|
||||
"cet ordinateur."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "Aucun fichier épinglé"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} fichier épinglé"
|
||||
msgstr[1] "{n} fichiers épinglés"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} dans Drive · {local} sur cet ordinateur · indexation…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} dans Drive · {local} sur cet ordinateur"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Ouverture de {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Impossible d’ouvrir : {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Impossible de joindre Proton Drive"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Dossier personnel"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Dossier personnel / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "maintenant"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count} min"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count} h"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count} j"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count} mois"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count} a"
|
||||
@@ -5986,9 +6029,6 @@ msgstr "impossible de joindre le démon Proton Drive : {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Utiliser l’identité de cet ordinateur"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "Sur cet ordinateur"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: Italian\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A %-d %B %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A %-d %B %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "I miei file"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Condivisi con me"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Condivisi da me"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Computer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Cestino"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Sincronizzazione"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Sei offline"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Non esiste più"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "Non hai accesso a questo elemento"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "È stato modificato prima da qualcos'altro"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Il tuo Proton Drive è pieno"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenze"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Scorciatoie da tastiera"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "Informazioni su Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Menu principale"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -163,23 +163,23 @@ msgstr ""
|
||||
"\n"
|
||||
"Client non ufficiale: non affiliato, approvato né supportato da Proton AG."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Codice sorgente"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Termini di servizio di Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Informativa sulla privacy di Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Esclusione di responsabilità"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -202,7 +202,7 @@ msgstr ""
|
||||
"Questo software è fornito “così com’è”, senza alcuna garanzia. Conserva una "
|
||||
"copia dei dati che non puoi permetterti di perdere."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -212,7 +212,7 @@ msgstr ""
|
||||
"\">GeoNames</a>, con licenza <a href=\"https://creativecommons.org/licenses/"
|
||||
"by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -222,7 +222,7 @@ msgstr ""
|
||||
"confini nazionali di <a href=\"https://www.naturalearthdata.com/\">Natural "
|
||||
"Earth</a>, che sono di pubblico dominio."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -238,15 +238,15 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Collaboratori di Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Arrestare Proton Drive?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -254,7 +254,7 @@ msgstr ""
|
||||
"I miei file andranno offline e nulla verrà sincronizzato finché non ti "
|
||||
"riconnetti. Proton Drive si riavvierà al prossimo accesso."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -283,30 +283,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Arresta"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Impossibile arrestare Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "Il servizio di Proton Drive non si è arrestato."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "Generale"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Cerca in Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -315,38 +315,38 @@ msgstr "Cerca in Drive"
|
||||
msgid "Refresh"
|
||||
msgstr "Aggiorna"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Scorciatoie da tastiera"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "File"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Nuova cartella"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Carica file"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Indietro / avanti"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Cartella superiore"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Griglia / elenco"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -355,7 +355,7 @@ msgstr "Griglia / elenco"
|
||||
msgid "Rename"
|
||||
msgstr "Rinomina"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -365,72 +365,73 @@ msgstr "Rinomina"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Sposta nel cestino"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Annulla la selezione"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Miniature più grandi"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Miniature più piccole"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Ripristina la dimensione delle miniature"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Seleziona tutto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Visualizzatore di foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Foto precedente / successiva"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Prima / ultima foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Mostra dettagli"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Schermo intero"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Chiudi"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Seleziona un solo elemento per rinominarlo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Non connesso"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "Il servizio di Proton Drive non è in esecuzione."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Connessione…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "In attesa dell’avvio del servizio di Proton Drive."
|
||||
|
||||
@@ -475,7 +476,7 @@ msgstr "Nessuna voce del registro recente corrisponde a questo filtro."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Riprova"
|
||||
|
||||
@@ -1237,6 +1238,7 @@ msgstr "Il servizio di Proton Drive non ha risposto."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Apri"
|
||||
@@ -1427,6 +1429,7 @@ msgstr "Nome"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Dimensione"
|
||||
@@ -1603,6 +1606,7 @@ msgstr[1] "{n} file sono ora solo online"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Modificato"
|
||||
@@ -1611,6 +1615,7 @@ msgstr "Modificato"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Posizione"
|
||||
|
||||
@@ -1629,6 +1634,7 @@ msgstr "Riproduci"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Disponibile offline"
|
||||
|
||||
@@ -2050,7 +2056,6 @@ msgstr "Scarica Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Questo computer"
|
||||
|
||||
@@ -2544,7 +2549,7 @@ msgid "About Sync Modes"
|
||||
msgstr "Informazioni sulle modalità di sincronizzazione"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Cartelle"
|
||||
|
||||
@@ -3417,7 +3422,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Seleziona la foto da caricare"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Immagini"
|
||||
|
||||
@@ -4579,7 +4584,7 @@ msgid "Up to date"
|
||||
msgstr "Aggiornato"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive non è in esecuzione"
|
||||
|
||||
@@ -5126,6 +5131,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Apri cartella"
|
||||
|
||||
@@ -5508,6 +5514,137 @@ msgstr "(nessun file fissato: digita per cercare)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(impossibile determinare le directory dell'app)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Recenti"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Fissato in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Migliori corrispondenze"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Cerca in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Cerca in Drive e su questo computer"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "Nessun risultato"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive non è in esecuzione"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Avvia Proton Drive per cercare nei tuoi file."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ naviga · ↵ apri · Tab filtra"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Cerca nel tuo Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Indicizzazione di questo computer ancora in corso: i risultati locali "
|
||||
"arriveranno a breve."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Prova una ricerca diversa o un altro filtro."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Inizia a digitare per cercare in Proton Drive e nei file di questo computer."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "Nessun file fissato"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} file fissato"
|
||||
msgstr[1] "{n} file fissati"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} su questo computer · indicizzazione…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} su questo computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Apertura di {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Impossibile aprire: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Impossibile raggiungere Proton Drive"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Disponibilità"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Mostra nella cartella"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Copia percorso"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Percorso copiato"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "Su questo computer"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Scaricato"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Solo online"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5661,16 +5798,16 @@ msgid "Quit"
|
||||
msgstr "Esci"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Tutti"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Documenti"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Multimedia"
|
||||
|
||||
@@ -5679,143 +5816,49 @@ msgstr "Multimedia"
|
||||
msgid "My files / {path}"
|
||||
msgstr "I miei file / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Cerca in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Cerca in Drive e su questo computer"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Migliori corrispondenze"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "Nessun risultato"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive non è in esecuzione"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Avvia Proton Drive per cercare nei tuoi file."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ naviga · ↵ apri · Tab filtra"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Fissato in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Cerca nel tuo Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Indicizzazione di questo computer ancora in corso: i risultati locali "
|
||||
"arriveranno a breve."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Prova una ricerca diversa o un altro filtro."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Inizia a digitare per cercare in Proton Drive e nei file di questo computer."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "Nessun file fissato"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} file fissato"
|
||||
msgstr[1] "{n} file fissati"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} su questo computer · indicizzazione…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} su questo computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Apertura di {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Impossibile aprire: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Impossibile raggiungere Proton Drive"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Home / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "ora"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count} min"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count} h"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count} g"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count} mes."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count} a"
|
||||
@@ -5964,9 +6007,6 @@ msgstr "impossibile raggiungere il demone di Proton Drive: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Usa l'identità di questo computer"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "Su questo computer"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: Dutch\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A %-d %B %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A %-d %B %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "Mijn bestanden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Foto's"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Gedeeld met mij"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Gedeeld door mij"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Computers"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Prullenbak"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Synchronisatie"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Je bent offline"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Dat bestaat niet meer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "Je hebt daar geen toegang toe"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Er is eerst iets anders gewijzigd"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Je Proton Drive is vol"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Voorkeuren"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Sneltoetsen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "Over Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Hoofdmenu"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -164,23 +164,23 @@ msgstr ""
|
||||
"Onofficiële client — niet gelieerd aan, onderschreven door of ondersteund "
|
||||
"door Proton AG."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Broncode"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Servicevoorwaarden van Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Privacybeleid van Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Disclaimer"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -203,7 +203,7 @@ msgstr ""
|
||||
"Deze software wordt geleverd “zoals ze is”, zonder enige garantie. Bewaar "
|
||||
"een kopie van gegevens die je niet kwijt wilt raken."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -213,7 +213,7 @@ msgstr ""
|
||||
"\">GeoNames</a>, gelicentieerd onder <a href=\"https://creativecommons.org/"
|
||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -223,7 +223,7 @@ msgstr ""
|
||||
"href=\"https://www.naturalearthdata.com/\">Natural Earth</a>, die in het "
|
||||
"publieke domein vallen."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -239,15 +239,15 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Bijdragers aan Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Proton Drive stoppen?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -255,7 +255,7 @@ msgstr ""
|
||||
"Mijn bestanden gaat offline en er wordt niets gesynchroniseerd tot je weer "
|
||||
"verbinding maakt. Proton Drive start opnieuw bij je volgende aanmelding."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -284,30 +284,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Stoppen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Kon Proton Drive niet stoppen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "De Proton Drive-service is niet gestopt."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "Algemeen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Drive doorzoeken"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -316,38 +316,38 @@ msgstr "Drive doorzoeken"
|
||||
msgid "Refresh"
|
||||
msgstr "Verversen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Sneltoetsen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Bestanden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Nieuwe map"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Bestanden uploaden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Terug / vooruit"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Bovenliggende map"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Raster / lijst"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -356,7 +356,7 @@ msgstr "Raster / lijst"
|
||||
msgid "Rename"
|
||||
msgstr "Hernoemen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -366,72 +366,73 @@ msgstr "Hernoemen"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Naar prullenbak verplaatsen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Selectie wissen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Grotere miniaturen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Kleinere miniaturen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Miniatuurgrootte herstellen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Alles selecteren"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Fotoweergave"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Vorige / volgende foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Eerste / laatste foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Details tonen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Volledig scherm"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Sluiten"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Selecteer één item om het te hernoemen"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Niet verbonden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "De Proton Drive-service draait niet."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Verbinden…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "Wachten tot de Proton Drive-service is gestart."
|
||||
|
||||
@@ -476,7 +477,7 @@ msgstr "Niets in het recente logboek past bij dit filter."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Opnieuw proberen"
|
||||
|
||||
@@ -1235,6 +1236,7 @@ msgstr "De Proton Drive-service reageerde niet."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Openen"
|
||||
@@ -1425,6 +1427,7 @@ msgstr "Naam"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Grootte"
|
||||
@@ -1601,6 +1604,7 @@ msgstr[1] "{n} bestanden zijn nu alleen online"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Gewijzigd"
|
||||
@@ -1609,6 +1613,7 @@ msgstr "Gewijzigd"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Locatie"
|
||||
|
||||
@@ -1627,6 +1632,7 @@ msgstr "Afspelen"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Offline beschikbaar"
|
||||
|
||||
@@ -2046,7 +2052,6 @@ msgstr "Proton Drive downloaden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Deze computer"
|
||||
|
||||
@@ -2538,7 +2543,7 @@ msgid "About Sync Modes"
|
||||
msgstr "Over synchronisatiemodi"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Mappen"
|
||||
|
||||
@@ -3409,7 +3414,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Foto selecteren om te uploaden"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Afbeeldingen"
|
||||
|
||||
@@ -4579,7 +4584,7 @@ msgid "Up to date"
|
||||
msgstr "Bijgewerkt"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive draait niet"
|
||||
|
||||
@@ -5120,6 +5125,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Map openen"
|
||||
|
||||
@@ -5501,6 +5507,137 @@ msgstr "(geen vastgezette bestanden — typ om te zoeken)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(kan app-mappen niet bepalen)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Recent"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Vastgezet in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Beste overeenkomsten"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Proton Drive doorzoeken"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Zoeken in Drive en op deze computer"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "Geen resultaten"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive draait niet"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Start Proton Drive om je bestanden te doorzoeken."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navigeren · ↵ openen · Tab filter"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Je Drive doorzoeken"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Deze computer wordt nog geïndexeerd — lokale resultaten verschijnen zo."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Probeer een andere zoekopdracht of een ander filter."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Begin met typen om Proton Drive en de bestanden op deze computer te "
|
||||
"doorzoeken."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "Geen vastgezette bestanden"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} vastgezet bestand"
|
||||
msgstr[1] "{n} vastgezette bestanden"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} op deze computer · indexeren…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} op deze computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "{name} openen…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Kon niet openen: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Kon Proton Drive niet bereiken"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Beschikbaarheid"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "In map tonen"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Pad kopiëren"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Pad gekopieerd"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "Op deze computer"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Gedownload"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Alleen online"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5654,16 +5791,16 @@ msgid "Quit"
|
||||
msgstr "Afsluiten"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Alles"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Documenten"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Media"
|
||||
|
||||
@@ -5672,143 +5809,49 @@ msgstr "Media"
|
||||
msgid "My files / {path}"
|
||||
msgstr "Mijn bestanden / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Proton Drive doorzoeken"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Zoeken in Drive en op deze computer"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Beste overeenkomsten"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "Geen resultaten"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive draait niet"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Start Proton Drive om je bestanden te doorzoeken."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navigeren · ↵ openen · Tab filter"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Vastgezet in Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Je Drive doorzoeken"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Deze computer wordt nog geïndexeerd — lokale resultaten verschijnen zo."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Probeer een andere zoekopdracht of een ander filter."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Begin met typen om Proton Drive en de bestanden op deze computer te "
|
||||
"doorzoeken."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "Geen vastgezette bestanden"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} vastgezet bestand"
|
||||
msgstr[1] "{n} vastgezette bestanden"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} in Drive · {local} op deze computer · indexeren…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} in Drive · {local} op deze computer"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "{name} openen…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Kon niet openen: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Kon Proton Drive niet bereiken"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Persoonlijke map"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Persoonlijke map / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "nu"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count}m"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count}u"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count}d"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count}mnd"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count}j"
|
||||
@@ -5957,9 +6000,6 @@ msgstr "kan de achtergronddienst van Proton Drive niet bereiken: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Identiteit van deze computer gebruiken"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "Op deze computer"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
+215
-172
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.5.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -60,7 +60,7 @@ msgstr ""
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -71,91 +71,91 @@ msgstr ""
|
||||
msgid "My files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -163,23 +163,23 @@ msgid ""
|
||||
"AG."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -192,21 +192,21 @@ msgid ""
|
||||
"of any data you cannot afford to lose."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
"public domain."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -217,21 +217,21 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -260,30 +260,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -292,38 +292,38 @@ msgstr ""
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -332,7 +332,7 @@ msgstr ""
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -342,72 +342,73 @@ msgstr ""
|
||||
msgid "Move to Trash"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr ""
|
||||
|
||||
@@ -452,7 +453,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
@@ -1203,6 +1204,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
@@ -1393,6 +1395,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
@@ -1567,6 +1570,7 @@ msgstr[1] ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr ""
|
||||
@@ -1575,6 +1579,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
@@ -1593,6 +1598,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr ""
|
||||
|
||||
@@ -2008,7 +2014,6 @@ msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr ""
|
||||
|
||||
@@ -2453,7 +2458,7 @@ msgid "About Sync Modes"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr ""
|
||||
|
||||
@@ -3289,7 +3294,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr ""
|
||||
|
||||
@@ -4414,7 +4419,7 @@ msgid "Up to date"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr ""
|
||||
|
||||
@@ -4930,6 +4935,7 @@ msgid "Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
@@ -5304,6 +5310,134 @@ msgstr ""
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr ""
|
||||
@@ -5457,16 +5591,16 @@ msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr ""
|
||||
|
||||
@@ -5475,140 +5609,49 @@ msgstr ""
|
||||
msgid "My files / {path}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr ""
|
||||
|
||||
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: Polish\n"
|
||||
@@ -59,7 +59,7 @@ msgstr "%-d %b %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A, %-d %B %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -70,91 +70,91 @@ msgstr "%A, %-d %B %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "Moje pliki"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Zdjęcia"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Udostępnione mi"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Udostępnione przeze mnie"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Komputery"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Kosz"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Synchronizacja"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Brak połączenia z siecią"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Ten element już nie istnieje"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "Brak dostępu do tego elementu"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Coś zmieniło ten element wcześniej"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Proton Drive jest pełny"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencje"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Skróty klawiszowe"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "O programie Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Menu główne"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -166,23 +166,23 @@ msgstr ""
|
||||
"Nieoficjalny klient — niepowiązany z Proton AG, niepopierany ani "
|
||||
"niewspierany przez tę firmę."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Kod źródłowy"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Warunki korzystania z usług Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Polityka prywatności Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Zastrzeżenia"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -206,7 +206,7 @@ msgstr ""
|
||||
"gwarancji. Zachowaj kopię danych, na których utratę nie możesz sobie "
|
||||
"pozwolić."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -216,7 +216,7 @@ msgstr ""
|
||||
"\">GeoNames</a> udostępnionych na licencji <a href=\"https://"
|
||||
"creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -226,7 +226,7 @@ msgstr ""
|
||||
"www.naturalearthdata.com/\">Natural Earth</a>, które należą do domeny "
|
||||
"publicznej."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -242,15 +242,15 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Współtwórcy programu Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Zatrzymać Proton Drive?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -259,7 +259,7 @@ msgstr ""
|
||||
"ponownego połączenia. Proton Drive uruchomi się ponownie przy następnym "
|
||||
"logowaniu."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -288,30 +288,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Zatrzymaj"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Nie można zatrzymać Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "Usługa Proton Drive nie zatrzymała się."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "Ogólne"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Przeszukaj Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -320,38 +320,38 @@ msgstr "Przeszukaj Drive"
|
||||
msgid "Refresh"
|
||||
msgstr "Odśwież"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Skróty klawiszowe"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Pliki"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Nowy katalog"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Wyślij pliki"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Wstecz/dalej"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Katalog nadrzędny"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Siatka/lista"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -360,7 +360,7 @@ msgstr "Siatka/lista"
|
||||
msgid "Rename"
|
||||
msgstr "Zmień nazwę"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -370,72 +370,73 @@ msgstr "Zmień nazwę"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Przenieś do kosza"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Wyczyść zaznaczenie"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Większe miniatury"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Mniejsze miniatury"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Przywróć rozmiar miniatur"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Zaznacz wszystko"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Przeglądarka zdjęć"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Poprzednie/następne zdjęcie"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Pierwsze/ostatnie zdjęcie"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Wyświetl szczegóły"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pełny ekran"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Zamknij"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Należy zaznaczyć jeden element, aby zmienić jego nazwę"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Brak połączenia"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "Usługa Proton Drive nie jest uruchomiona."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Łączenie…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "Oczekiwanie na uruchomienie usługi Proton Drive."
|
||||
|
||||
@@ -480,7 +481,7 @@ msgstr "Nic w ostatnim dzienniku nie pasuje do tego filtru."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Ponów"
|
||||
|
||||
@@ -1268,6 +1269,7 @@ msgstr "Usługa Proton Drive nie odpowiedziała."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Otwórz"
|
||||
@@ -1463,6 +1465,7 @@ msgstr "Nazwa"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Rozmiar"
|
||||
@@ -1647,6 +1650,7 @@ msgstr[2] "{n} plików jest teraz tylko online"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Modyfikacja"
|
||||
@@ -1655,6 +1659,7 @@ msgstr "Modyfikacja"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Położenie"
|
||||
|
||||
@@ -1673,6 +1678,7 @@ msgstr "Odtwórz"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Dostępne offline"
|
||||
|
||||
@@ -2100,7 +2106,6 @@ msgstr "Pobierz Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Ten komputer"
|
||||
|
||||
@@ -2595,7 +2600,7 @@ msgid "About Sync Modes"
|
||||
msgstr "Informacje o trybach synchronizacji"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Katalogi"
|
||||
|
||||
@@ -3471,7 +3476,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Wybór zdjęcia do wysłania"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Obrazy"
|
||||
|
||||
@@ -4654,7 +4659,7 @@ msgid "Up to date"
|
||||
msgstr "Aktualne"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "Proton Drive nie jest uruchomiony"
|
||||
|
||||
@@ -5208,6 +5213,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Otwórz katalog"
|
||||
|
||||
@@ -5591,6 +5597,136 @@ msgstr "(brak przypiętych plików — zacznij pisać, aby wyszukać)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(nie można ustalić katalogów aplikacji)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Ostatnie"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Przypięte w Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Najlepsze wyniki"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Przeszukaj Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Wyszukiwanie w Drive i na tym komputerze"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "Brak wyników"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive nie jest uruchomiony"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Uruchom Proton Drive, aby przeszukać pliki."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ nawigacja · ↵ otwarcie · Tab filtr"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Przeszukaj Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr "Trwa indeksowanie tego komputera — lokalne wyniki wkrótce się pojawią."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Można spróbować innego wyszukiwania lub innego filtru."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Można zacząć pisać, aby przeszukać Proton Drive i pliki na tym komputerze."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "Brak przypiętych plików"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} przypięty plik"
|
||||
msgstr[1] "{n} przypięte pliki"
|
||||
msgstr[2] "{n} przypiętych plików"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} w Drive · {local} na tym komputerze · indeksowanie…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} w Drive · {local} na tym komputerze"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Otwieranie {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Nie można otworzyć: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Nie można połączyć się z Proton Drive"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Dostępność"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Pokaż w katalogu"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Skopiuj ścieżkę"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Skopiowano ścieżkę"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "Na tym komputerze"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Pobrane"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Tylko online"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosowo"
|
||||
@@ -5754,16 +5890,16 @@ msgid "Quit"
|
||||
msgstr "Zakończ"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Wszystko"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Dokumenty"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Multimedia"
|
||||
|
||||
@@ -5772,142 +5908,49 @@ msgstr "Multimedia"
|
||||
msgid "My files / {path}"
|
||||
msgstr "Moje pliki / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Przeszukaj Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Wyszukiwanie w Drive i na tym komputerze"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Najlepsze wyniki"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "Brak wyników"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "Proton Drive nie jest uruchomiony"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Uruchom Proton Drive, aby przeszukać pliki."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ nawigacja · ↵ otwarcie · Tab filtr"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Przypięte w Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Przeszukaj Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr "Trwa indeksowanie tego komputera — lokalne wyniki wkrótce się pojawią."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Można spróbować innego wyszukiwania lub innego filtru."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Można zacząć pisać, aby przeszukać Proton Drive i pliki na tym komputerze."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "Brak przypiętych plików"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} przypięty plik"
|
||||
msgstr[1] "{n} przypięte pliki"
|
||||
msgstr[2] "{n} przypiętych plików"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} w Drive · {local} na tym komputerze · indeksowanie…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} w Drive · {local} na tym komputerze"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Otwieranie {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Nie można otworzyć: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Nie można połączyć się z Proton Drive"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Katalog domowy"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Katalog domowy / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "teraz"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count} min"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count} godz."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count} dn."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count} mies."
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count} r."
|
||||
@@ -6057,9 +6100,6 @@ msgstr "nie można połączyć się z usługą Proton Drive: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Użycie tożsamości tego komputera"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "Na tym komputerze"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
+218
-178
@@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 16:17+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 22:51+0200\n"
|
||||
"PO-Revision-Date: 2026-09-23 12:00+0200\n"
|
||||
"Last-Translator: Proton Drive for Linux contributors\n"
|
||||
"Language-Team: Portuguese (Brazil)\n"
|
||||
@@ -57,7 +57,7 @@ msgstr "%-d de %b de %Y"
|
||||
msgid "%A, %B %-d, %Y, %H:%M"
|
||||
msgstr "%A, %-d de %B de %Y, %H:%M"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:882
|
||||
#: crates/pdfs-gui/src/app/main.rs:734
|
||||
#: crates/pdfs-gui/src/app/pages/activity_text.rs:466
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:454
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:819
|
||||
@@ -68,91 +68,91 @@ msgstr "%A, %-d de %B de %Y, %H:%M"
|
||||
msgid "My files"
|
||||
msgstr "Meus arquivos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:885 crates/pdfs-gui/src/app/main.rs:1529
|
||||
#: crates/pdfs-gui/src/app/main.rs:737 crates/pdfs-gui/src/app/main.rs:1381
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:842
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:441
|
||||
msgid "Photos"
|
||||
msgstr "Fotos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:890
|
||||
#: crates/pdfs-gui/src/app/main.rs:742
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:168
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:482
|
||||
msgid "Shared with me"
|
||||
msgstr "Compartilhados comigo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:895
|
||||
#: crates/pdfs-gui/src/app/main.rs:747
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
|
||||
msgid "Shared by me"
|
||||
msgstr "Compartilhados por mim"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:898
|
||||
#: crates/pdfs-gui/src/app/main.rs:750
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:140
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:481
|
||||
msgid "Computers"
|
||||
msgstr "Computadores"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:899
|
||||
#: crates/pdfs-gui/src/app/main.rs:751
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:101
|
||||
msgid "Trash"
|
||||
msgstr "Lixeira"
|
||||
|
||||
#. Translators: sidebar entry for the page listing this computer's synced folders.
|
||||
#: crates/pdfs-gui/src/app/main.rs:901
|
||||
#: crates/pdfs-gui/src/app/main.rs:753
|
||||
msgid "Sync"
|
||||
msgstr "Sincronização"
|
||||
|
||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||
#. from the mount service.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1218
|
||||
#: crates/pdfs-gui/src/app/main.rs:1070
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr "{what}: {detail}"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1237
|
||||
#: crates/pdfs-gui/src/app/main.rs:1089
|
||||
msgid "You're offline"
|
||||
msgstr "Você está offline"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1238
|
||||
#: crates/pdfs-gui/src/app/main.rs:1090
|
||||
msgid "That's not there any more"
|
||||
msgstr "Isso não existe mais"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1239
|
||||
#: crates/pdfs-gui/src/app/main.rs:1091
|
||||
msgid "You don't have access to that"
|
||||
msgstr "Você não tem acesso a isso"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1240
|
||||
#: crates/pdfs-gui/src/app/main.rs:1092
|
||||
msgid "Something changed this first"
|
||||
msgstr "Algo alterou isso antes"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1241
|
||||
#: crates/pdfs-gui/src/app/main.rs:1093
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr "Seu Proton Drive está cheio"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1282 crates/pdfs-gui/src/app/main.rs:1511
|
||||
#: crates/pdfs-gui/src/app/main.rs:1134 crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:385
|
||||
msgid "Preferences"
|
||||
msgstr "Preferências"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1283
|
||||
#: crates/pdfs-gui/src/app/main.rs:1135
|
||||
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr "Atalhos de teclado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1285
|
||||
#: crates/pdfs-gui/src/app/main.rs:1137
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr "Sobre o Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1290
|
||||
#: crates/pdfs-gui/src/app/main.rs:1142
|
||||
msgid "Main menu"
|
||||
msgstr "Menu principal"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1346
|
||||
#: crates/pdfs-gui/src/app/main.rs:1198
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr "Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1354
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -163,23 +163,23 @@ msgstr ""
|
||||
"\n"
|
||||
"Cliente não oficial — sem afiliação, endosso ou suporte da Proton AG."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "Source Code"
|
||||
msgstr "Código-fonte"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1363
|
||||
#: crates/pdfs-gui/src/app/main.rs:1215
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr "Termos de Serviço da Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1367
|
||||
#: crates/pdfs-gui/src/app/main.rs:1219
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr "Política de Privacidade da Proton"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
#: crates/pdfs-gui/src/app/main.rs:1224
|
||||
msgid "Disclaimer"
|
||||
msgstr "Aviso legal"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1228
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -202,7 +202,7 @@ msgstr ""
|
||||
"Este software é fornecido “no estado em que se encontra”, sem garantia de "
|
||||
"qualquer tipo. Mantenha uma cópia de todos os dados que você não pode perder."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
#: crates/pdfs-gui/src/app/main.rs:1236
|
||||
msgid ""
|
||||
"Places are named with data from <a href=\"https://www.geonames.org/"
|
||||
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
|
||||
@@ -212,7 +212,7 @@ msgstr ""
|
||||
"\">GeoNames</a>, licenciados sob <a href=\"https://creativecommons.org/"
|
||||
"licenses/by/4.0/\">CC BY 4.0</a>."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
#: crates/pdfs-gui/src/app/main.rs:1244
|
||||
msgid ""
|
||||
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a> land outlines and country borders, which are in the "
|
||||
@@ -222,7 +222,7 @@ msgstr ""
|
||||
"fronteiras de países do <a href=\"https://www.naturalearthdata.com/"
|
||||
"\">Natural Earth</a>, que são de domínio público."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1400
|
||||
#: crates/pdfs-gui/src/app/main.rs:1252
|
||||
msgid ""
|
||||
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
|
||||
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
|
||||
@@ -238,15 +238,15 @@ msgstr ""
|
||||
|
||||
#. Translators: replace with your name(s) and email address(es), one
|
||||
#. per line, to be credited in the About dialog.
|
||||
#: crates/pdfs-gui/src/app/main.rs:1411
|
||||
#: crates/pdfs-gui/src/app/main.rs:1263
|
||||
msgid "translator-credits"
|
||||
msgstr "Colaboradores do Proton Drive for Linux"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1301
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr "Parar o Proton Drive?"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1302
|
||||
msgid ""
|
||||
"My files goes offline and nothing syncs until you connect again. Proton "
|
||||
"Drive starts again at your next login."
|
||||
@@ -254,7 +254,7 @@ msgstr ""
|
||||
"Meus arquivos fica offline e nada é sincronizado até você se conectar "
|
||||
"novamente. O Proton Drive será iniciado de novo no seu próximo login."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452 crates/pdfs-gui/src/app/main.rs:1727
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304 crates/pdfs-gui/src/app/main.rs:1579
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:243
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
|
||||
@@ -283,30 +283,30 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
#: crates/pdfs-gui/src/app/main.rs:1305
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr "Parar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1322
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr "Não foi possível parar o Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1323
|
||||
msgid "The Proton Drive service did not stop."
|
||||
msgstr "O serviço do Proton Drive não parou."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1507
|
||||
#: crates/pdfs-gui/src/app/main.rs:1359
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:254
|
||||
msgid "General"
|
||||
msgstr "Geral"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1509
|
||||
#: crates/pdfs-gui/src/app/main.rs:1361
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:247
|
||||
msgid "Search Drive"
|
||||
msgstr "Pesquisar no Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1510
|
||||
#: crates/pdfs-gui/src/app/main.rs:1362
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:957
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:554
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:586
|
||||
@@ -315,38 +315,38 @@ msgstr "Pesquisar no Drive"
|
||||
msgid "Refresh"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1512
|
||||
#: crates/pdfs-gui/src/app/main.rs:1364
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr "Atalhos de teclado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1516
|
||||
#: crates/pdfs-gui/src/app/main.rs:1368
|
||||
msgid "Files"
|
||||
msgstr "Arquivos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1518
|
||||
#: crates/pdfs-gui/src/app/main.rs:1370
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:294
|
||||
msgid "New folder"
|
||||
msgstr "Nova pasta"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1519
|
||||
#: crates/pdfs-gui/src/app/main.rs:1371
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:290
|
||||
msgid "Upload files"
|
||||
msgstr "Enviar arquivos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1520
|
||||
#: crates/pdfs-gui/src/app/main.rs:1372
|
||||
msgid "Back / forward"
|
||||
msgstr "Voltar / avançar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1521
|
||||
#: crates/pdfs-gui/src/app/main.rs:1373
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1939
|
||||
msgid "Parent folder"
|
||||
msgstr "Pasta superior"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1522
|
||||
#: crates/pdfs-gui/src/app/main.rs:1374
|
||||
msgid "Grid / list"
|
||||
msgstr "Grade / lista"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1523
|
||||
#: crates/pdfs-gui/src/app/main.rs:1375
|
||||
#: 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:1893
|
||||
@@ -355,7 +355,7 @@ msgstr "Grade / lista"
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1524 crates/pdfs-gui/src/app/main.rs:1544
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376 crates/pdfs-gui/src/app/main.rs:1396
|
||||
#: 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:932
|
||||
@@ -365,72 +365,73 @@ msgstr "Renomear"
|
||||
msgid "Move to Trash"
|
||||
msgstr "Mover para a lixeira"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1525
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
msgid "Clear the selection"
|
||||
msgstr "Limpar a seleção"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1531
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383
|
||||
msgid "Larger thumbnails"
|
||||
msgstr "Miniaturas maiores"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1532
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr "Miniaturas menores"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1533
|
||||
#: crates/pdfs-gui/src/app/main.rs:1385
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr "Redefinir tamanho das miniaturas"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1534
|
||||
#: crates/pdfs-gui/src/app/main.rs:1386
|
||||
msgid "Select all"
|
||||
msgstr "Selecionar tudo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1538
|
||||
#: crates/pdfs-gui/src/app/main.rs:1390
|
||||
msgid "Photo Viewer"
|
||||
msgstr "Visualizador de fotos"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1540
|
||||
#: crates/pdfs-gui/src/app/main.rs:1392
|
||||
msgid "Previous / next photo"
|
||||
msgstr "Foto anterior / próxima"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1541
|
||||
#: crates/pdfs-gui/src/app/main.rs:1393
|
||||
msgid "First / last photo"
|
||||
msgstr "Primeira / última foto"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1542
|
||||
#: crates/pdfs-gui/src/app/main.rs:1394
|
||||
msgid "Show details"
|
||||
msgstr "Mostrar detalhes"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1543
|
||||
#: crates/pdfs-gui/src/app/main.rs:1395
|
||||
msgid "Fullscreen"
|
||||
msgstr "Tela cheia"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1545
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1635
|
||||
#: crates/pdfs-gui/src/app/main.rs:1487
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr "Selecione um único item para renomeá-lo"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1795
|
||||
#: crates/pdfs-gui/src/app/main.rs:1647
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:85
|
||||
#: crates/pdfs-gui/src/app/pages/places.rs:104
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1366
|
||||
msgid "Not connected"
|
||||
msgstr "Não conectado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1796
|
||||
#: crates/pdfs-gui/src/app/main.rs:1648
|
||||
msgid "The Proton Drive service isn't running."
|
||||
msgstr "O serviço do Proton Drive não está em execução."
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1804
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336 crates/pdfs-gui/src/main.rs:444
|
||||
#: crates/pdfs-gui/src/prompt.rs:616 crates/pdfs-gui/src/prompt.rs:867
|
||||
#: crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:336
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:589
|
||||
#: crates/pdfs-gui/src/main.rs:444
|
||||
msgid "Connecting…"
|
||||
msgstr "Conectando…"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1805
|
||||
#: crates/pdfs-gui/src/app/main.rs:1657
|
||||
msgid "Waiting for the Proton Drive service to start."
|
||||
msgstr "Aguardando o serviço do Proton Drive iniciar."
|
||||
|
||||
@@ -475,7 +476,7 @@ msgstr "Nada no registro recente corresponde a este filtro."
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:465
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:183
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:94
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/prompt.rs:595
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:53 crates/pdfs-gui/src/hud/mod.rs:245
|
||||
msgid "Retry"
|
||||
msgstr "Tentar novamente"
|
||||
|
||||
@@ -1234,6 +1235,7 @@ msgstr "O serviço do Proton Drive não respondeu."
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:474
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:395
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:265
|
||||
msgctxt "verb"
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
@@ -1424,6 +1426,7 @@ msgstr "Nome"
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:273
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:153
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:88
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:133
|
||||
msgctxt "column"
|
||||
msgid "Size"
|
||||
msgstr "Tamanho"
|
||||
@@ -1598,6 +1601,7 @@ msgstr[1] "{n} arquivos agora estão somente online"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:803
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:175
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:93
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:134
|
||||
msgctxt "column"
|
||||
msgid "Modified"
|
||||
msgstr "Modificado"
|
||||
@@ -1606,6 +1610,7 @@ msgstr "Modificado"
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:154
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:192
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:98
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:135
|
||||
msgid "Location"
|
||||
msgstr "Local"
|
||||
|
||||
@@ -1624,6 +1629,7 @@ msgstr "Reproduzir"
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:916
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:311
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:111
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:296
|
||||
msgid "Available offline"
|
||||
msgstr "Disponível offline"
|
||||
|
||||
@@ -2043,7 +2049,6 @@ msgstr "Baixar o Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:391
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:397
|
||||
#: crates/pdfs-gui/src/prompt.rs:568
|
||||
msgid "This computer"
|
||||
msgstr "Este computador"
|
||||
|
||||
@@ -2531,7 +2536,7 @@ msgid "About Sync Modes"
|
||||
msgstr "Sobre os modos de sincronização"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:178
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
#: crates/pdfs-gui/src/prompt.rs:65
|
||||
msgid "Folders"
|
||||
msgstr "Pastas"
|
||||
|
||||
@@ -3401,7 +3406,7 @@ msgid "Select Photo to Upload"
|
||||
msgstr "Selecione a foto a enviar"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1350
|
||||
#: crates/pdfs-gui/src/prompt.rs:62
|
||||
#: crates/pdfs-gui/src/prompt.rs:67
|
||||
msgid "Images"
|
||||
msgstr "Imagens"
|
||||
|
||||
@@ -4563,7 +4568,7 @@ msgid "Up to date"
|
||||
msgstr "Atualizado"
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1367
|
||||
#: crates/pdfs-gui/src/prompt.rs:880 crates/pdfs-gui/src/prompt.rs:893
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:602 crates/pdfs-gui/src/hud/mod.rs:616
|
||||
msgid "Proton Drive isn't running"
|
||||
msgstr "O Proton Drive não está em execução"
|
||||
|
||||
@@ -5106,6 +5111,7 @@ msgid "Proton Drive"
|
||||
msgstr "Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:393
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:263
|
||||
msgid "Open folder"
|
||||
msgstr "Abrir pasta"
|
||||
|
||||
@@ -5488,6 +5494,137 @@ msgstr "(nenhum arquivo fixado — digite para pesquisar)"
|
||||
msgid "(cannot resolve app dirs)"
|
||||
msgstr "(não foi possível resolver os diretórios do aplicativo)"
|
||||
|
||||
#. Translators: the launcher's section of recently opened files.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:57
|
||||
msgid "Recent"
|
||||
msgstr "Recentes"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:58
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Fixado no Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:59
|
||||
msgid "Best matches"
|
||||
msgstr "Melhores correspondências"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:159
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Pesquisar no Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:180
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Pesquisar no Drive e neste computador"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:191
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:232 crates/pdfs-gui/src/hud/mod.rs:862
|
||||
msgid "No results"
|
||||
msgstr "Nenhum resultado"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:240
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "O Proton Drive não está em execução"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:241
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Inicie o Proton Drive para pesquisar seus arquivos."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:282
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navegar · ↵ abrir · Tab filtrar"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:864
|
||||
msgid "Search your Drive"
|
||||
msgstr "Pesquisar no seu Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:869
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Ainda indexando este computador — os resultados locais aparecerão em breve."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:871
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Tente uma pesquisa diferente ou outro filtro."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:873
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Comece a digitar para pesquisar no Proton Drive e nos arquivos deste "
|
||||
"computador."
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:900
|
||||
msgid "No pinned files"
|
||||
msgstr "Nenhum arquivo fixado"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:901
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} arquivo fixado"
|
||||
msgstr[1] "{n} arquivos fixados"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:914
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} no Drive · {local} neste computador · indexando…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:919
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} no Drive · {local} neste computador"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1050
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Abrindo {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1090
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Não foi possível abrir: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/mod.rs:1094
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Não foi possível acessar o Proton Drive"
|
||||
|
||||
#. Translators: a heading in the launcher's preview pane, followed by
|
||||
#. "Available offline", "Downloaded", "Online only" or "On this computer".
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:138
|
||||
msgid "Availability"
|
||||
msgstr "Disponibilidade"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:157
|
||||
msgid "Show in Folder"
|
||||
msgstr "Mostrar na pasta"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:160
|
||||
msgid "Copy Path"
|
||||
msgstr "Copiar caminho"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:166
|
||||
msgid "Path copied"
|
||||
msgstr "Caminho copiado"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:291
|
||||
msgid "On this computer"
|
||||
msgstr "Neste computador"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:303
|
||||
msgctxt "file state"
|
||||
msgid "Downloaded"
|
||||
msgstr "Baixado"
|
||||
|
||||
#: crates/pdfs-gui/src/hud/preview.rs:308
|
||||
msgctxt "file state"
|
||||
msgid "Online only"
|
||||
msgstr "Somente online"
|
||||
|
||||
#: crates/pdfs-gui/src/i18n.rs:84
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
@@ -5641,16 +5778,16 @@ msgid "Quit"
|
||||
msgstr "Sair"
|
||||
|
||||
#. Translators: a filter chip that shows every kind of result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:59
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
msgid "All"
|
||||
msgstr "Tudo"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:61
|
||||
#: crates/pdfs-gui/src/prompt.rs:66
|
||||
msgid "Documents"
|
||||
msgstr "Documentos"
|
||||
|
||||
#. Translators: a filter chip for audio and video files.
|
||||
#: crates/pdfs-gui/src/prompt.rs:64
|
||||
#: crates/pdfs-gui/src/prompt.rs:69
|
||||
msgid "Media"
|
||||
msgstr "Mídia"
|
||||
|
||||
@@ -5659,143 +5796,49 @@ msgstr "Mídia"
|
||||
msgid "My files / {path}"
|
||||
msgstr "Meus arquivos / {path}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:520
|
||||
msgid "Search Proton Drive"
|
||||
msgstr "Pesquisar no Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:541
|
||||
msgid "Search in Drive and on this computer"
|
||||
msgstr "Pesquisar no Drive e neste computador"
|
||||
|
||||
#. Translators: the Escape key, shown as a hint that it closes the window.
|
||||
#: crates/pdfs-gui/src/prompt.rs:552
|
||||
msgid "Esc"
|
||||
msgstr "Esc"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:566 crates/pdfs-gui/src/prompt.rs:1085
|
||||
msgid "Best matches"
|
||||
msgstr "Melhores correspondências"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:582 crates/pdfs-gui/src/prompt.rs:1109
|
||||
msgid "No results"
|
||||
msgstr "Nenhum resultado"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:590
|
||||
msgid "Proton Drive is not running"
|
||||
msgstr "O Proton Drive não está em execução"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:591
|
||||
msgid "Start Proton Drive to search your files."
|
||||
msgstr "Inicie o Proton Drive para pesquisar seus arquivos."
|
||||
|
||||
#. Translators: keyboard hints in the footer; keep the arrow and Enter symbols.
|
||||
#: crates/pdfs-gui/src/prompt.rs:624
|
||||
msgid "↑↓ navigate · ↵ open · Tab filter"
|
||||
msgstr "↑↓ navegar · ↵ abrir · Tab filtrar"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1096
|
||||
msgid "Pinned in Proton Drive"
|
||||
msgstr "Fixado no Proton Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1111
|
||||
msgid "Search your Drive"
|
||||
msgstr "Pesquisar no seu Drive"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1116
|
||||
msgid "Still indexing this computer — local results will fill in shortly."
|
||||
msgstr ""
|
||||
"Ainda indexando este computador — os resultados locais aparecerão em breve."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1118
|
||||
msgid "Try a different search, or another filter."
|
||||
msgstr "Tente uma pesquisa diferente ou outro filtro."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1120
|
||||
msgid "Start typing to search Proton Drive and the files on this computer."
|
||||
msgstr ""
|
||||
"Comece a digitar para pesquisar no Proton Drive e nos arquivos deste "
|
||||
"computador."
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1146
|
||||
msgid "No pinned files"
|
||||
msgstr "Nenhum arquivo fixado"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1147
|
||||
#, rust-format
|
||||
msgid "{n} pinned file"
|
||||
msgid_plural "{n} pinned files"
|
||||
msgstr[0] "{n} arquivo fixado"
|
||||
msgstr[1] "{n} arquivos fixados"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1156
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer · indexing…"
|
||||
msgstr "{drive} no Drive · {local} neste computador · indexando…"
|
||||
|
||||
#. Translators: result counts in the footer; {drive} and {local} are numbers.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1161
|
||||
#, rust-format
|
||||
msgid "{drive} in Drive · {local} on this computer"
|
||||
msgstr "{drive} no Drive · {local} neste computador"
|
||||
|
||||
#. Translators: {name} is a file name.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1294
|
||||
#, rust-format
|
||||
msgid "Opening {name}…"
|
||||
msgstr "Abrindo {name}…"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1317
|
||||
#, rust-format
|
||||
msgid "Could not open: {message}"
|
||||
msgstr "Não foi possível abrir: {message}"
|
||||
|
||||
#: crates/pdfs-gui/src/prompt.rs:1321
|
||||
msgid "Couldn't reach Proton Drive"
|
||||
msgstr "Não foi possível acessar o Proton Drive"
|
||||
|
||||
#. Translators: the user's home folder, as the location of a result.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1430
|
||||
#: crates/pdfs-gui/src/prompt.rs:455
|
||||
msgid "Home"
|
||||
msgstr "Pasta pessoal"
|
||||
|
||||
#. Translators: {path} is a folder path inside the home folder, folder names separated by " / ".
|
||||
#: crates/pdfs-gui/src/prompt.rs:1432
|
||||
#: crates/pdfs-gui/src/prompt.rs:457
|
||||
#, rust-format
|
||||
msgid "Home / {path}"
|
||||
msgstr "Pasta pessoal / {path}"
|
||||
|
||||
#. Translators: the age of a file modified under a minute ago.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1452
|
||||
#: crates/pdfs-gui/src/prompt.rs:477
|
||||
msgctxt "age"
|
||||
msgid "now"
|
||||
msgstr "agora"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of minutes.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1454
|
||||
#: crates/pdfs-gui/src/prompt.rs:479
|
||||
#, rust-format
|
||||
msgid "{count}m"
|
||||
msgstr "{count} min"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of hours.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1456
|
||||
#: crates/pdfs-gui/src/prompt.rs:481
|
||||
#, rust-format
|
||||
msgid "{count}h"
|
||||
msgstr "{count} h"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of days.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1458
|
||||
#: crates/pdfs-gui/src/prompt.rs:483
|
||||
#, rust-format
|
||||
msgid "{count}d"
|
||||
msgstr "{count} d"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of months.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1460
|
||||
#: crates/pdfs-gui/src/prompt.rs:485
|
||||
#, rust-format
|
||||
msgid "{count}mo"
|
||||
msgstr "{count} m"
|
||||
|
||||
#. Translators: a compact file age; {count} is a number of years.
|
||||
#: crates/pdfs-gui/src/prompt.rs:1462
|
||||
#: crates/pdfs-gui/src/prompt.rs:487
|
||||
#, rust-format
|
||||
msgid "{count}y"
|
||||
msgstr "{count} a"
|
||||
@@ -5944,9 +5987,6 @@ msgstr "não foi possível acessar o daemon do Proton Drive: {error}"
|
||||
#~ msgid "Use this computer's identity"
|
||||
#~ msgstr "Usar a identidade deste computador"
|
||||
|
||||
#~ msgid "On this computer"
|
||||
#~ msgstr "Neste computador"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Where Proton Drive lives on this machine. Synced folders keep a full copy "
|
||||
#~ "on this disk; on-demand folders keep the files in Proton Drive only and "
|
||||
|
||||
Reference in new issue
Block a user