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-build-thumbnails-symbolic.svg</file>
|
||||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-folder-upload-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-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-offline-symbolic.svg</file>
|
||||||
<file preprocess="xml-stripblanks">scalable/actions/pdfs-online-only-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
|
<!-- 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. */
|
/* 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); }
|
.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(),
|
tabs: gallery_widgets.tabs.clone(),
|
||||||
counts: Cell::new(None),
|
counts: Cell::new(None),
|
||||||
dates: gallery_widgets.dates.clone(),
|
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]),
|
date_ranges: RefCell::new(vec![None]),
|
||||||
range: Cell::new(None),
|
range: Cell::new(None),
|
||||||
favorites_btn: gallery_widgets.favorites_btn.clone(),
|
favorites_row: gallery_widgets.favorites_row.clone(),
|
||||||
favorites: Cell::new(false),
|
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),
|
not_in_album: Cell::new(false),
|
||||||
memories: gallery_widgets.memories.clone(),
|
memories: gallery_widgets.memories.clone(),
|
||||||
memory_cards: gallery_widgets.memory_cards.clone(),
|
memory_cards: gallery_widgets.memory_cards.clone(),
|
||||||
has_memories: Cell::new(false),
|
has_memories: Cell::new(false),
|
||||||
date_suppress: Cell::new(false),
|
date_suppress: Cell::new(false),
|
||||||
|
reload_pending: Cell::new(false),
|
||||||
loading: Cell::new(false),
|
loading: Cell::new(false),
|
||||||
has_more: Cell::new(false),
|
has_more: Cell::new(false),
|
||||||
page_waiters: RefCell::new(Vec::new()),
|
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
|
/// carried them, so the subtitle can say how big the library *is* rather
|
||||||
/// than how much of it has been paged in.
|
/// than how much of it has been paged in.
|
||||||
pub(crate) counts: Cell<Option<(usize, usize, usize)>>,
|
pub(crate) counts: Cell<Option<(usize, usize, usize)>>,
|
||||||
/// The date-jump dropdown ("All dates" then a month per timeline entry), and
|
/// The Filters button, the count badge on it, and the popover's "Clear
|
||||||
/// the `[from, to)` window each of its rows selects (index-aligned; `None` is
|
/// filters" button.
|
||||||
/// "All dates"). Selecting a row loads that month via [`load_gallery`].
|
pub(crate) filter_btn: gtk4::MenuButton,
|
||||||
pub(crate) dates: gtk4::DropDown,
|
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)>>>,
|
pub(crate) date_ranges: RefCell<Vec<Option<(i64, i64)>>>,
|
||||||
/// The capture-time window the timeline is currently filtered to, or `None`
|
/// 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.
|
/// for the whole span. Read by [`load_gallery`], set by the date dropdown.
|
||||||
pub(crate) range: Cell<Option<(i64, i64)>>,
|
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.
|
/// 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>,
|
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.
|
/// 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>,
|
pub(crate) not_in_album: Cell<bool>,
|
||||||
/// The "On this day" strip above the timeline, the box holding its cards,
|
/// The "On this day" strip above the timeline, the box holding its cards,
|
||||||
/// and whether there is anything to show in it.
|
/// 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
|
/// Set while the date dropdown is being repopulated, so resetting its model
|
||||||
/// doesn't fire the selection handler and kick off a spurious reload.
|
/// doesn't fire the selection handler and kick off a spurious reload.
|
||||||
pub(crate) date_suppress: Cell<bool>,
|
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
|
/// 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.
|
/// can't fire a second request for the page already coming.
|
||||||
pub(crate) loading: Cell<bool>,
|
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
|
/// The All / Photos / Videos / Raw filter toggles, in that order (index maps
|
||||||
/// to [`kind_for_tab`]).
|
/// to [`kind_for_tab`]).
|
||||||
pub(crate) tabs: [gtk4::ToggleButton; 4],
|
pub(crate) tabs: [gtk4::ToggleButton; 4],
|
||||||
pub(crate) favorites_btn: gtk4::ToggleButton,
|
pub(crate) favorites_row: adw::SwitchRow,
|
||||||
pub(crate) not_in_album_btn: gtk4::ToggleButton,
|
pub(crate) not_in_album_row: adw::SwitchRow,
|
||||||
/// The "On this day" strip and the box its cards go into.
|
/// The "On this day" strip and the box its cards go into.
|
||||||
pub(crate) memories: gtk4::Revealer,
|
pub(crate) memories: gtk4::Revealer,
|
||||||
pub(crate) memory_cards: gtk4::Box,
|
pub(crate) memory_cards: gtk4::Box,
|
||||||
/// The date-jump dropdown, populated with the timeline's months.
|
/// The month row of the Filters popover, populated with the timeline's months.
|
||||||
pub(crate) dates: gtk4::DropDown,
|
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
|
/// 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);
|
tab_group.append(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Favorites: a filter, not a tab — it cuts across Photos / Videos / Raw, so
|
// Favorites, "not in an album" and the month: the filters that cut across
|
||||||
// it stays outside the segmented control rather than becoming a fifth option
|
// the kind tabs, together in one popover so the row stays short. The tabs
|
||||||
// that would silently drop the kind the user picked.
|
// stay out in the open because their counts are worth a glance.
|
||||||
let favorites_btn = gtk4::ToggleButton::builder()
|
let favorites_row = adw::SwitchRow::builder()
|
||||||
.icon_name("starred-symbolic")
|
.title(gettext("Only favorites"))
|
||||||
.tooltip_text(gettext("Show only favorites"))
|
|
||||||
.build();
|
.build();
|
||||||
favorites_btn.add_css_class("pill");
|
let not_in_album_row = adw::SwitchRow::builder()
|
||||||
|
.title(gettext("Only photos not in an album"))
|
||||||
// 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"))
|
|
||||||
.build();
|
.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
|
// The Filters button, with a badge counting the active filters, kind
|
||||||
// months are known (see [`refresh_photo_months`]). Pushed to the far end of
|
// included, so a filtered timeline is never mistaken for the whole one.
|
||||||
// the filter row, opposite the kind toggles.
|
let filter_count = gtk4::Label::builder().visible(false).build();
|
||||||
let dates = gtk4::DropDown::from_strings(&[gettext("All dates").as_str()]);
|
filter_count.add_css_class("filter-count");
|
||||||
dates.add_css_class("pill");
|
let filter_face = gtk4::Box::new(gtk4::Orientation::Horizontal, 6);
|
||||||
dates.set_tooltip_text(Some(&gettext("Jump to a month")));
|
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.
|
// timeline, and neither applies to the album grid or to an open album.
|
||||||
let filters = gtk4::Box::new(gtk4::Orientation::Horizontal, 8);
|
let filters = gtk4::Box::new(gtk4::Orientation::Horizontal, 8);
|
||||||
filters.set_hexpand(true);
|
filters.set_hexpand(true);
|
||||||
filters.append(&tab_group);
|
filters.append(&tab_group);
|
||||||
filters.append(&favorites_btn);
|
|
||||||
filters.append(¬_in_album_btn);
|
|
||||||
let spacer = gtk4::Box::new(gtk4::Orientation::Horizontal, 0);
|
let spacer = gtk4::Box::new(gtk4::Orientation::Horizontal, 0);
|
||||||
spacer.set_hexpand(true);
|
spacer.set_hexpand(true);
|
||||||
filters.append(&spacer);
|
filters.append(&spacer);
|
||||||
filters.append(&dates);
|
filters.append(&filter_btn);
|
||||||
|
|
||||||
// The page's two views, as one segmented control under the title: the
|
// 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
|
// 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_album,
|
||||||
select_done,
|
select_done,
|
||||||
tabs,
|
tabs,
|
||||||
favorites_btn,
|
favorites_row,
|
||||||
not_in_album_btn,
|
not_in_album_row,
|
||||||
memories,
|
memories,
|
||||||
memory_cards,
|
memory_cards,
|
||||||
dates,
|
dates,
|
||||||
|
filter_btn,
|
||||||
|
filter_count,
|
||||||
|
clear_filters,
|
||||||
albums,
|
albums,
|
||||||
albums_stack,
|
albums_stack,
|
||||||
albums_status,
|
albums_status,
|
||||||
@@ -837,6 +873,34 @@ pub(crate) fn month_label(year: i32, month: i32) -> String {
|
|||||||
.unwrap_or_else(|_| format!("{year}-{month:02}"))
|
.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
|
/// 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
|
/// 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
|
/// 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
|
// Independent of the kind tabs and the date jump, both of which keep their
|
||||||
// current value across the toggle.
|
// current value across the toggle.
|
||||||
let ui_fav = ui.clone();
|
let ui_fav = ui.clone();
|
||||||
ui.gallery.favorites_btn.connect_toggled(move |btn| {
|
ui.gallery.favorites_row.connect_active_notify(move |row| {
|
||||||
let on = btn.is_active();
|
let on = row.is_active();
|
||||||
if ui_fav.gallery.favorites.get() == on {
|
if ui_fav.gallery.favorites.get() == on {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1166,13 +1230,34 @@ pub(crate) fn wire_gallery(
|
|||||||
|
|
||||||
// Not in an album: the same kind of filter, and just as independent.
|
// Not in an album: the same kind of filter, and just as independent.
|
||||||
let ui_unfiled = ui.clone();
|
let ui_unfiled = ui.clone();
|
||||||
ui.gallery.not_in_album_btn.connect_toggled(move |btn| {
|
ui.gallery
|
||||||
let on = btn.is_active();
|
.not_in_album_row
|
||||||
if ui_unfiled.gallery.not_in_album.get() == on {
|
.connect_active_notify(move |row| {
|
||||||
return;
|
let on = row.is_active();
|
||||||
}
|
if ui_unfiled.gallery.not_in_album.get() == on {
|
||||||
ui_unfiled.gallery.not_in_album.set(on);
|
return;
|
||||||
load_gallery(&ui_unfiled, false);
|
}
|
||||||
|
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
|
// 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) {
|
pub(crate) fn load_gallery(ui: &Rc<Ui>, append: bool) {
|
||||||
|
sync_filter_badge(ui);
|
||||||
if ui.gallery.loading.get() {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
// An open album pages itself instead of the timeline; everything downstream —
|
// 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.loading.set(false);
|
||||||
ui.gallery.pager.set_visible(false);
|
ui.gallery.pager.set_visible(false);
|
||||||
ui.gallery.pager.set_spinning(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
|
// Whoever waited on this page runs once the reply below has put it in
|
||||||
// the model, whichever way that goes.
|
// the model, whichever way that goes.
|
||||||
let waiters = std::mem::take(&mut *ui.gallery.page_waiters.borrow_mut());
|
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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{
|
use super::{
|
||||||
Grouping, ROW_DEFAULT, ROW_MAX, ROW_MIN, ROW_STEP, TILE_GAP, empty_timeline_text,
|
Grouping, ROW_DEFAULT, ROW_MAX, ROW_MIN, ROW_STEP, TILE_GAP, active_filters,
|
||||||
grouping_for, memory_years, month_index, month_range, plan_grid, section_heading,
|
empty_timeline_text, grouping_for, memory_years, month_index, month_range, plan_grid,
|
||||||
|
section_heading,
|
||||||
};
|
};
|
||||||
use pdfs_core::control::{PhotoItem, PhotoKind, PhotoMonth};
|
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
|
/// The strip shows the nearest year first, with each year's newest photo
|
||||||
/// as its cover, and never this year's own photos.
|
/// as its cover, and never this year's own photos.
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
+194
-181
File diff suppressed because it is too large.
Load diff
+189
-178
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: proton-drive-linux 2.2.2\n"
|
"Project-Id-Version: proton-drive-linux 2.2.2\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
|
||||||
"POT-Creation-Date: 2026-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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -18,99 +18,99 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\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/app/pages/locations.rs:1133
|
||||||
#: crates/pdfs-gui/src/prompt.rs:169
|
#: crates/pdfs-gui/src/prompt.rs:169
|
||||||
msgid "My files"
|
msgid "My files"
|
||||||
msgstr ""
|
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/albums.rs:633
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:756
|
#: crates/pdfs-gui/src/app/pages/photos.rs:789
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:848
|
#: crates/pdfs-gui/src/app/main.rs:852
|
||||||
msgid "Shared with me"
|
msgid "Shared with me"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:853
|
#: crates/pdfs-gui/src/app/main.rs:857
|
||||||
msgid "Shared by me"
|
msgid "Shared by me"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/devices.rs:109
|
||||||
msgid "Computers"
|
msgid "Computers"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/trash.rs:106
|
||||||
msgid "Trash"
|
msgid "Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:861
|
#: crates/pdfs-gui/src/app/main.rs:865
|
||||||
msgid "Sync"
|
msgid "Sync"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/activity.rs:153
|
||||||
msgid "Activity"
|
msgid "Activity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1012
|
#: crates/pdfs-gui/src/app/main.rs:1016
|
||||||
msgid "Refresh (F5)"
|
msgid "Refresh (F5)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a failed action's toast. {what} says what failed, such as
|
#. Translators: a failed action's toast. {what} says what failed, such as
|
||||||
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
|
||||||
#. from the mount service.
|
#. from the mount service.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1186
|
#: crates/pdfs-gui/src/app/main.rs:1190
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{what}: {detail}"
|
msgid "{what}: {detail}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1205
|
#: crates/pdfs-gui/src/app/main.rs:1209
|
||||||
msgid "You're offline"
|
msgid "You're offline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1206
|
#: crates/pdfs-gui/src/app/main.rs:1210
|
||||||
msgid "That's not there any more"
|
msgid "That's not there any more"
|
||||||
msgstr ""
|
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"
|
msgid "You don't have access to that"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1208
|
#: crates/pdfs-gui/src/app/main.rs:1212
|
||||||
msgid "Something changed this first"
|
msgid "Something changed this first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1209
|
#: crates/pdfs-gui/src/app/main.rs:1213
|
||||||
msgid "Your Proton Drive is full"
|
msgid "Your Proton Drive is full"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/status.rs:353
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr ""
|
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"
|
msgid "Keyboard Shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1253
|
#: crates/pdfs-gui/src/app/main.rs:1257
|
||||||
msgid "About Proton Drive for Linux"
|
msgid "About Proton Drive for Linux"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1258
|
#: crates/pdfs-gui/src/app/main.rs:1262
|
||||||
msgid "Main menu"
|
msgid "Main menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1304
|
#: crates/pdfs-gui/src/app/main.rs:1308
|
||||||
msgid "Proton Drive for Linux"
|
msgid "Proton Drive for Linux"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1312
|
#: crates/pdfs-gui/src/app/main.rs:1316
|
||||||
msgid ""
|
msgid ""
|
||||||
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
"Files-on-demand Proton Drive for the Linux desktop.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -118,23 +118,23 @@ msgid ""
|
|||||||
"AG."
|
"AG."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1317
|
#: crates/pdfs-gui/src/app/main.rs:1321
|
||||||
msgid "Source Code"
|
msgid "Source Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1321
|
#: crates/pdfs-gui/src/app/main.rs:1325
|
||||||
msgid "Proton Terms of Service"
|
msgid "Proton Terms of Service"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1325
|
#: crates/pdfs-gui/src/app/main.rs:1329
|
||||||
msgid "Proton Privacy Policy"
|
msgid "Proton Privacy Policy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1330
|
#: crates/pdfs-gui/src/app/main.rs:1334
|
||||||
msgid "Disclaimer"
|
msgid "Disclaimer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1334
|
#: crates/pdfs-gui/src/app/main.rs:1338
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is an unofficial, community-built client. It is not affiliated with, "
|
"This is an unofficial, community-built client. It is not affiliated with, "
|
||||||
"endorsed by, or supported by Proton AG.\n"
|
"endorsed by, or supported by Proton AG.\n"
|
||||||
@@ -149,21 +149,21 @@ msgstr ""
|
|||||||
|
|
||||||
#. Translators: replace with your name(s) and email address(es), one
|
#. Translators: replace with your name(s) and email address(es), one
|
||||||
#. per line, to be credited in the About dialog.
|
#. per line, to be credited in the About dialog.
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1345
|
#: crates/pdfs-gui/src/app/main.rs:1349
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1376
|
#: crates/pdfs-gui/src/app/main.rs:1380
|
||||||
msgid "Stop Proton Drive?"
|
msgid "Stop Proton Drive?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1377
|
#: crates/pdfs-gui/src/app/main.rs:1381
|
||||||
msgid ""
|
msgid ""
|
||||||
"The drive unmounts and nothing syncs until you connect again. Proton Drive "
|
"The drive unmounts and nothing syncs until you connect again. Proton Drive "
|
||||||
"starts again at your next login."
|
"starts again at your next login."
|
||||||
msgstr ""
|
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:242
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:423
|
#: crates/pdfs-gui/src/app/pages/albums.rs:423
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2273
|
#: 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:670
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1050
|
#: crates/pdfs-gui/src/app/pages/locations.rs:1050
|
||||||
#: crates/pdfs-gui/src/app/pages/login.rs:312
|
#: 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:717
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:748
|
#: crates/pdfs-gui/src/app/pages/shared.rs:748
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:789
|
#: crates/pdfs-gui/src/app/pages/shared.rs:789
|
||||||
@@ -191,67 +191,67 @@ msgstr ""
|
|||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1380
|
#: crates/pdfs-gui/src/app/main.rs:1384
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1397
|
#: crates/pdfs-gui/src/app/main.rs:1401
|
||||||
msgid "Couldn't stop Proton Drive"
|
msgid "Couldn't stop Proton Drive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1398
|
#: crates/pdfs-gui/src/app/main.rs:1402
|
||||||
msgid "The mount service did not stop."
|
msgid "The mount service did not stop."
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/status.rs:226
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/browser.rs:270
|
||||||
msgid "Search Drive"
|
msgid "Search Drive"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1363
|
||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1439
|
#: crates/pdfs-gui/src/app/main.rs:1443
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1443
|
#: crates/pdfs-gui/src/app/main.rs:1447
|
||||||
msgid "Files"
|
msgid "Files"
|
||||||
msgstr ""
|
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:319
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2586
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2586
|
||||||
msgid "New folder"
|
msgid "New folder"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/browser.rs:315
|
||||||
msgid "Upload files"
|
msgid "Upload files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1447
|
#: crates/pdfs-gui/src/app/main.rs:1451
|
||||||
msgid "Back / forward"
|
msgid "Back / forward"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2320
|
||||||
msgid "Parent folder"
|
msgid "Parent folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1449
|
#: crates/pdfs-gui/src/app/main.rs:1453
|
||||||
msgid "Grid / list"
|
msgid "Grid / list"
|
||||||
msgstr ""
|
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/albums.rs:297
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2252
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2252
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2274
|
#: crates/pdfs-gui/src/app/pages/browser.rs:2274
|
||||||
@@ -260,63 +260,63 @@ msgstr ""
|
|||||||
msgid "Rename"
|
msgid "Rename"
|
||||||
msgstr ""
|
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:414
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1306
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1306
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1338
|
#: crates/pdfs-gui/src/app/pages/browser.rs:1338
|
||||||
#: crates/pdfs-gui/src/app/pages/duplicates.rs:24
|
#: 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:561
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1851
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1936
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1855
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1940
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:162
|
#: crates/pdfs-gui/src/app/widgets/details.rs:162
|
||||||
msgid "Move to Trash"
|
msgid "Move to Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1452
|
#: crates/pdfs-gui/src/app/main.rs:1456
|
||||||
msgid "Clear the selection"
|
msgid "Clear the selection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1458
|
#: crates/pdfs-gui/src/app/main.rs:1462
|
||||||
msgid "Larger thumbnails"
|
msgid "Larger thumbnails"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1459
|
#: crates/pdfs-gui/src/app/main.rs:1463
|
||||||
msgid "Smaller thumbnails"
|
msgid "Smaller thumbnails"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1460
|
#: crates/pdfs-gui/src/app/main.rs:1464
|
||||||
msgid "Reset thumbnail size"
|
msgid "Reset thumbnail size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1461
|
#: crates/pdfs-gui/src/app/main.rs:1465
|
||||||
msgid "Select all"
|
msgid "Select all"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1465
|
#: crates/pdfs-gui/src/app/main.rs:1469
|
||||||
msgid "Photo Viewer"
|
msgid "Photo Viewer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1467
|
#: crates/pdfs-gui/src/app/main.rs:1471
|
||||||
msgid "Previous / next photo"
|
msgid "Previous / next photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1468
|
#: crates/pdfs-gui/src/app/main.rs:1472
|
||||||
msgid "First / last photo"
|
msgid "First / last photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1469
|
#: crates/pdfs-gui/src/app/main.rs:1473
|
||||||
msgid "Show details"
|
msgid "Show details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1470
|
#: crates/pdfs-gui/src/app/main.rs:1474
|
||||||
msgid "Fullscreen"
|
msgid "Fullscreen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/main.rs:1472
|
#: crates/pdfs-gui/src/app/main.rs:1476
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
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"
|
msgid "Select a single item to rename it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -353,7 +353,7 @@ msgstr ""
|
|||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:306
|
#: crates/pdfs-gui/src/app/pages/browser.rs:306
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:84
|
#: crates/pdfs-gui/src/app/pages/devices.rs:84
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:134
|
#: 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.rs:83
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:38
|
#: 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
|
#: 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:2880
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:3066
|
#: 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/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/shared_by_me.rs:139
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:320
|
#: crates/pdfs-gui/src/app/pages/trash.rs:320
|
||||||
msgid "Unexpected reply from the mount service."
|
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/browser.rs:2914
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:209
|
#: crates/pdfs-gui/src/app/pages/devices.rs:209
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:844
|
#: 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.rs:523
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:156
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:156
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:1301
|
#: 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/browser.rs:2915
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:210
|
#: crates/pdfs-gui/src/app/pages/devices.rs:210
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:845
|
#: 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.rs:524
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:157
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:157
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:336
|
#: 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/browser.rs:2924
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:218
|
#: crates/pdfs-gui/src/app/pages/devices.rs:218
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:853
|
#: 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.rs:532
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:165
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:165
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:305
|
#: 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/browser.rs:2925
|
||||||
#: crates/pdfs-gui/src/app/pages/devices.rs:219
|
#: crates/pdfs-gui/src/app/pages/devices.rs:219
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:854
|
#: 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.rs:533
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:166
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:166
|
||||||
#: crates/pdfs-gui/src/app/pages/trash.rs:345
|
#: 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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity.rs:419
|
#: 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"
|
msgid "Today"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/activity.rs:422
|
#: 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"
|
msgid "Yesterday"
|
||||||
msgstr ""
|
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 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".
|
#. 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/activity.rs:580
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2566
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2651
|
||||||
msgid "%H:%M"
|
msgid "%H:%M"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -610,12 +610,12 @@ msgid "Reading your Proton Drive albums."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:59
|
#: 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"
|
msgid "No photo library"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:60
|
#: 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."
|
msgid "This Proton account doesn't have Photos enabled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -648,7 +648,7 @@ msgstr[1] ""
|
|||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:205
|
#: crates/pdfs-gui/src/app/pages/albums.rs:205
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1246
|
#: 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.rs:384
|
||||||
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:244
|
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:244
|
||||||
#: crates/pdfs-gui/src/app/widgets/details.rs:155
|
#: 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:1090
|
||||||
#: crates/pdfs-gui/src/app/pages/locations.rs:1109
|
#: 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/photo_viewer.rs:1424
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1284
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1369
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1939
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2024
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3066
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3151
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3241
|
#: 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:510
|
||||||
#: crates/pdfs-gui/src/app/pages/shared.rs:838
|
#: crates/pdfs-gui/src/app/pages/shared.rs:838
|
||||||
#: crates/pdfs-gui/src/app/pages/status.rs:672
|
#: crates/pdfs-gui/src/app/pages/status.rs:672
|
||||||
@@ -782,7 +782,7 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/albums.rs:424
|
#: 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…"
|
msgid "New Album…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -973,7 +973,7 @@ msgstr ""
|
|||||||
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
#. Translators: {n} is how many items are selected: files and folders in My Files, photos here.
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:638
|
#: crates/pdfs-gui/src/app/pages/browser.rs:638
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1331
|
#: 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
|
#, rust-format
|
||||||
msgid "{n} selected"
|
msgid "{n} selected"
|
||||||
msgid_plural "{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:674
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:709
|
#: 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:2017
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1938
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2023
|
||||||
msgid "Couldn't move to Trash"
|
msgid "Couldn't move to Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1017,7 +1017,7 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:727
|
#: 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"
|
msgid "Undo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1074,7 +1074,7 @@ msgid "Open With…"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:1263
|
#: 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"
|
msgctxt "verb"
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1367,7 +1367,7 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/browser.rs:2696
|
#: 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"
|
msgctxt "verb"
|
||||||
msgid "View"
|
msgid "View"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -2505,177 +2505,188 @@ msgid "Hide details"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1429
|
#: 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:3146
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3065
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3150
|
||||||
msgid "Couldn't change the favorite"
|
msgid "Couldn't change the favorite"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:428
|
#: crates/pdfs-gui/src/app/pages/photos.rs:439
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:508
|
#: crates/pdfs-gui/src/app/pages/photos.rs:519
|
||||||
msgid "Upload photos"
|
msgid "Upload photos"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/app/pages/takeout.rs:287
|
||||||
msgid "Import from Google Photos"
|
msgid "Import from Google Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:473
|
#: crates/pdfs-gui/src/app/pages/photos.rs:484
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:622
|
|
||||||
msgid "Jump to a month"
|
msgid "Jump to a month"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:492
|
#: crates/pdfs-gui/src/app/pages/photos.rs:503
|
||||||
msgid "Back to albums"
|
msgid "Back to albums"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:504
|
#: crates/pdfs-gui/src/app/pages/photos.rs:515
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr ""
|
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"
|
msgid "Import a Google Photos Takeout export"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:527
|
#: crates/pdfs-gui/src/app/pages/photos.rs:538
|
||||||
msgid "Find duplicates"
|
msgid "Find duplicates"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:536
|
#: crates/pdfs-gui/src/app/pages/photos.rs:547
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:545
|
#: crates/pdfs-gui/src/app/pages/photos.rs:556
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1785
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1870
|
||||||
msgid "Select photos"
|
msgid "Select photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:556
|
#: crates/pdfs-gui/src/app/pages/photos.rs:567
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3018
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3103
|
||||||
msgid "Add to Album…"
|
msgid "Add to Album…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:562
|
#: crates/pdfs-gui/src/app/pages/photos.rs:573
|
||||||
msgid "Leave selection (Esc)"
|
msgid "Leave selection (Esc)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:606
|
#: crates/pdfs-gui/src/app/pages/photos.rs:616
|
||||||
msgid "Show only favorites"
|
msgid "Only favorites"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:613
|
#: crates/pdfs-gui/src/app/pages/photos.rs:619
|
||||||
msgid "Show only photos not in an album"
|
msgid "Only photos not in an album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:620
|
#: crates/pdfs-gui/src/app/pages/photos.rs:624
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:857
|
msgid "Month"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: crates/pdfs-gui/src/app/pages/photos.rs:625
|
||||||
|
#: crates/pdfs-gui/src/app/pages/photos.rs:921
|
||||||
msgid "All dates"
|
msgid "All dates"
|
||||||
msgstr ""
|
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"
|
msgid "Timeline"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:645
|
#: crates/pdfs-gui/src/app/pages/photos.rs:678
|
||||||
msgid "Albums"
|
msgid "Albums"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:664
|
#: crates/pdfs-gui/src/app/pages/photos.rs:697
|
||||||
msgid "On this day"
|
msgid "On this day"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:739
|
#: crates/pdfs-gui/src/app/pages/photos.rs:772
|
||||||
msgid "Importing from Google Photos…"
|
msgid "Importing from Google Photos…"
|
||||||
msgstr ""
|
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.
|
#. 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"
|
msgid "%OB %Y"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a row of the date jump; {month} is a month such as "June 2024", {count} how many photos it holds.
|
#. 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
|
#, rust-format
|
||||||
msgid "{month} ({count})"
|
msgid "{month} ({count})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a Photos filter tab that shows photos, videos and raw files together.
|
#. 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"
|
msgctxt "photo filter"
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:902
|
#: crates/pdfs-gui/src/app/pages/photos.rs:966
|
||||||
msgctxt "photo filter"
|
msgctxt "photo filter"
|
||||||
msgid "Photos"
|
msgid "Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:903
|
#: crates/pdfs-gui/src/app/pages/photos.rs:967
|
||||||
msgctxt "photo filter"
|
msgctxt "photo filter"
|
||||||
msgid "Videos"
|
msgid "Videos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: a Photos filter tab for raw camera files.
|
#. 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"
|
msgctxt "photo filter"
|
||||||
msgid "Raw"
|
msgid "Raw"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1210
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1295
|
||||||
msgid "Select Photo to Upload"
|
msgid "Select Photo to Upload"
|
||||||
msgstr ""
|
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
|
#: crates/pdfs-gui/src/prompt.rs:60
|
||||||
msgid "Images"
|
msgid "Images"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1270
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1355
|
||||||
msgid "Photo uploaded"
|
msgid "Photo uploaded"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1275
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1360
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1283
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1368
|
||||||
msgid "Couldn't upload photo"
|
msgid "Couldn't upload photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: badge on a photo tile whose shot includes a raw camera file.
|
#. 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"
|
msgid "RAW"
|
||||||
msgstr ""
|
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?"
|
msgid "Move this photo to Trash?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1831
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1916
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Move this photo to Trash? It is stored as {n} file."
|
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."
|
msgid_plural "Move this photo to Trash? It is stored as {n} files."
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1837
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1922
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Move {n} photo to Trash?"
|
msgid "Move {n} photo to Trash?"
|
||||||
msgid_plural "Move {n} photos to Trash?"
|
msgid_plural "Move {n} photos to Trash?"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1844
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1929
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Move {n} photo to Trash? They are stored as {files} files."
|
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."
|
msgid_plural "Move {n} photos to Trash? They are stored as {files} files."
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1908
|
#: crates/pdfs-gui/src/app/pages/photos.rs:1993
|
||||||
msgid "The server refused."
|
msgid "The server refused."
|
||||||
msgstr ""
|
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"
|
msgid "Some photos couldn't be moved to Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:1920
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2005
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "Moved {n} photo to Trash"
|
msgid "Moved {n} photo to Trash"
|
||||||
msgid_plural "Moved {n} photos to Trash"
|
msgid_plural "Moved {n} photos to Trash"
|
||||||
@@ -2683,7 +2694,7 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#. Translators: the Photos page subtitle, such as "12 videos".
|
#. 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
|
#, rust-format
|
||||||
msgid "{count} video"
|
msgid "{count} video"
|
||||||
msgid_plural "{count} videos"
|
msgid_plural "{count} videos"
|
||||||
@@ -2691,7 +2702,7 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#. Translators: the Photos page subtitle, such as "12 raw photos".
|
#. 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
|
#, rust-format
|
||||||
msgid "{count} raw photo"
|
msgid "{count} raw photo"
|
||||||
msgid_plural "{count} raw photos"
|
msgid_plural "{count} raw photos"
|
||||||
@@ -2699,138 +2710,138 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#. Translators: the Photos page subtitle, such as "1,204 photos".
|
#. 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
|
#, rust-format
|
||||||
msgid "{count} photo"
|
msgid "{count} photo"
|
||||||
msgid_plural "{count} photos"
|
msgid_plural "{count} photos"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2508
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2593
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2534
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2619
|
||||||
msgid "Unknown date"
|
msgid "Unknown date"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: strftime format for a day heading in the photo timeline, such as "3 June 2026".
|
#. 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"
|
msgid "%-d %B %Y"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: strftime format for a photo's capture date and time, such as "2026-06-03 14:05:09".
|
#. 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"
|
msgid "%Y-%m-%d %H:%M:%S"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2556
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2641
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2558
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2643
|
||||||
msgid "Unknown Date"
|
msgid "Unknown Date"
|
||||||
msgstr ""
|
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".
|
#. 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"
|
msgid "%-d %b"
|
||||||
msgstr ""
|
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"
|
msgid "Every photo is in an album"
|
||||||
msgstr ""
|
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."
|
msgid "Turn off the album filter to see everything."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2604
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2689
|
||||||
msgid "No photos yet"
|
msgid "No photos yet"
|
||||||
msgstr ""
|
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."
|
msgid "Photos you upload to Proton Drive appear here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2608
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2693
|
||||||
msgid "No favorites yet"
|
msgid "No favorites yet"
|
||||||
msgstr ""
|
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."
|
msgid "Star a photo in the viewer or from its menu to find it here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {month} is a month and year, such as "June 2024".
|
#. 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
|
#, rust-format
|
||||||
msgid "No favorite videos in {month}"
|
msgid "No favorite videos in {month}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2615
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2700
|
||||||
msgid "No favorite videos"
|
msgid "No favorite videos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {month} is a month and year, such as "June 2024".
|
#. 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
|
#, rust-format
|
||||||
msgid "No favorite raw files in {month}"
|
msgid "No favorite raw files in {month}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2618
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2703
|
||||||
msgid "No favorite raw files"
|
msgid "No favorite raw files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {month} is a month and year, such as "June 2024".
|
#. 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
|
#, rust-format
|
||||||
msgid "No favorite photos in {month}"
|
msgid "No favorite photos in {month}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2621
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2706
|
||||||
msgid "No favorite photos"
|
msgid "No favorite photos"
|
||||||
msgstr ""
|
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."
|
msgid "Turn off the favorites filter to see everything."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {month} is a month and year, such as "June 2024".
|
#. 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
|
#, rust-format
|
||||||
msgid "No videos in {month}"
|
msgid "No videos in {month}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2629
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2714
|
||||||
msgid "No videos"
|
msgid "No videos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {month} is a month and year, such as "June 2024".
|
#. 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
|
#, rust-format
|
||||||
msgid "No raw files in {month}"
|
msgid "No raw files in {month}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2632
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2717
|
||||||
msgid "No raw files"
|
msgid "No raw files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. Translators: {month} is a month and year, such as "June 2024".
|
#. 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
|
#, rust-format
|
||||||
msgid "No photos in {month}"
|
msgid "No photos in {month}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2635
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2720
|
||||||
msgid "No photos"
|
msgid "No photos"
|
||||||
msgstr ""
|
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."
|
msgid "Try another filter or month."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2753
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2838
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{n} year ago"
|
msgid "{n} year ago"
|
||||||
msgid_plural "{n} years ago"
|
msgid_plural "{n} years ago"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:2778
|
#: crates/pdfs-gui/src/app/pages/photos.rs:2863
|
||||||
#, rust-format
|
#, rust-format
|
||||||
msgid "{date}, {n} photo"
|
msgid "{date}, {n} photo"
|
||||||
msgid_plural "{date}, {n} photos"
|
msgid_plural "{date}, {n} photos"
|
||||||
@@ -2838,55 +2849,55 @@ msgstr[0] ""
|
|||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#. Translators: a check item in a photo's menu, on while the photo is a favorite.
|
#. 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"
|
msgctxt "state"
|
||||||
msgid "Favorite"
|
msgid "Favorite"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3012
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3097
|
||||||
msgctxt "verb"
|
msgctxt "verb"
|
||||||
msgid "Select"
|
msgid "Select"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3024
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3109
|
||||||
msgid "Remove from Album"
|
msgid "Remove from Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3030
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3115
|
||||||
msgid "Move to Trash…"
|
msgid "Move to Trash…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3054
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3139
|
||||||
msgid "Added to Favorites"
|
msgid "Added to Favorites"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3056
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3141
|
||||||
msgid "Removed from Favorites"
|
msgid "Removed from Favorites"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3085
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3176
|
||||||
msgid "Loading photos…"
|
msgid "Loading photos…"
|
||||||
msgstr ""
|
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."
|
msgid "Reading your Proton Drive timeline."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3179
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3274
|
||||||
msgid "Empty album"
|
msgid "Empty album"
|
||||||
msgstr ""
|
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."
|
msgid "This album has no photos in it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3222
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3317
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3240
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3335
|
||||||
msgid "Couldn't load more photos"
|
msgid "Couldn't load more photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3227
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3322
|
||||||
#: crates/pdfs-gui/src/app/pages/photos.rs:3234
|
#: crates/pdfs-gui/src/app/pages/photos.rs:3329
|
||||||
msgid "Couldn't load photos"
|
msgid "Couldn't load photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+194
-181
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user