Internationalize user-facing strings and export them for translations

Changelog-Added: Internationalized user-facing strings and exported them for translations
Signed-off-by: Terry Yiu <git@tyiu.xyz>
This commit is contained in:
2025-06-26 23:13:31 -04:00
committed by William Casarin
parent d07c3e9135
commit 3f5036bd32
37 changed files with 2198 additions and 437 deletions

View File

@@ -1,5 +1,5 @@
use enostr::{NoteId, Pubkey};
use notedeck::{NoteZapTargetOwned, RootNoteIdBuf, WalletType};
use notedeck::{tr, NoteZapTargetOwned, RootNoteIdBuf, WalletType};
use std::{
fmt::{self},
ops::Range,
@@ -244,42 +244,85 @@ impl Route {
pub fn title(&self) -> ColumnTitle<'_> {
match self {
Route::Timeline(kind) => kind.to_title(),
Route::Thread(_) => ColumnTitle::simple("Thread"),
Route::Reply(_id) => ColumnTitle::simple("Reply"),
Route::Quote(_id) => ColumnTitle::simple("Quote"),
Route::Relays => ColumnTitle::simple("Relays"),
Route::Thread(_) => {
ColumnTitle::formatted(tr!("Thread", "Column title for note thread view"))
}
Route::Reply(_id) => {
ColumnTitle::formatted(tr!("Reply", "Column title for reply composition"))
}
Route::Quote(_id) => {
ColumnTitle::formatted(tr!("Quote", "Column title for quote composition"))
}
Route::Relays => {
ColumnTitle::formatted(tr!("Relays", "Column title for relay management"))
}
Route::Accounts(amr) => match amr {
AccountsRoute::Accounts => ColumnTitle::simple("Accounts"),
AccountsRoute::AddAccount => ColumnTitle::simple("Add Account"),
AccountsRoute::Accounts => {
ColumnTitle::formatted(tr!("Accounts", "Column title for account management"))
}
AccountsRoute::AddAccount => ColumnTitle::formatted(tr!(
"Add Account",
"Column title for adding new account"
)),
},
Route::ComposeNote => ColumnTitle::simple("Compose Note"),
Route::ComposeNote => {
ColumnTitle::formatted(tr!("Compose Note", "Column title for note composition"))
}
Route::AddColumn(c) => match c {
AddColumnRoute::Base => ColumnTitle::simple("Add Column"),
AddColumnRoute::Base => {
ColumnTitle::formatted(tr!("Add Column", "Column title for adding new column"))
}
AddColumnRoute::Algo(r) => match r {
AddAlgoRoute::Base => ColumnTitle::simple("Add Algo Column"),
AddAlgoRoute::LastPerPubkey => ColumnTitle::simple("Add Last Notes Column"),
AddAlgoRoute::Base => ColumnTitle::formatted(tr!(
"Add Algo Column",
"Column title for adding algorithm column"
)),
AddAlgoRoute::LastPerPubkey => ColumnTitle::formatted(tr!(
"Add Last Notes Column",
"Column title for adding last notes column"
)),
},
AddColumnRoute::UndecidedNotification => {
ColumnTitle::simple("Add Notifications Column")
}
AddColumnRoute::ExternalNotification => {
ColumnTitle::simple("Add External Notifications Column")
}
AddColumnRoute::Hashtag => ColumnTitle::simple("Add Hashtag Column"),
AddColumnRoute::UndecidedIndividual => {
ColumnTitle::simple("Subscribe to someone's notes")
}
AddColumnRoute::ExternalIndividual => {
ColumnTitle::simple("Subscribe to someone else's notes")
}
AddColumnRoute::UndecidedNotification => ColumnTitle::formatted(tr!(
"Add Notifications Column",
"Column title for adding notifications column"
)),
AddColumnRoute::ExternalNotification => ColumnTitle::formatted(tr!(
"Add External Notifications Column",
"Column title for adding external notifications column"
)),
AddColumnRoute::Hashtag => ColumnTitle::formatted(tr!(
"Add Hashtag Column",
"Column title for adding hashtag column"
)),
AddColumnRoute::UndecidedIndividual => ColumnTitle::formatted(tr!(
"Subscribe to someone's notes",
"Column title for subscribing to individual user"
)),
AddColumnRoute::ExternalIndividual => ColumnTitle::formatted(tr!(
"Subscribe to someone else's notes",
"Column title for subscribing to external user"
)),
},
Route::Support => ColumnTitle::simple("Damus Support"),
Route::NewDeck => ColumnTitle::simple("Add Deck"),
Route::EditDeck(_) => ColumnTitle::simple("Edit Deck"),
Route::EditProfile(_) => ColumnTitle::simple("Edit Profile"),
Route::Search => ColumnTitle::simple("Search"),
Route::Wallet(_) => ColumnTitle::simple("Wallet"),
Route::CustomizeZapAmount(_) => ColumnTitle::simple("Customize Zap Amount"),
Route::Support => {
ColumnTitle::formatted(tr!("Damus Support", "Column title for support page"))
}
Route::NewDeck => {
ColumnTitle::formatted(tr!("Add Deck", "Column title for adding new deck"))
}
Route::EditDeck(_) => {
ColumnTitle::formatted(tr!("Edit Deck", "Column title for editing deck"))
}
Route::EditProfile(_) => {
ColumnTitle::formatted(tr!("Edit Profile", "Column title for profile editing"))
}
Route::Search => ColumnTitle::formatted(tr!("Search", "Column title for search page")),
Route::Wallet(_) => {
ColumnTitle::formatted(tr!("Wallet", "Column title for wallet management"))
}
Route::CustomizeZapAmount(_) => ColumnTitle::formatted(tr!(
"Customize Zap Amount",
"Column title for zap amount customization"
)),
}
}
}
@@ -453,34 +496,90 @@ impl fmt::Display for Route {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Route::Timeline(kind) => match kind {
TimelineKind::List(ListKind::Contact(_pk)) => write!(f, "Home"),
TimelineKind::Algo(AlgoTimeline::LastPerPubkey(ListKind::Contact(_))) => {
write!(f, "Last Per Pubkey (Contact)")
TimelineKind::List(ListKind::Contact(_pk)) => {
write!(f, "{}", tr!("Home", "Display name for home feed"))
}
TimelineKind::Algo(AlgoTimeline::LastPerPubkey(ListKind::Contact(_))) => {
write!(
f,
"{}",
tr!(
"Last Per Pubkey (Contact)",
"Display name for last notes per contact"
)
)
}
TimelineKind::Notifications(_) => write!(
f,
"{}",
tr!("Notifications", "Display name for notifications")
),
TimelineKind::Universe => {
write!(f, "{}", tr!("Universe", "Display name for universe feed"))
}
TimelineKind::Generic(_) => {
write!(f, "{}", tr!("Custom", "Display name for custom timelines"))
}
TimelineKind::Search(_) => {
write!(f, "{}", tr!("Search", "Display name for search results"))
}
TimelineKind::Hashtag(ht) => write!(
f,
"{} ({})",
tr!("Hashtags", "Display name for hashtag feeds"),
ht.join(" ")
),
TimelineKind::Profile(_id) => {
write!(f, "{}", tr!("Profile", "Display name for user profiles"))
}
TimelineKind::Notifications(_) => write!(f, "Notifications"),
TimelineKind::Universe => write!(f, "Universe"),
TimelineKind::Generic(_) => write!(f, "Custom"),
TimelineKind::Search(_) => write!(f, "Search"),
TimelineKind::Hashtag(ht) => write!(f, "Hashtags ({})", ht.join(" ")),
TimelineKind::Profile(_id) => write!(f, "Profile"),
},
Route::Thread(_) => write!(f, "Thread"),
Route::Reply(_id) => write!(f, "Reply"),
Route::Quote(_id) => write!(f, "Quote"),
Route::Relays => write!(f, "Relays"),
Route::Thread(_) => write!(f, "{}", tr!("Thread", "Display name for thread view")),
Route::Reply(_id) => {
write!(f, "{}", tr!("Reply", "Display name for reply composition"))
}
Route::Quote(_id) => {
write!(f, "{}", tr!("Quote", "Display name for quote composition"))
}
Route::Relays => write!(f, "{}", tr!("Relays", "Display name for relay management")),
Route::Accounts(amr) => match amr {
AccountsRoute::Accounts => write!(f, "Accounts"),
AccountsRoute::AddAccount => write!(f, "Add Account"),
AccountsRoute::Accounts => write!(
f,
"{}",
tr!("Accounts", "Display name for account management")
),
AccountsRoute::AddAccount => write!(
f,
"{}",
tr!("Add Account", "Display name for adding account")
),
},
Route::ComposeNote => write!(f, "Compose Note"),
Route::AddColumn(_) => write!(f, "Add Column"),
Route::Support => write!(f, "Support"),
Route::NewDeck => write!(f, "Add Deck"),
Route::EditDeck(_) => write!(f, "Edit Deck"),
Route::EditProfile(_) => write!(f, "Edit Profile"),
Route::Search => write!(f, "Search"),
Route::Wallet(_) => write!(f, "Wallet"),
Route::CustomizeZapAmount(_) => write!(f, "Customize Zap Amount"),
Route::ComposeNote => write!(
f,
"{}",
tr!("Compose Note", "Display name for note composition")
),
Route::AddColumn(_) => {
write!(f, "{}", tr!("Add Column", "Display name for adding column"))
}
Route::Support => write!(f, "{}", tr!("Support", "Display name for support page")),
Route::NewDeck => write!(f, "{}", tr!("Add Deck", "Display name for adding deck")),
Route::EditDeck(_) => {
write!(f, "{}", tr!("Edit Deck", "Display name for editing deck"))
}
Route::EditProfile(_) => write!(
f,
"{}",
tr!("Edit Profile", "Display name for profile editing")
),
Route::Search => write!(f, "{}", tr!("Search", "Display name for search page")),
Route::Wallet(_) => {
write!(f, "{}", tr!("Wallet", "Display name for wallet management"))
}
Route::CustomizeZapAmount(_) => write!(
f,
"{}",
tr!("Customize Zap Amount", "Display name for zap customization")
),
}
}
}