notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 28634301b858f0e605d2a5f93556e7e76215e9eb
parent ce0d3e8e88b9f996aadd7a293149003b7682dedc
Author: William Casarin <jb55@jb55.com>
Date:   Mon,  8 Sep 2025 15:04:16 -0700

Merge localization fixes by Terry

Terry Yiu (1):
      Add missing localized strings and export strings for translation

Diffstat:
Massets/translations/en-US/main.ftl | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Massets/translations/en-XA/main.ftl | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcrates/notedeck_columns/src/ui/onboarding.rs | 4++--
Mcrates/notedeck_columns/src/ui/profile/mod.rs | 16+++++++++++++---
Mcrates/notedeck_columns/src/ui/side_panel.rs | 10+++++++---
Mcrates/notedeck_columns/src/ui/timeline.rs | 2+-
6 files changed, 147 insertions(+), 9 deletions(-)

diff --git a/assets/translations/en-US/main.ftl b/assets/translations/en-US/main.ftl @@ -46,6 +46,9 @@ Add_Hashtag_Column_ebf4 = Add Hashtag Column # Column title for adding last notes column Add_Last_Notes_Column_bbad = Add Last Notes Column +# Tooltip text for adding a new deck button +Add_new_deck_f2fc = Add new deck + # Column title for adding notifications column Add_Notifications_Column_79f8 = Add Notifications Column @@ -136,6 +139,9 @@ Copy_Note_ID_6b45 = Copy Note ID # Copy the raw note data in JSON format to clipboard Copy_Note_JSON_9e4e = Copy Note JSON +# Tooltip text for copying npub to clipboard +Copy_npub_to_clipboard_c105 = Copy npub to clipboard + # Copy the author's public key to clipboard Copy_Pubkey_9cc4 = Copy Pubkey @@ -208,6 +214,9 @@ Display_name_f9d9 = Display name # Domain identification message domain___will_be_used_for_identification_b67e = "{$domain}" will be used for identification +# Button to indicate that the user is done going through the onboarding process. +Done_50dd = Done + # Column title for editing deck Edit_Deck_4018 = Edit Deck @@ -283,6 +292,9 @@ k_5K_f7e6 = 5K # Description for your notes column Keep_track_of_your_notes___replies_a334 = Keep track of your notes & replies +# label for keys setting section +Keys_435f = Keys + # Label for language, Appearance settings section Language_e264 = Language: @@ -310,6 +322,18 @@ Moves_this_column_to_another_position_0d4b = Moves this column to another positi # Title for the user's deck My_Deck_4ac5 = My Deck +# reaction from user to a note you were tagged in +name__reacted_to_a_note_you_were_tagged_in_4b62 = {$name} reacted to a note you were tagged in + +# reaction from user to your note +name__reacted_to_your_note_ead9 = {$name} reacted to your note + +# repost from user +name__reposted_a_note_you_were_tagged_in_1379 = {$name} reposted a note you were tagged in + +# repost from user +name__reposted_your_note_1379 = {$name} reposted your note + # Label asking if the user is new to Nostr. Underneath this label is a button to create an account. New_to_Nostr_a2fd = New to Nostr? @@ -385,6 +409,9 @@ Press_the_button_below_to_copy_your_most_recent_logs_to_your_system_s_clipboard_ # Profile picture URL field label Profile_picture_81ff = Profile picture +# label describing public key +PUBLIC_ACCOUNT_ID_4394 = PUBLIC ACCOUNT ID + # Column title for quote composition Quote_475c = Quote @@ -463,6 +490,9 @@ Search_notes_42a6 = Search notes... # Search in progress message Searching_for___query_5d18 = Searching for '{$query}' +# label describing secret key +SECRET_ACCOUNT_LOGIN_KEY_8440 = SECRET ACCOUNT LOGIN KEY + # Description for Home column See_notes_from_your_contacts_ac16 = See notes from your contacts @@ -609,3 +639,35 @@ Got__count__results_for___query_85fb = [one] Got {$count} result for '{$query}' *[other] Got {$count} results for '{$query}' } + + +# amount of reactions a note you were tagged in received +name__and__count__others_reacted_to_a_note_you_were_tagged_in_181a = + { $count -> + [one] {$name} and {$count} other reacted to a note you were tagged in + *[other] {$name} and {$count} others reacted to a note you were tagged in + } + + +# describing the amount of reactions your note received +name__and__count__others_reacted_to_your_note_0f6a = + { $count -> + [one] {$name} and {$count} other reacted to your note + *[other] {$name} and {$count} others reacted to your note + } + + +# describing the amount of reposts a note you were tagged in received +name__and__count__others_reposted_a_note_you_were_tagged_in_08e1 = + { $count -> + [one] {$name} and {$count} other reposted a note you were tagged in + *[other] {$name} and {$count} others reposted a note you were tagged in + } + + +# describing the amount of reposts your note received +name__and__count__others_reposted_your_note_70a0 = + { $count -> + [one] {$name} and {$count} other reposted your note + *[other] {$name} and {$count} others reposted your note + } diff --git a/assets/translations/en-XA/main.ftl b/assets/translations/en-XA/main.ftl @@ -46,6 +46,9 @@ Add_Hashtag_Column_ebf4 = {"["}Àdd Hàshtàg Çólúmñ{"]"} # Column title for adding last notes column Add_Last_Notes_Column_bbad = {"["}Àdd Làst Ñótés Çólúmñ{"]"} +# Tooltip text for adding a new deck button +Add_new_deck_f2fc = {"["}Àdd ñéw déçk{"]"} + # Column title for adding notifications column Add_Notifications_Column_79f8 = {"["}Àdd Ñótífíçàtíóñs Çólúmñ{"]"} @@ -136,6 +139,9 @@ Copy_Note_ID_6b45 = {"["}Çópy Ñóté ÍD{"]"} # Copy the raw note data in JSON format to clipboard Copy_Note_JSON_9e4e = {"["}Çópy Ñóté JSÓÑ{"]"} +# Tooltip text for copying npub to clipboard +Copy_npub_to_clipboard_c105 = {"["}Çópy ñpúb tó çlípbóàrd{"]"} + # Copy the author's public key to clipboard Copy_Pubkey_9cc4 = {"["}Çópy Púbkéy{"]"} @@ -208,6 +214,9 @@ Display_name_f9d9 = {"["}Dísplày ñàmé{"]"} # Domain identification message domain___will_be_used_for_identification_b67e = {"["}"{$domain}" wíll bé úséd fór ídéñtífíçàtíóñ{"]"} +# Button to indicate that the user is done going through the onboarding process. +Done_50dd = {"["}Dóñé{"]"} + # Column title for editing deck Edit_Deck_4018 = {"["}Édít Déçk{"]"} @@ -283,6 +292,9 @@ k_5K_f7e6 = {"["}5K{"]"} # Description for your notes column Keep_track_of_your_notes___replies_a334 = {"["}Kéép tràçk óf yóúr ñótés & réplíés{"]"} +# label for keys setting section +Keys_435f = {"["}Kéys{"]"} + # Label for language, Appearance settings section Language_e264 = {"["}Làñgúàgé:{"]"} @@ -310,6 +322,18 @@ Moves_this_column_to_another_position_0d4b = {"["}Móvés thís çólúmñ tó # Title for the user's deck My_Deck_4ac5 = {"["}My Déçk{"]"} +# reaction from user to a note you were tagged in +name__reacted_to_a_note_you_were_tagged_in_4b62 = {"["}{$name} réàçtéd tó à ñóté yóú wéré tàggéd íñ{"]"} + +# reaction from user to your note +name__reacted_to_your_note_ead9 = {"["}{$name} réàçtéd tó yóúr ñóté{"]"} + +# repost from user +name__reposted_a_note_you_were_tagged_in_1379 = {"["}{$name} répóstéd à ñóté yóú wéré tàggéd íñ{"]"} + +# repost from user +name__reposted_your_note_1379 = {"["}{$name} répóstéd yóúr ñóté{"]"} + # Label asking if the user is new to Nostr. Underneath this label is a button to create an account. New_to_Nostr_a2fd = {"["}Ñéw tó Ñóstr?{"]"} @@ -385,6 +409,9 @@ Press_the_button_below_to_copy_your_most_recent_logs_to_your_system_s_clipboard_ # Profile picture URL field label Profile_picture_81ff = {"["}Prófílé píçtúré{"]"} +# label describing public key +PUBLIC_ACCOUNT_ID_4394 = {"["}PÚBLÍÇ ÀÇÇÓÚÑT ÍD{"]"} + # Column title for quote composition Quote_475c = {"["}Qúóté{"]"} @@ -463,6 +490,9 @@ Search_notes_42a6 = {"["}Séàrçh ñótés...{"]"} # Search in progress message Searching_for___query_5d18 = {"["}Séàrçhíñg fór '{$query}'{"]"} +# label describing secret key +SECRET_ACCOUNT_LOGIN_KEY_8440 = {"["}SÉÇRÉT ÀÇÇÓÚÑT LÓGÍÑ KÉY{"]"} + # Description for Home column See_notes_from_your_contacts_ac16 = {"["}Séé ñótés fróm yóúr çóñtàçts{"]"} @@ -609,3 +639,35 @@ Got__count__results_for___query_85fb = [one] {"["}Gót {$count} résúlt fór '{$query}'{"]"} *[other] {"["}Gót {$count} résúlts fór '{$query}'{"]"} } + + +# amount of reactions a note you were tagged in received +name__and__count__others_reacted_to_a_note_you_were_tagged_in_181a = + { $count -> + [one] {"["}{$name} àñd {$count} óthér réàçtéd tó à ñóté yóú wéré tàggéd íñ{"]"} + *[other] {"["}{$name} àñd {$count} óthérs réàçtéd tó à ñóté yóú wéré tàggéd íñ{"]"} + } + + +# describing the amount of reactions your note received +name__and__count__others_reacted_to_your_note_0f6a = + { $count -> + [one] {"["}{$name} àñd {$count} óthér réàçtéd tó yóúr ñóté{"]"} + *[other] {"["}{$name} àñd {$count} óthérs réàçtéd tó yóúr ñóté{"]"} + } + + +# describing the amount of reposts a note you were tagged in received +name__and__count__others_reposted_a_note_you_were_tagged_in_08e1 = + { $count -> + [one] {"["}{$name} àñd {$count} óthér répóstéd à ñóté yóú wéré tàggéd íñ{"]"} + *[other] {"["}{$name} àñd {$count} óthérs répóstéd à ñóté yóú wéré tàggéd íñ{"]"} + } + + +# describing the amount of reposts your note received +name__and__count__others_reposted_your_note_70a0 = + { $count -> + [one] {"["}{$name} àñd {$count} óthér répóstéd yóúr ñóté{"]"} + *[other] {"["}{$name} àñd {$count} óthérs répóstéd yóúr ñóté{"]"} + } diff --git a/crates/notedeck_columns/src/ui/onboarding.rs b/crates/notedeck_columns/src/ui/onboarding.rs @@ -2,7 +2,7 @@ use std::mem; use egui::{Layout, ScrollArea}; use nostrdb::Ndb; -use notedeck::{Images, JobPool, JobsCache, Localization}; +use notedeck::{tr, Images, JobPool, JobsCache, Localization}; use notedeck_ui::{ colors, nip51_set::{Nip51SetUiCache, Nip51SetWidget, Nip51SetWidgetAction, Nip51SetWidgetFlags}, @@ -107,7 +107,7 @@ impl<'a> FollowPackOnboardingView<'a> { ui.with_layout(Layout::top_down(egui::Align::Center), |ui| { ui.add_space(4.0); - if ui.add(styled_button("Done", colors::PINK)).clicked() { + if ui.add(styled_button(tr!(self.loc, "Done", "Button to indicate that the user is done going through the onboarding process.").as_str(), colors::PINK)).clicked() { action = Some(OnboardingResponse::FollowPacks( FollowPacksResponse::UserSelectedPacks(mem::take(self.ui_state)), )); diff --git a/crates/notedeck_columns/src/ui/profile/mod.rs b/crates/notedeck_columns/src/ui/profile/mod.rs @@ -163,7 +163,10 @@ impl<'a, 'd> ProfileView<'a, 'd> { .border(ProfilePic::border_stroke(ui)), ); - if ui.add(copy_key_widget(&pfp_rect)).clicked() { + if ui + .add(copy_key_widget(&pfp_rect, self.note_context.i18n)) + .clicked() + { let to_copy = if let Some(bech) = self.pubkey.npub() { bech } else { @@ -297,7 +300,10 @@ fn handle_lud16(ui: &mut egui::Ui, lud16: &str) { .on_hover_text(lud16); } -fn copy_key_widget(pfp_rect: &egui::Rect) -> impl egui::Widget + '_ { +fn copy_key_widget<'a>( + pfp_rect: &'a egui::Rect, + i18n: &'a mut Localization, +) -> impl egui::Widget + 'a { |ui: &mut egui::Ui| -> egui::Response { let painter = ui.painter(); #[allow(deprecated)] @@ -311,7 +317,11 @@ fn copy_key_widget(pfp_rect: &egui::Rect) -> impl egui::Widget + '_ { ui.id().with("custom_painter"), Sense::click(), ) - .on_hover_text("Copy npub to clipboard"); + .on_hover_text(tr!( + i18n, + "Copy npub to clipboard", + "Tooltip text for copying npub to clipboard" + )); let copy_key_rounding = CornerRadius::same(100); let fill_color = if resp.hovered() { diff --git a/crates/notedeck_columns/src/ui/side_panel.rs b/crates/notedeck_columns/src/ui/side_panel.rs @@ -120,7 +120,7 @@ impl<'a> DesktopSidePanel<'a> { .color(ui.visuals().noninteractive().fg_stroke.color), )); ui.add_space(8.0); - let add_deck_resp = ui.add(add_deck_button()); + let add_deck_resp = ui.add(add_deck_button(self.i18n)); let decks_inner = ScrollArea::vertical() .max_height(ui.available_height() - (3.0 * (ICON_WIDTH + 12.0))) @@ -383,7 +383,7 @@ pub fn search_button() -> impl Widget { // TODO: convert to responsive button when expanded side panel impl is finished -fn add_deck_button() -> impl Widget { +fn add_deck_button<'a>(i18n: &'a mut Localization) -> impl Widget + 'a { |ui: &mut egui::Ui| -> egui::Response { let img_size = 40.0; @@ -403,7 +403,11 @@ fn add_deck_button() -> impl Widget { helper .take_animation_response() .on_hover_cursor(CursorIcon::PointingHand) - .on_hover_text("Add new deck") + .on_hover_text(tr!( + i18n, + "Add new deck", + "Tooltip text for adding a new deck button" + )) } } diff --git a/crates/notedeck_columns/src/ui/timeline.rs b/crates/notedeck_columns/src/ui/timeline.rs @@ -605,7 +605,7 @@ fn repost_description( tr_plural!( loc, "{name} and {count} other reposted a note you were tagged in", - "{name} and {ocunt} others reposted a note you were tagged in", + "{name} and {count} others reposted a note you were tagged in", "describing the amount of reposts a note you were tagged in received", count, name = first_name