mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
feat(gui): one Filters popover for the photos timeline
Favorites, "not in an album" and the month move from separate pills and a dropdown into a Filters popover next to the kind tabs. The kind tabs stay in the row because their counts are worth a glance. The button carries a badge with the number of active filters, kind included, and the popover has a "Clear filters" action that resets everything in one reload. Flipping a filter while a page was still loading used to drop the reload, leaving the timeline answering the old filter. The request is now queued and the stale page is discarded.
This commit is contained in:
1 parent
2f14c1688f
commit
2757977fd6
14 files changed
+1910
-1676
No files matched your search
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<!-- "Filters": a funnel, wide at the top and narrowing to a short spout.
|
||||
No stock icon theme ships one under a standard name. -->
|
||||
<path fill="#222222" d="M 1.5,2 H 14.5 L 9.5,8.5 V 13.5 L 6.5,15 V 8.5 Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 309 B |
@@ -7,6 +7,7 @@
|
||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-build-thumbnails-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-folder-upload-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-upload-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-filter-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-offline-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-online-only-symbolic.svg</file>
|
||||
<!-- The app icon, from the one file packaging installs, so the in-app brand
|
||||
|
||||
@@ -86,3 +86,6 @@ progressbar.browser-status-meter trough, progressbar.browser-status-meter progre
|
||||
|
||||
/* Shared with Me: what a share lets me do, as a tinted pill beside the name. */
|
||||
.role-pill { padding: 2px 10px; border-radius: 999px; font-weight: 600; color: var(--accent-color); background-color: color-mix(in srgb, var(--accent-bg-color) 16%, transparent); }
|
||||
|
||||
/* Photos: how many timeline filters are on, as a small badge on the Filters button. */
|
||||
.filter-count { min-width: 18px; padding: 0 5px; border-radius: 999px; font-size: 0.8em; font-weight: 700; color: var(--accent-fg-color); background-color: var(--accent-bg-color); }
|
||||
@@ -560,16 +560,20 @@ fn build_window(app: &adw::Application) {
|
||||
tabs: gallery_widgets.tabs.clone(),
|
||||
counts: Cell::new(None),
|
||||
dates: gallery_widgets.dates.clone(),
|
||||
filter_btn: gallery_widgets.filter_btn.clone(),
|
||||
filter_count: gallery_widgets.filter_count.clone(),
|
||||
clear_filters: gallery_widgets.clear_filters.clone(),
|
||||
date_ranges: RefCell::new(vec![None]),
|
||||
range: Cell::new(None),
|
||||
favorites_btn: gallery_widgets.favorites_btn.clone(),
|
||||
favorites_row: gallery_widgets.favorites_row.clone(),
|
||||
favorites: Cell::new(false),
|
||||
not_in_album_btn: gallery_widgets.not_in_album_btn.clone(),
|
||||
not_in_album_row: gallery_widgets.not_in_album_row.clone(),
|
||||
not_in_album: Cell::new(false),
|
||||
memories: gallery_widgets.memories.clone(),
|
||||
memory_cards: gallery_widgets.memory_cards.clone(),
|
||||
has_memories: Cell::new(false),
|
||||
date_suppress: Cell::new(false),
|
||||
reload_pending: Cell::new(false),
|
||||
loading: Cell::new(false),
|
||||
has_more: Cell::new(false),
|
||||
page_waiters: RefCell::new(Vec::new()),
|
||||
|
||||
@@ -87,21 +87,27 @@ pub(crate) struct GalleryState {
|
||||
/// carried them, so the subtitle can say how big the library *is* rather
|
||||
/// than how much of it has been paged in.
|
||||
pub(crate) counts: Cell<Option<(usize, usize, usize)>>,
|
||||
/// The date-jump dropdown ("All dates" then a month per timeline entry), and
|
||||
/// the `[from, to)` window each of its rows selects (index-aligned; `None` is
|
||||
/// "All dates"). Selecting a row loads that month via [`load_gallery`].
|
||||
pub(crate) dates: gtk4::DropDown,
|
||||
/// The Filters button, the count badge on it, and the popover's "Clear
|
||||
/// filters" button.
|
||||
pub(crate) filter_btn: gtk4::MenuButton,
|
||||
pub(crate) filter_count: gtk4::Label,
|
||||
pub(crate) clear_filters: gtk4::Button,
|
||||
/// The month row of the Filters popover ("All dates" then a month per
|
||||
/// timeline entry), and the `[from, to)` window each of its rows selects
|
||||
/// (index-aligned; `None` is "All dates"). Selecting a row loads that month
|
||||
/// via [`load_gallery`].
|
||||
pub(crate) dates: adw::ComboRow,
|
||||
pub(crate) date_ranges: RefCell<Vec<Option<(i64, i64)>>>,
|
||||
/// The capture-time window the timeline is currently filtered to, or `None`
|
||||
/// for the whole span. Read by [`load_gallery`], set by the date dropdown.
|
||||
pub(crate) range: Cell<Option<(i64, i64)>>,
|
||||
/// The favorites toggle, and whether it is on. When on, the timeline is
|
||||
/// The favorites switch, and whether it is on. When on, the timeline is
|
||||
/// restricted to photos carrying Proton's `Favorite` tag.
|
||||
pub(crate) favorites_btn: gtk4::ToggleButton,
|
||||
pub(crate) favorites_row: adw::SwitchRow,
|
||||
pub(crate) favorites: Cell<bool>,
|
||||
/// The album filter toggle, and whether it is on. When on, the timeline is
|
||||
/// The album filter switch, and whether it is on. When on, the timeline is
|
||||
/// restricted to photos no album of ours holds yet.
|
||||
pub(crate) not_in_album_btn: gtk4::ToggleButton,
|
||||
pub(crate) not_in_album_row: adw::SwitchRow,
|
||||
pub(crate) not_in_album: Cell<bool>,
|
||||
/// The "On this day" strip above the timeline, the box holding its cards,
|
||||
/// and whether there is anything to show in it.
|
||||
@@ -111,6 +117,8 @@ pub(crate) struct GalleryState {
|
||||
/// Set while the date dropdown is being repopulated, so resetting its model
|
||||
/// doesn't fire the selection handler and kick off a spurious reload.
|
||||
pub(crate) date_suppress: Cell<bool>,
|
||||
/// A fresh load was asked for while a page was still loading.
|
||||
pub(crate) reload_pending: Cell<bool>,
|
||||
/// True while a timeline page is in flight, so the scroll-to-the-end paging
|
||||
/// can't fire a second request for the page already coming.
|
||||
pub(crate) loading: Cell<bool>,
|
||||
@@ -383,13 +391,16 @@ pub(crate) struct GalleryWidgets {
|
||||
/// The All / Photos / Videos / Raw filter toggles, in that order (index maps
|
||||
/// to [`kind_for_tab`]).
|
||||
pub(crate) tabs: [gtk4::ToggleButton; 4],
|
||||
pub(crate) favorites_btn: gtk4::ToggleButton,
|
||||
pub(crate) not_in_album_btn: gtk4::ToggleButton,
|
||||
pub(crate) favorites_row: adw::SwitchRow,
|
||||
pub(crate) not_in_album_row: adw::SwitchRow,
|
||||
/// The "On this day" strip and the box its cards go into.
|
||||
pub(crate) memories: gtk4::Revealer,
|
||||
pub(crate) memory_cards: gtk4::Box,
|
||||
/// The date-jump dropdown, populated with the timeline's months.
|
||||
pub(crate) dates: gtk4::DropDown,
|
||||
/// The month row of the Filters popover, populated with the timeline's months.
|
||||
pub(crate) dates: adw::ComboRow,
|
||||
pub(crate) filter_btn: gtk4::MenuButton,
|
||||
pub(crate) filter_count: gtk4::Label,
|
||||
pub(crate) clear_filters: gtk4::Button,
|
||||
}
|
||||
|
||||
/// The Photos page: a [`gtk4::ListView`] of day sections, each a heading over
|
||||
@@ -598,40 +609,62 @@ pub(crate) fn build_gallery_page() -> (gtk4::Widget, GalleryWidgets) {
|
||||
tab_group.append(btn);
|
||||
}
|
||||
|
||||
// Favorites: a filter, not a tab — it cuts across Photos / Videos / Raw, so
|
||||
// it stays outside the segmented control rather than becoming a fifth option
|
||||
// that would silently drop the kind the user picked.
|
||||
let favorites_btn = gtk4::ToggleButton::builder()
|
||||
.icon_name("starred-symbolic")
|
||||
.tooltip_text(gettext("Show only favorites"))
|
||||
// Favorites, "not in an album" and the month: the filters that cut across
|
||||
// the kind tabs, together in one popover so the row stays short. The tabs
|
||||
// stay out in the open because their counts are worth a glance.
|
||||
let favorites_row = adw::SwitchRow::builder()
|
||||
.title(gettext("Only favorites"))
|
||||
.build();
|
||||
favorites_btn.add_css_class("pill");
|
||||
|
||||
// Not in an album: a filter like favorites, for filing what is left.
|
||||
let not_in_album_btn = gtk4::ToggleButton::builder()
|
||||
.icon_name("view-grid-symbolic")
|
||||
.tooltip_text(gettext("Show only photos not in an album"))
|
||||
let not_in_album_row = adw::SwitchRow::builder()
|
||||
.title(gettext("Only photos not in an album"))
|
||||
.build();
|
||||
not_in_album_btn.add_css_class("pill");
|
||||
// "All dates" plus a row per month, filled in once the timeline's months are
|
||||
// known (see [`refresh_photo_months`]).
|
||||
let dates = adw::ComboRow::builder()
|
||||
.title(gettext("Month"))
|
||||
.model(>k4::StringList::new(&[gettext("All dates").as_str()]))
|
||||
.build();
|
||||
let filter_list = gtk4::ListBox::new();
|
||||
filter_list.set_selection_mode(gtk4::SelectionMode::None);
|
||||
filter_list.add_css_class("boxed-list");
|
||||
filter_list.append(&favorites_row);
|
||||
filter_list.append(¬_in_album_row);
|
||||
filter_list.append(&dates);
|
||||
let clear_filters = gtk4::Button::builder()
|
||||
.label(gettext("Clear filters"))
|
||||
.halign(gtk4::Align::End)
|
||||
.sensitive(false)
|
||||
.build();
|
||||
clear_filters.add_css_class("flat");
|
||||
let filter_panel = gtk4::Box::new(gtk4::Orientation::Vertical, 12);
|
||||
filter_panel.set_width_request(340);
|
||||
filter_panel.append(&filter_list);
|
||||
filter_panel.append(&clear_filters);
|
||||
let filter_popover = gtk4::Popover::builder().child(&filter_panel).build();
|
||||
|
||||
// Date jump: "All dates" plus a row per month, filled in once the timeline's
|
||||
// months are known (see [`refresh_photo_months`]). Pushed to the far end of
|
||||
// the filter row, opposite the kind toggles.
|
||||
let dates = gtk4::DropDown::from_strings(&[gettext("All dates").as_str()]);
|
||||
dates.add_css_class("pill");
|
||||
dates.set_tooltip_text(Some(&gettext("Jump to a month")));
|
||||
// The Filters button, with a badge counting the active filters, kind
|
||||
// included, so a filtered timeline is never mistaken for the whole one.
|
||||
let filter_count = gtk4::Label::builder().visible(false).build();
|
||||
filter_count.add_css_class("filter-count");
|
||||
let filter_face = gtk4::Box::new(gtk4::Orientation::Horizontal, 6);
|
||||
filter_face.append(>k4::Image::from_icon_name("pdfs-filter-symbolic"));
|
||||
filter_face.append(>k4::Label::new(Some(&gettext("Filters"))));
|
||||
filter_face.append(&filter_count);
|
||||
let filter_btn = gtk4::MenuButton::builder()
|
||||
.child(&filter_face)
|
||||
.popover(&filter_popover)
|
||||
.build();
|
||||
filter_btn.add_css_class("pill");
|
||||
|
||||
// The kind toggles and the date jump travel together: they filter the
|
||||
// The kind toggles and the Filters button travel together: they filter the
|
||||
// timeline, and neither applies to the album grid or to an open album.
|
||||
let filters = gtk4::Box::new(gtk4::Orientation::Horizontal, 8);
|
||||
filters.set_hexpand(true);
|
||||
filters.append(&tab_group);
|
||||
filters.append(&favorites_btn);
|
||||
filters.append(¬_in_album_btn);
|
||||
let spacer = gtk4::Box::new(gtk4::Orientation::Horizontal, 0);
|
||||
spacer.set_hexpand(true);
|
||||
filters.append(&spacer);
|
||||
filters.append(&dates);
|
||||
filters.append(&filter_btn);
|
||||
|
||||
// The page's two views, as one segmented control under the title: the
|
||||
// timeline, and the albums. This is navigation, not a filter — which is why
|
||||
@@ -789,11 +822,14 @@ pub(crate) fn build_gallery_page() -> (gtk4::Widget, GalleryWidgets) {
|
||||
select_album,
|
||||
select_done,
|
||||
tabs,
|
||||
favorites_btn,
|
||||
not_in_album_btn,
|
||||
favorites_row,
|
||||
not_in_album_row,
|
||||
memories,
|
||||
memory_cards,
|
||||
dates,
|
||||
filter_btn,
|
||||
filter_count,
|
||||
clear_filters,
|
||||
albums,
|
||||
albums_stack,
|
||||
albums_status,
|
||||
@@ -837,6 +873,34 @@ pub(crate) fn month_label(year: i32, month: i32) -> String {
|
||||
.unwrap_or_else(|_| format!("{year}-{month:02}"))
|
||||
}
|
||||
|
||||
/// How many timeline filters are on: the kind, favorites, "not in an album"
|
||||
/// and the month each count once.
|
||||
pub(crate) fn active_filters(
|
||||
kind: Option<PhotoKind>,
|
||||
favorites: bool,
|
||||
not_in_album: bool,
|
||||
range: Option<(i64, i64)>,
|
||||
) -> usize {
|
||||
[kind.is_some(), favorites, not_in_album, range.is_some()]
|
||||
.into_iter()
|
||||
.filter(|on| *on)
|
||||
.count()
|
||||
}
|
||||
|
||||
/// Show the active filter count on the Filters button, and offer "Clear
|
||||
/// filters" only when there is something to clear.
|
||||
fn sync_filter_badge(ui: &Rc<Ui>) {
|
||||
let n = active_filters(
|
||||
ui.gallery.kind.get(),
|
||||
ui.gallery.favorites.get(),
|
||||
ui.gallery.not_in_album.get(),
|
||||
ui.gallery.range.get(),
|
||||
);
|
||||
ui.gallery.filter_count.set_label(&n.to_string());
|
||||
ui.gallery.filter_count.set_visible(n > 0);
|
||||
ui.gallery.clear_filters.set_sensitive(n > 0);
|
||||
}
|
||||
|
||||
/// Rebuild the date-jump dropdown for the active kind: ask the daemon which
|
||||
/// months the timeline spans and turn them into "Month YYYY (count)" rows, each
|
||||
/// remembering the window it jumps to. Resets the selection to "All dates" — the
|
||||
@@ -1155,8 +1219,8 @@ pub(crate) fn wire_gallery(
|
||||
// Independent of the kind tabs and the date jump, both of which keep their
|
||||
// current value across the toggle.
|
||||
let ui_fav = ui.clone();
|
||||
ui.gallery.favorites_btn.connect_toggled(move |btn| {
|
||||
let on = btn.is_active();
|
||||
ui.gallery.favorites_row.connect_active_notify(move |row| {
|
||||
let on = row.is_active();
|
||||
if ui_fav.gallery.favorites.get() == on {
|
||||
return;
|
||||
}
|
||||
@@ -1166,13 +1230,34 @@ pub(crate) fn wire_gallery(
|
||||
|
||||
// Not in an album: the same kind of filter, and just as independent.
|
||||
let ui_unfiled = ui.clone();
|
||||
ui.gallery.not_in_album_btn.connect_toggled(move |btn| {
|
||||
let on = btn.is_active();
|
||||
if ui_unfiled.gallery.not_in_album.get() == on {
|
||||
return;
|
||||
}
|
||||
ui_unfiled.gallery.not_in_album.set(on);
|
||||
load_gallery(&ui_unfiled, false);
|
||||
ui.gallery
|
||||
.not_in_album_row
|
||||
.connect_active_notify(move |row| {
|
||||
let on = row.is_active();
|
||||
if ui_unfiled.gallery.not_in_album.get() == on {
|
||||
return;
|
||||
}
|
||||
ui_unfiled.gallery.not_in_album.set(on);
|
||||
load_gallery(&ui_unfiled, false);
|
||||
});
|
||||
|
||||
// Clear filters: back to the whole timeline in one reload. The state goes
|
||||
// first, so each widget's handler finds nothing to change and stays quiet.
|
||||
let ui_clear = ui.clone();
|
||||
ui.gallery.clear_filters.connect_clicked(move |_| {
|
||||
let gallery = &ui_clear.gallery;
|
||||
gallery.kind.set(None);
|
||||
gallery.favorites.set(false);
|
||||
gallery.not_in_album.set(false);
|
||||
gallery.range.set(None);
|
||||
gallery.tabs[0].set_active(true);
|
||||
gallery.favorites_row.set_active(false);
|
||||
gallery.not_in_album_row.set_active(false);
|
||||
gallery.date_suppress.set(true);
|
||||
gallery.dates.set_selected(0);
|
||||
gallery.date_suppress.set(false);
|
||||
gallery.filter_btn.popdown();
|
||||
load_gallery(&ui_clear, false);
|
||||
});
|
||||
|
||||
// Date jump: selecting a month loads that window; "All dates" (row 0) clears
|
||||
@@ -3070,7 +3155,13 @@ fn set_photo_favorite(ui: &Rc<Ui>, uid: String, favorite: bool) {
|
||||
}
|
||||
|
||||
pub(crate) fn load_gallery(ui: &Rc<Ui>, append: bool) {
|
||||
sync_filter_badge(ui);
|
||||
if ui.gallery.loading.get() {
|
||||
// A filter flipped while a page is on its way: that page answers the
|
||||
// old question, so fetch again once it lands. More pages can wait.
|
||||
if !append {
|
||||
ui.gallery.reload_pending.set(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// An open album pages itself instead of the timeline; everything downstream —
|
||||
@@ -3129,6 +3220,10 @@ pub(crate) fn load_gallery(ui: &Rc<Ui>, append: bool) {
|
||||
ui.gallery.loading.set(false);
|
||||
ui.gallery.pager.set_visible(false);
|
||||
ui.gallery.pager.set_spinning(false);
|
||||
if ui.gallery.reload_pending.take() {
|
||||
load_gallery(&ui, false);
|
||||
return;
|
||||
}
|
||||
// Whoever waited on this page runs once the reply below has put it in
|
||||
// the model, whichever way that goes.
|
||||
let waiters = std::mem::take(&mut *ui.gallery.page_waiters.borrow_mut());
|
||||
@@ -3301,8 +3396,9 @@ pub(crate) fn play_external(path: &str) {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{
|
||||
Grouping, ROW_DEFAULT, ROW_MAX, ROW_MIN, ROW_STEP, TILE_GAP, empty_timeline_text,
|
||||
grouping_for, memory_years, month_index, month_range, plan_grid, section_heading,
|
||||
Grouping, ROW_DEFAULT, ROW_MAX, ROW_MIN, ROW_STEP, TILE_GAP, active_filters,
|
||||
empty_timeline_text, grouping_for, memory_years, month_index, month_range, plan_grid,
|
||||
section_heading,
|
||||
};
|
||||
use pdfs_core::control::{PhotoItem, PhotoKind, PhotoMonth};
|
||||
|
||||
@@ -3376,6 +3472,16 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn the_filter_badge_counts_each_active_filter_once() {
|
||||
assert_eq!(active_filters(None, false, false, None), 0);
|
||||
assert_eq!(active_filters(Some(PhotoKind::Raw), false, false, None), 1);
|
||||
assert_eq!(
|
||||
active_filters(Some(PhotoKind::Video), true, true, Some((0, 1))),
|
||||
4
|
||||
);
|
||||
}
|
||||
|
||||
/// The strip shows the nearest year first, with each year's newest photo
|
||||
/// as its cover, and never this year's own photos.
|
||||
#[test]
|
||||
|
||||
+194
-181
File diff suppressed because it is too large.
Load diff
+189
-178
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: proton-drive-linux 2.2.2\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||
"POT-Creation-Date: 2026-09-28 00:50+0200\n"
|
||||
"POT-Creation-Date: 2026-09-28 01:00+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"
|
||||
@@ -18,99 +18,99 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:840
|
||||
#: crates/pdfs-gui/src/app/main.rs:844
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1133
|
||||
#: crates/pdfs-gui/src/prompt.rs:169
|
||||
msgid "My files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:843 crates/pdfs-gui/src/app/main.rs:1456
|
||||
#: crates/pdfs-gui/src/app/main.rs:847 crates/pdfs-gui/src/app/main.rs:1460
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:633
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:756
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:789
|
||||
msgid "Photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:848
|
||||
#: crates/pdfs-gui/src/app/main.rs:852
|
||||
msgid "Shared with me"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:853
|
||||
#: crates/pdfs-gui/src/app/main.rs:857
|
||||
msgid "Shared by me"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:856
|
||||
#: crates/pdfs-gui/src/app/main.rs:860
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:109
|
||||
msgid "Computers"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:857
|
||||
#: crates/pdfs-gui/src/app/main.rs:861
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:106
|
||||
msgid "Trash"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:861
|
||||
#: crates/pdfs-gui/src/app/main.rs:865
|
||||
msgid "Sync"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:866
|
||||
#: crates/pdfs-gui/src/app/main.rs:870
|
||||
#: crates/pdfs-gui/src/app/pages/activity.rs:153
|
||||
msgid "Activity"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1012
|
||||
#: crates/pdfs-gui/src/app/main.rs:1016
|
||||
msgid "Refresh (F5)"
|
||||
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:1186
|
||||
#: crates/pdfs-gui/src/app/main.rs:1190
|
||||
#, rust-format
|
||||
msgid "{what}: {detail}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1205
|
||||
#: crates/pdfs-gui/src/app/main.rs:1209
|
||||
msgid "You're offline"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
||||
#: crates/pdfs-gui/src/app/main.rs:1210
|
||||
msgid "That's not there any more"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1207
|
||||
#: crates/pdfs-gui/src/app/main.rs:1211
|
||||
msgid "You don't have access to that"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1208
|
||||
#: crates/pdfs-gui/src/app/main.rs:1212
|
||||
msgid "Something changed this first"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1209
|
||||
#: crates/pdfs-gui/src/app/main.rs:1213
|
||||
msgid "Your Proton Drive is full"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1250 crates/pdfs-gui/src/app/main.rs:1438
|
||||
#: crates/pdfs-gui/src/app/main.rs:1254 crates/pdfs-gui/src/app/main.rs:1442
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:353
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1251 crates/pdfs-gui/src/app/main.rs:1495
|
||||
#: crates/pdfs-gui/src/app/main.rs:1255 crates/pdfs-gui/src/app/main.rs:1499
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
||||
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||
msgid "About Proton Drive for Linux"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1258
|
||||
#: crates/pdfs-gui/src/app/main.rs:1262
|
||||
msgid "Main menu"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1304
|
||||
#: crates/pdfs-gui/src/app/main.rs:1308
|
||||
msgid "Proton Drive for Linux"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1312
|
||||
#: crates/pdfs-gui/src/app/main.rs:1316
|
||||
msgid ""
|
||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||
"\n"
|
||||
@@ -118,23 +118,23 @@ msgid ""
|
||||
"AG."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1317
|
||||
#: crates/pdfs-gui/src/app/main.rs:1321
|
||||
msgid "Source Code"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1321
|
||||
#: crates/pdfs-gui/src/app/main.rs:1325
|
||||
msgid "Proton Terms of Service"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1325
|
||||
#: crates/pdfs-gui/src/app/main.rs:1329
|
||||
msgid "Proton Privacy Policy"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1330
|
||||
#: crates/pdfs-gui/src/app/main.rs:1334
|
||||
msgid "Disclaimer"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1334
|
||||
#: crates/pdfs-gui/src/app/main.rs:1338
|
||||
msgid ""
|
||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||
"endorsed by, or supported by Proton AG.\n"
|
||||
@@ -149,21 +149,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:1345
|
||||
#: crates/pdfs-gui/src/app/main.rs:1349
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
||||
msgid "Stop Proton Drive?"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
||||
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||
msgid ""
|
||||
"The drive unmounts and nothing syncs until you connect again. Proton Drive "
|
||||
"starts again at your next login."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1379 crates/pdfs-gui/src/app/main.rs:1652
|
||||
#: crates/pdfs-gui/src/app/main.rs:1383 crates/pdfs-gui/src/app/main.rs:1656
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:242
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:423
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2273
|
||||
@@ -177,7 +177,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:670
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1050
|
||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1854
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1939
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:717
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:748
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:789
|
||||
@@ -191,67 +191,67 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
||||
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||
msgctxt "verb"
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
||||
#: crates/pdfs-gui/src/app/main.rs:1401
|
||||
msgid "Couldn't stop Proton Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1398
|
||||
#: crates/pdfs-gui/src/app/main.rs:1402
|
||||
msgid "The mount service did not stop."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1434
|
||||
#: crates/pdfs-gui/src/app/main.rs:1438
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:226
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1436
|
||||
#: crates/pdfs-gui/src/app/main.rs:1440
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:270
|
||||
msgid "Search Drive"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1437
|
||||
#: crates/pdfs-gui/src/app/main.rs:1441
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1363
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1439
|
||||
#: crates/pdfs-gui/src/app/main.rs:1443
|
||||
msgid "Keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1443
|
||||
#: crates/pdfs-gui/src/app/main.rs:1447
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1445
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:319
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2586
|
||||
msgid "New folder"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1446
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:315
|
||||
msgid "Upload files"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1447
|
||||
#: crates/pdfs-gui/src/app/main.rs:1451
|
||||
msgid "Back / forward"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1448
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2320
|
||||
msgid "Parent folder"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
||||
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||
msgid "Grid / list"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1450
|
||||
#: crates/pdfs-gui/src/app/main.rs:1454
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:297
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2252
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2274
|
||||
@@ -260,63 +260,63 @@ msgstr ""
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1451 crates/pdfs-gui/src/app/main.rs:1471
|
||||
#: crates/pdfs-gui/src/app/main.rs:1455 crates/pdfs-gui/src/app/main.rs:1475
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:414
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1306
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1338
|
||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:24
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:550
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1851
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1855
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:561
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1936
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1940
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:162
|
||||
msgid "Move to Trash"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1452
|
||||
#: crates/pdfs-gui/src/app/main.rs:1456
|
||||
msgid "Clear the selection"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1458
|
||||
#: crates/pdfs-gui/src/app/main.rs:1462
|
||||
msgid "Larger thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1459
|
||||
#: crates/pdfs-gui/src/app/main.rs:1463
|
||||
msgid "Smaller thumbnails"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1460
|
||||
#: crates/pdfs-gui/src/app/main.rs:1464
|
||||
msgid "Reset thumbnail size"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1461
|
||||
#: crates/pdfs-gui/src/app/main.rs:1465
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1465
|
||||
#: crates/pdfs-gui/src/app/main.rs:1469
|
||||
msgid "Photo Viewer"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1467
|
||||
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||
msgid "Previous / next photo"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1468
|
||||
#: crates/pdfs-gui/src/app/main.rs:1472
|
||||
msgid "First / last photo"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1469
|
||||
#: crates/pdfs-gui/src/app/main.rs:1473
|
||||
msgid "Show details"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
||||
#: crates/pdfs-gui/src/app/main.rs:1474
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1472
|
||||
#: crates/pdfs-gui/src/app/main.rs:1476
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/main.rs:1575
|
||||
#: crates/pdfs-gui/src/app/main.rs:1579
|
||||
msgid "Select a single item to rename it"
|
||||
msgstr ""
|
||||
|
||||
@@ -353,7 +353,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:306
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:84
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:134
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:418
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:429
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:83
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:38
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:57 crates/pdfs-gui/src/prompt.rs:593
|
||||
@@ -389,7 +389,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2880
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:3066
|
||||
#: crates/pdfs-gui/src/app/pages/photo_viewer.rs:310
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3235
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3330
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:139
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:320
|
||||
msgid "Unexpected reply from the mount service."
|
||||
@@ -401,7 +401,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2914
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:209
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:844
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3269
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3364
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:523
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:156
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:1301
|
||||
@@ -413,7 +413,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2915
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:210
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:845
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3270
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3365
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:524
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:157
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:336
|
||||
@@ -425,7 +425,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2924
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:218
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:853
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3278
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3373
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:532
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:165
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:305
|
||||
@@ -438,7 +438,7 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2925
|
||||
#: crates/pdfs-gui/src/app/pages/devices.rs:219
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:854
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3279
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3374
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:533
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:166
|
||||
#: crates/pdfs-gui/src/app/pages/trash.rs:345
|
||||
@@ -446,12 +446,12 @@ msgid "Waiting for the Proton Drive mount service to come up."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/activity.rs:419
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2522
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2607
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/activity.rs:422
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2527
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2612
|
||||
msgid "Yesterday"
|
||||
msgstr ""
|
||||
|
||||
@@ -504,7 +504,7 @@ msgstr ""
|
||||
#. Translators: strftime format for the time of day in the activity feed, such as "14:05".
|
||||
#. Translators: strftime format for the time a photo was taken, shown on its tile, such as "14:05".
|
||||
#: crates/pdfs-gui/src/app/pages/activity.rs:580
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2566
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2651
|
||||
msgid "%H:%M"
|
||||
msgstr ""
|
||||
|
||||
@@ -610,12 +610,12 @@ msgid "Reading your Proton Drive albums."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:59
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3148
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3243
|
||||
msgid "No photo library"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:60
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3149
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3244
|
||||
msgid "This Proton account doesn't have Photos enabled."
|
||||
msgstr ""
|
||||
|
||||
@@ -648,7 +648,7 @@ msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:205
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1246
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3002
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3087
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:384
|
||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:244
|
||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
||||
@@ -715,10 +715,10 @@ msgstr ""
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1090
|
||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1109
|
||||
#: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1424
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1284
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1939
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3066
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3241
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1369
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2024
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3151
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3336
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:510
|
||||
#: crates/pdfs-gui/src/app/pages/shared.rs:838
|
||||
#: crates/pdfs-gui/src/app/pages/status.rs:672
|
||||
@@ -782,7 +782,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/albums.rs:424
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:722
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:755
|
||||
msgid "New Album…"
|
||||
msgstr ""
|
||||
|
||||
@@ -973,7 +973,7 @@ msgstr ""
|
||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:638
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1331
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1787
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1872
|
||||
#, rust-format
|
||||
msgid "{n} selected"
|
||||
msgid_plural "{n} selected"
|
||||
@@ -982,8 +982,8 @@ msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:674
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:709
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1932
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1938
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2017
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2023
|
||||
msgid "Couldn't move to Trash"
|
||||
msgstr ""
|
||||
|
||||
@@ -1017,7 +1017,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:727
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1925
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2010
|
||||
msgid "Undo"
|
||||
msgstr ""
|
||||
|
||||
@@ -1074,7 +1074,7 @@ msgid "Open With…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1263
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3000
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3085
|
||||
msgctxt "verb"
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
@@ -1367,7 +1367,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2696
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:740
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:773
|
||||
msgctxt "verb"
|
||||
msgid "View"
|
||||
msgstr ""
|
||||
@@ -2505,177 +2505,188 @@ msgid "Hide details"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1429
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3061
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3065
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3146
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3150
|
||||
msgid "Couldn't change the favorite"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:428
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:508
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:439
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:519
|
||||
msgid "Upload photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:433
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:444
|
||||
#: crates/pdfs-gui/src/app/pages/takeout.rs:287
|
||||
msgid "Import from Google Photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:473
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:622
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:484
|
||||
msgid "Jump to a month"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:492
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:503
|
||||
msgid "Back to albums"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:504
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:515
|
||||
msgctxt "verb"
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:517
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:528
|
||||
msgid "Import a Google Photos Takeout export"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:527
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:538
|
||||
msgid "Find duplicates"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:536
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:545
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1785
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:547
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:556
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1870
|
||||
msgid "Select photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:556
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3018
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:567
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3103
|
||||
msgid "Add to Album…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:562
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:573
|
||||
msgid "Leave selection (Esc)"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:606
|
||||
msgid "Show only favorites"
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:616
|
||||
msgid "Only favorites"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:613
|
||||
msgid "Show only photos not in an album"
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:619
|
||||
msgid "Only photos not in an album"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:620
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:857
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:624
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:625
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:921
|
||||
msgid "All dates"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:641
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:634
|
||||
msgid "Clear filters"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:651
|
||||
msgid "Filters"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:674
|
||||
msgid "Timeline"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:645
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:678
|
||||
msgid "Albums"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:664
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:697
|
||||
msgid "On this day"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:739
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:772
|
||||
msgid "Importing from Google Photos…"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: strftime format for a month on its own, such as "June 2024". %OB is the month name in its standalone (nominative) form; use %B if your language has no separate form.
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:833
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:869
|
||||
msgid "%OB %Y"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a row of the date jump; {month} is a month such as "June 2024", {count} how many photos it holds.
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:864
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:928
|
||||
#, rust-format
|
||||
msgid "{month} ({count})"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a Photos filter tab that shows photos, videos and raw files together.
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:901
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:965
|
||||
msgctxt "photo filter"
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:902
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:966
|
||||
msgctxt "photo filter"
|
||||
msgid "Photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:903
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:967
|
||||
msgctxt "photo filter"
|
||||
msgid "Videos"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: a Photos filter tab for raw camera files.
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:905
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:969
|
||||
msgctxt "photo filter"
|
||||
msgid "Raw"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1210
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1295
|
||||
msgid "Select Photo to Upload"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1214
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1299
|
||||
#: crates/pdfs-gui/src/prompt.rs:60
|
||||
msgid "Images"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1270
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1355
|
||||
msgid "Photo uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1275
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1283
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1360
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1368
|
||||
msgid "Couldn't upload photo"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: badge on a photo tile whose shot includes a raw camera file.
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1444
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1529
|
||||
msgid "RAW"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1829
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1914
|
||||
msgid "Move this photo to Trash?"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1831
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1916
|
||||
#, rust-format
|
||||
msgid "Move this photo to Trash? It is stored as {n} file."
|
||||
msgid_plural "Move this photo to Trash? It is stored as {n} files."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1837
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1922
|
||||
#, rust-format
|
||||
msgid "Move {n} photo to Trash?"
|
||||
msgid_plural "Move {n} photos to Trash?"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1844
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1929
|
||||
#, rust-format
|
||||
msgid "Move {n} photo to Trash? They are stored as {files} files."
|
||||
msgid_plural "Move {n} photos to Trash? They are stored as {files} files."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1908
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1993
|
||||
msgid "The server refused."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1911
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1996
|
||||
msgid "Some photos couldn't be moved to Trash"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1920
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2005
|
||||
#, rust-format
|
||||
msgid "Moved {n} photo to Trash"
|
||||
msgid_plural "Moved {n} photos to Trash"
|
||||
@@ -2683,7 +2694,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#. Translators: the Photos page subtitle, such as "12 videos".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2476
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2561
|
||||
#, rust-format
|
||||
msgid "{count} video"
|
||||
msgid_plural "{count} videos"
|
||||
@@ -2691,7 +2702,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#. Translators: the Photos page subtitle, such as "12 raw photos".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2478
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2563
|
||||
#, rust-format
|
||||
msgid "{count} raw photo"
|
||||
msgid_plural "{count} raw photos"
|
||||
@@ -2699,138 +2710,138 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#. Translators: the Photos page subtitle, such as "1,204 photos".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2480
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2565
|
||||
#, rust-format
|
||||
msgid "{count} photo"
|
||||
msgid_plural "{count} photos"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2508
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2534
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2593
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2619
|
||||
msgid "Unknown date"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: strftime format for a day heading in the photo timeline, such as "3 June 2026".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2531
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2616
|
||||
msgid "%-d %B %Y"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: strftime format for a photo's capture date and time, such as "2026-06-03 14:05:09".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2552
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2637
|
||||
msgid "%Y-%m-%d %H:%M:%S"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2556
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2558
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2641
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2643
|
||||
msgid "Unknown Date"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: strftime format for the day a photo was taken, shown on its tile when the timeline is grouped by month or year, such as "3 Jun".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2576
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2661
|
||||
msgid "%-d %b"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2598
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2683
|
||||
msgid "Every photo is in an album"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2599
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2684
|
||||
msgid "Turn off the album filter to see everything."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2604
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2689
|
||||
msgid "No photos yet"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2605
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2690
|
||||
msgid "Photos you upload to Proton Drive appear here."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2608
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2693
|
||||
msgid "No favorites yet"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2609
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2694
|
||||
msgid "Star a photo in the viewer or from its menu to find it here."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {month} is a month and year, such as "June 2024".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2614
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2699
|
||||
#, rust-format
|
||||
msgid "No favorite videos in {month}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2615
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2700
|
||||
msgid "No favorite videos"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {month} is a month and year, such as "June 2024".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2617
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2702
|
||||
#, rust-format
|
||||
msgid "No favorite raw files in {month}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2618
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2703
|
||||
msgid "No favorite raw files"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {month} is a month and year, such as "June 2024".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2620
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2705
|
||||
#, rust-format
|
||||
msgid "No favorite photos in {month}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2621
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2706
|
||||
msgid "No favorite photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2623
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2708
|
||||
msgid "Turn off the favorites filter to see everything."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {month} is a month and year, such as "June 2024".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2628
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2713
|
||||
#, rust-format
|
||||
msgid "No videos in {month}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2629
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2714
|
||||
msgid "No videos"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {month} is a month and year, such as "June 2024".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2631
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2716
|
||||
#, rust-format
|
||||
msgid "No raw files in {month}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2632
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2717
|
||||
msgid "No raw files"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: {month} is a month and year, such as "June 2024".
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2634
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2719
|
||||
#, rust-format
|
||||
msgid "No photos in {month}"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2635
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2720
|
||||
msgid "No photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2637
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2722
|
||||
msgid "Try another filter or month."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2753
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2838
|
||||
#, rust-format
|
||||
msgid "{n} year ago"
|
||||
msgid_plural "{n} years ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2778
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2863
|
||||
#, rust-format
|
||||
msgid "{date}, {n} photo"
|
||||
msgid_plural "{date}, {n} photos"
|
||||
@@ -2838,55 +2849,55 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#. Translators: a check item in a photo's menu, on while the photo is a favorite.
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3007
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3092
|
||||
msgctxt "state"
|
||||
msgid "Favorite"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3012
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3097
|
||||
msgctxt "verb"
|
||||
msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3024
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3109
|
||||
msgid "Remove from Album"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3030
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3115
|
||||
msgid "Move to Trash…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3054
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3139
|
||||
msgid "Added to Favorites"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3056
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3141
|
||||
msgid "Removed from Favorites"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3085
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3176
|
||||
msgid "Loading photos…"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3086
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3177
|
||||
msgid "Reading your Proton Drive timeline."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3179
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3274
|
||||
msgid "Empty album"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3180
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3275
|
||||
msgid "This album has no photos in it."
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3222
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3240
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3317
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3335
|
||||
msgid "Couldn't load more photos"
|
||||
msgstr ""
|
||||
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3227
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3234
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3322
|
||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3329
|
||||
msgid "Couldn't load photos"
|
||||
msgstr ""
|
||||
|
||||
|
||||
+194
-181
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user