From dc5fdd30d41293e744c81a27f6e47fb3e7496679 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 26 Mar 2021 23:16:08 +1000 Subject: [PATCH] update no-arg TR references in rslib/ --- pylib/tools/rewrite_tr.py | 8 ++-- rslib/src/backend/progress.rs | 16 ++++---- rslib/src/browser_rows.rs | 8 ++-- rslib/src/dbcheck.rs | 2 +- rslib/src/decks/mod.rs | 3 +- rslib/src/err.rs | 50 ++++++++++++------------ rslib/src/media/check.rs | 10 ++--- rslib/src/notetype/emptycards.rs | 2 +- rslib/src/notetype/render.rs | 4 +- rslib/src/notetype/stock.rs | 33 ++++++++-------- rslib/src/scheduler/timespan.rs | 2 +- rslib/src/stats/card.rs | 64 +++++++++++++------------------ rslib/src/storage/deck/mod.rs | 4 +- rslib/src/storage/deckconf/mod.rs | 4 +- rslib/src/template.rs | 8 ++-- 15 files changed, 102 insertions(+), 116 deletions(-) diff --git a/pylib/tools/rewrite_tr.py b/pylib/tools/rewrite_tr.py index 732318d81..1c088b2fd 100644 --- a/pylib/tools/rewrite_tr.py +++ b/pylib/tools/rewrite_tr.py @@ -9,13 +9,13 @@ from re import Match import stringcase -TR_REF = re.compile(r"i18n\.tr\(i18n\.TR\.([^,) ]+)\)") +TR_REF = re.compile(r"\.tr\(\s*TR::([^,) ]+)\)") def repl(m: Match) -> str: - name = stringcase.camelcase(m.group(1).lower()) + name = stringcase.snakecase(m.group(1)) # args = m.group(2) - return f"i18n.{name}()" + return f".{name}()" def update_py(path: str) -> None: @@ -31,5 +31,5 @@ for dirpath, dirnames, fnames in os.walk(os.environ["BUILD_WORKSPACE_DIRECTORY"] if "bazel-" in dirpath: continue for fname in fnames: - if fname.endswith(".svelte"): + if fname.endswith(".rs"): update_py(os.path.join(dirpath, fname)) diff --git a/rslib/src/backend/progress.rs b/rslib/src/backend/progress.rs index 557915cb6..095994ee0 100644 --- a/rslib/src/backend/progress.rs +++ b/rslib/src/backend/progress.rs @@ -66,9 +66,9 @@ pub(super) fn progress_to_proto(progress: Option, i18n: &I18n) -> pb:: }), Progress::NormalSync(p) => { let stage = match p.stage { - SyncStage::Connecting => i18n.tr(TR::SyncSyncing), - SyncStage::Syncing => i18n.tr(TR::SyncSyncing), - SyncStage::Finalizing => i18n.tr(TR::SyncChecking), + SyncStage::Connecting => i18n.sync_syncing(), + SyncStage::Syncing => i18n.sync_syncing(), + SyncStage::Finalizing => i18n.sync_checking(), } .to_string(); let added = i18n.trn( @@ -91,15 +91,15 @@ pub(super) fn progress_to_proto(progress: Option, i18n: &I18n) -> pb:: let mut stage_total = 0; let mut stage_current = 0; let stage = match p { - DatabaseCheckProgress::Integrity => i18n.tr(TR::DatabaseCheckCheckingIntegrity), - DatabaseCheckProgress::Optimize => i18n.tr(TR::DatabaseCheckRebuilding), - DatabaseCheckProgress::Cards => i18n.tr(TR::DatabaseCheckCheckingCards), + DatabaseCheckProgress::Integrity => i18n.database_check_checking_integrity(), + DatabaseCheckProgress::Optimize => i18n.database_check_rebuilding(), + DatabaseCheckProgress::Cards => i18n.database_check_checking_cards(), DatabaseCheckProgress::Notes { current, total } => { stage_total = total; stage_current = current; - i18n.tr(TR::DatabaseCheckCheckingNotes) + i18n.database_check_checking_notes() } - DatabaseCheckProgress::History => i18n.tr(TR::DatabaseCheckCheckingHistory), + DatabaseCheckProgress::History => i18n.database_check_checking_history(), } .to_string(); pb::progress::Value::DatabaseCheck(pb::progress::DatabaseCheck { diff --git a/rslib/src/browser_rows.rs b/rslib/src/browser_rows.rs index ec06ab182..14e5bbb37 100644 --- a/rslib/src/browser_rows.rs +++ b/rslib/src/browser_rows.rs @@ -236,7 +236,7 @@ impl<'a> RowContext<'a> { fn card_due_str(&mut self) -> String { let due = if self.card.original_deck_id != DeckID(0) { - self.i18n.tr(TR::BrowsingFiltered).into() + self.i18n.browsing_filtered().into() } else if self.card.queue == CardQueue::New || self.card.ctype == CardType::New { self.i18n.trn( TR::StatisticsDueForNewCard, @@ -265,15 +265,15 @@ impl<'a> RowContext<'a> { fn card_ease_str(&self) -> String { match self.card.ctype { - CardType::New => self.i18n.tr(TR::BrowsingNew).into(), + CardType::New => self.i18n.browsing_new().into(), _ => format!("{}%", self.card.ease_factor / 10), } } fn card_interval_str(&self) -> String { match self.card.ctype { - CardType::New => self.i18n.tr(TR::BrowsingNew).into(), - CardType::Learn => self.i18n.tr(TR::BrowsingLearning).into(), + CardType::New => self.i18n.browsing_new().into(), + CardType::Learn => self.i18n.browsing_learning().into(), _ => time_span((self.card.interval * 86400) as f32, self.i18n, false), } } diff --git a/rslib/src/dbcheck.rs b/rslib/src/dbcheck.rs index 42c0a90db..fd537ef2e 100644 --- a/rslib/src/dbcheck.rs +++ b/rslib/src/dbcheck.rs @@ -121,7 +121,7 @@ impl Collection { if self.storage.quick_check_corrupt() { debug!(self.log, "quick check failed"); return Err(AnkiError::DBError { - info: self.i18n.tr(TR::DatabaseCheckCorrupt).into(), + info: self.i18n.database_check_corrupt().into(), kind: DBErrorKind::Corrupt, }); } diff --git a/rslib/src/decks/mod.rs b/rslib/src/decks/mod.rs index 1a86c6e87..1b02467dd 100644 --- a/rslib/src/decks/mod.rs +++ b/rslib/src/decks/mod.rs @@ -18,7 +18,6 @@ use crate::{ deckconf::DeckConfID, define_newtype, err::{AnkiError, Result}, - i18n::TR, prelude::*, text::normalize_to_nfc, timestamp::TimestampSecs, @@ -513,7 +512,7 @@ impl Collection { if deck.id.0 == 1 { // if deleting the default deck, ensure there's a new one, and avoid the grave let mut deck = deck.to_owned(); - deck.name = self.i18n.tr(TR::DeckConfigDefaultName).into(); + deck.name = self.i18n.deck_config_default_name().into(); deck.set_modified(usn); self.add_or_update_single_deck_with_existing_id(&mut deck, usn)?; } else { diff --git a/rslib/src/err.rs b/rslib/src/err.rs index bb0ef7104..c22ab7ea1 100644 --- a/rslib/src/err.rs +++ b/rslib/src/err.rs @@ -95,23 +95,23 @@ impl AnkiError { AnkiError::SyncError { info, kind } => match kind { SyncErrorKind::ServerMessage => info.into(), SyncErrorKind::Other => info.into(), - SyncErrorKind::Conflict => i18n.tr(TR::SyncConflict), - SyncErrorKind::ServerError => i18n.tr(TR::SyncServerError), - SyncErrorKind::ClientTooOld => i18n.tr(TR::SyncClientTooOld), - SyncErrorKind::AuthFailed => i18n.tr(TR::SyncWrongPass), - SyncErrorKind::ResyncRequired => i18n.tr(TR::SyncResyncRequired), - SyncErrorKind::ClockIncorrect => i18n.tr(TR::SyncClockOff), - SyncErrorKind::DatabaseCheckRequired => i18n.tr(TR::SyncSanityCheckFailed), + SyncErrorKind::Conflict => i18n.sync_conflict(), + SyncErrorKind::ServerError => i18n.sync_server_error(), + SyncErrorKind::ClientTooOld => i18n.sync_client_too_old(), + SyncErrorKind::AuthFailed => i18n.sync_wrong_pass(), + SyncErrorKind::ResyncRequired => i18n.sync_resync_required(), + SyncErrorKind::ClockIncorrect => i18n.sync_clock_off(), + SyncErrorKind::DatabaseCheckRequired => i18n.sync_sanity_check_failed(), // server message SyncErrorKind::SyncNotStarted => "sync not started".into(), } .into(), AnkiError::NetworkError { kind, info } => { let summary = match kind { - NetworkErrorKind::Offline => i18n.tr(TR::NetworkOffline), - NetworkErrorKind::Timeout => i18n.tr(TR::NetworkTimeout), - NetworkErrorKind::ProxyAuth => i18n.tr(TR::NetworkProxyAuth), - NetworkErrorKind::Other => i18n.tr(TR::NetworkOther), + NetworkErrorKind::Offline => i18n.network_offline(), + NetworkErrorKind::Timeout => i18n.network_timeout(), + NetworkErrorKind::ProxyAuth => i18n.network_proxy_auth(), + NetworkErrorKind::Other => i18n.network_other(), }; let details = i18n.trn(TR::NetworkDetails, tr_strs!["details"=>info]); format!("{}\n\n{}", summary, details) @@ -131,14 +131,14 @@ impl AnkiError { }, AnkiError::SearchError(kind) => { let reason = match kind { - SearchErrorKind::MisplacedAnd => i18n.tr(TR::SearchMisplacedAnd), - SearchErrorKind::MisplacedOr => i18n.tr(TR::SearchMisplacedOr), - SearchErrorKind::EmptyGroup => i18n.tr(TR::SearchEmptyGroup), - SearchErrorKind::UnopenedGroup => i18n.tr(TR::SearchUnopenedGroup), - SearchErrorKind::UnclosedGroup => i18n.tr(TR::SearchUnclosedGroup), - SearchErrorKind::EmptyQuote => i18n.tr(TR::SearchEmptyQuote), - SearchErrorKind::UnclosedQuote => i18n.tr(TR::SearchUnclosedQuote), - SearchErrorKind::MissingKey => i18n.tr(TR::SearchMissingKey), + SearchErrorKind::MisplacedAnd => i18n.search_misplaced_and(), + SearchErrorKind::MisplacedOr => i18n.search_misplaced_or(), + SearchErrorKind::EmptyGroup => i18n.search_empty_group(), + SearchErrorKind::UnopenedGroup => i18n.search_unopened_group(), + SearchErrorKind::UnclosedGroup => i18n.search_unclosed_group(), + SearchErrorKind::EmptyQuote => i18n.search_empty_quote(), + SearchErrorKind::UnclosedQuote => i18n.search_unclosed_quote(), + SearchErrorKind::MissingKey => i18n.search_missing_key(), SearchErrorKind::UnknownEscape(ctx) => i18n .trn( TR::SearchUnknownEscape, @@ -151,7 +151,7 @@ impl AnkiError { tr_strs!("term" => "is:", "argument" => state.replace('`', "'")), ) .into(), - SearchErrorKind::InvalidFlag => i18n.tr(TR::SearchInvalidFlag), + SearchErrorKind::InvalidFlag => i18n.search_invalid_flag(), SearchErrorKind::InvalidPropProperty(prop) => i18n .trn( TR::SearchInvalidArgument, @@ -163,7 +163,7 @@ impl AnkiError { .into(), SearchErrorKind::Regex(text) => format!("
`{}`
", text.replace('`', "'")).into(), SearchErrorKind::Other(Some(info)) => info.into(), - SearchErrorKind::Other(None) => i18n.tr(TR::SearchInvalidOther), + SearchErrorKind::Other(None) => i18n.search_invalid_other(), SearchErrorKind::InvalidNumber { provided, context } => i18n .trn( TR::SearchInvalidNumber, @@ -202,7 +202,7 @@ impl AnkiError { } AnkiError::InvalidInput { info } => { if info.is_empty() { - i18n.tr(TR::ErrorsInvalidInputEmpty).into() + i18n.errors_invalid_input_empty().into() } else { i18n.trn( TR::ErrorsInvalidInputDetails, @@ -210,9 +210,9 @@ impl AnkiError { ) } } - AnkiError::ParseNumError => i18n.tr(TR::ErrorsParseNumberFail).into(), - AnkiError::DeckIsFiltered => i18n.tr(TR::ErrorsFilteredParentDeck).into(), - AnkiError::FilteredDeckEmpty => i18n.tr(TR::DecksFilteredDeckSearchEmpty).into(), + AnkiError::ParseNumError => i18n.errors_parse_number_fail().into(), + AnkiError::DeckIsFiltered => i18n.errors_filtered_parent_deck().into(), + AnkiError::FilteredDeckEmpty => i18n.decks_filtered_deck_search_empty().into(), _ => format!("{:?}", self), } } diff --git a/rslib/src/media/check.rs b/rslib/src/media/check.rs index 2f1a8b7f6..6eaea648e 100644 --- a/rslib/src/media/check.rs +++ b/rslib/src/media/check.rs @@ -139,7 +139,7 @@ where buf.push('\n'); if !output.renamed.is_empty() { - buf += &i.tr(TR::MediaCheckRenamedHeader); + buf += &i.media_check_renamed_header(); buf.push('\n'); for (old, new) in &output.renamed { buf += &i.trn(TR::MediaCheckRenamedFile, tr_strs!["old"=>old,"new"=>new]); @@ -150,7 +150,7 @@ where if !output.oversize.is_empty() { output.oversize.sort(); - buf += &i.tr(TR::MediaCheckOversizeHeader); + buf += &i.media_check_oversize_header(); buf.push('\n'); for fname in &output.oversize { buf += &i.trn(TR::MediaCheckOversizeFile, tr_strs!["filename"=>fname]); @@ -161,7 +161,7 @@ where if !output.dirs.is_empty() { output.dirs.sort(); - buf += &i.tr(TR::MediaCheckSubfolderHeader); + buf += &i.media_check_subfolder_header(); buf.push('\n'); for fname in &output.dirs { buf += &i.trn(TR::MediaCheckSubfolderFile, tr_strs!["filename"=>fname]); @@ -172,7 +172,7 @@ where if !output.missing.is_empty() { output.missing.sort(); - buf += &i.tr(TR::MediaCheckMissingHeader); + buf += &i.media_check_missing_header(); buf.push('\n'); for fname in &output.missing { buf += &i.trn(TR::MediaCheckMissingFile, tr_strs!["filename"=>fname]); @@ -183,7 +183,7 @@ where if !output.unused.is_empty() { output.unused.sort(); - buf += &i.tr(TR::MediaCheckUnusedHeader); + buf += &i.media_check_unused_header(); buf.push('\n'); for fname in &output.unused { buf += &i.trn(TR::MediaCheckUnusedFile, tr_strs!["filename"=>fname]); diff --git a/rslib/src/notetype/emptycards.rs b/rslib/src/notetype/emptycards.rs index 8ee67977d..a49f478dd 100644 --- a/rslib/src/notetype/emptycards.rs +++ b/rslib/src/notetype/emptycards.rs @@ -104,7 +104,7 @@ impl Collection { // "Cloze 1, 3" NoteTypeKind::Cloze => format!( "{} {}", - self.i18n.tr(TR::NotetypesClozeName), + self.i18n.notetypes_cloze_name(), note.empty .iter() .map(|(ord, _)| (ord + 1).to_string()) diff --git a/rslib/src/notetype/render.rs b/rslib/src/notetype/render.rs index c73611e5c..0ef9c2247 100644 --- a/rslib/src/notetype/render.rs +++ b/rslib/src/notetype/render.rs @@ -6,7 +6,7 @@ use crate::{ card::{Card, CardID}, collection::Collection, err::{AnkiError, Result}, - i18n::{I18n, TR}, + i18n::I18n, notes::{Note, NoteID}, template::{field_is_empty, render_card, ParsedTemplate, RenderedNode}, }; @@ -172,7 +172,7 @@ fn fill_empty_fields(note: &mut Note, qfmt: &str, nt: &NoteType, i18n: &I18n) { for (val, field) in note.fields_mut().iter_mut().zip(nt.fields.iter()) { if field_is_empty(val) { if cloze_fields.contains(&field.name.as_str()) { - *val = i18n.tr(TR::CardTemplatesSampleCloze).into(); + *val = i18n.card_templates_sample_cloze().into(); } else { *val = format!("({})", field.name); } diff --git a/rslib/src/notetype/stock.rs b/rslib/src/notetype/stock.rs index 420cc1b5f..3860cd8a0 100644 --- a/rslib/src/notetype/stock.rs +++ b/rslib/src/notetype/stock.rs @@ -6,7 +6,6 @@ use crate::{ config::{ConfigEntry, ConfigKey}, err::Result, i18n::I18n, - i18n::TR, notetype::NoteType, storage::SqliteStorage, timestamp::TimestampSecs, @@ -49,15 +48,15 @@ fn fieldref>(name: S) -> String { pub(crate) fn basic(i18n: &I18n) -> NoteType { let mut nt = NoteType { - name: i18n.tr(TR::NotetypesBasicName).into(), + name: i18n.notetypes_basic_name().into(), ..Default::default() }; - let front = i18n.tr(TR::NotetypesFrontField); - let back = i18n.tr(TR::NotetypesBackField); + let front = i18n.notetypes_front_field(); + let back = i18n.notetypes_back_field(); nt.add_field(front.as_ref()); nt.add_field(back.as_ref()); nt.add_template( - i18n.tr(TR::NotetypesCard1Name), + i18n.notetypes_card_1_name(), fieldref(front), format!( "{}\n\n
\n\n{}", @@ -71,9 +70,9 @@ pub(crate) fn basic(i18n: &I18n) -> NoteType { pub(crate) fn basic_typing(i18n: &I18n) -> NoteType { let mut nt = basic(i18n); - nt.name = i18n.tr(TR::NotetypesBasicTypeAnswerName).into(); - let front = i18n.tr(TR::NotetypesFrontField); - let back = i18n.tr(TR::NotetypesBackField); + nt.name = i18n.notetypes_basic_type_answer_name().into(); + let front = i18n.notetypes_front_field(); + let back = i18n.notetypes_back_field(); let tmpl = &mut nt.templates[0].config; tmpl.q_format = format!("{}\n\n{{{{type:{}}}}}", fieldref(front.as_ref()), back); tmpl.a_format = format!( @@ -87,11 +86,11 @@ pub(crate) fn basic_typing(i18n: &I18n) -> NoteType { pub(crate) fn basic_forward_reverse(i18n: &I18n) -> NoteType { let mut nt = basic(i18n); - nt.name = i18n.tr(TR::NotetypesBasicReversedName).into(); - let front = i18n.tr(TR::NotetypesFrontField); - let back = i18n.tr(TR::NotetypesBackField); + nt.name = i18n.notetypes_basic_reversed_name().into(); + let front = i18n.notetypes_front_field(); + let back = i18n.notetypes_back_field(); nt.add_template( - i18n.tr(TR::NotetypesCard2Name), + i18n.notetypes_card_2_name(), fieldref(back), format!( "{}\n\n
\n\n{}", @@ -105,8 +104,8 @@ pub(crate) fn basic_forward_reverse(i18n: &I18n) -> NoteType { pub(crate) fn basic_optional_reverse(i18n: &I18n) -> NoteType { let mut nt = basic_forward_reverse(i18n); - nt.name = i18n.tr(TR::NotetypesBasicOptionalReversedName).into(); - let addrev = i18n.tr(TR::NotetypesAddReverseField); + nt.name = i18n.notetypes_basic_optional_reversed_name().into(); + let addrev = i18n.notetypes_add_reverse_field(); nt.add_field(addrev.as_ref()); let tmpl = &mut nt.templates[1].config; tmpl.q_format = format!("{{{{#{}}}}}{}{{{{/{}}}}}", addrev, tmpl.q_format, addrev); @@ -116,12 +115,12 @@ pub(crate) fn basic_optional_reverse(i18n: &I18n) -> NoteType { pub(crate) fn cloze(i18n: &I18n) -> NoteType { let mut nt = NoteType { - name: i18n.tr(TR::NotetypesClozeName).into(), + name: i18n.notetypes_cloze_name().into(), ..Default::default() }; - let text = i18n.tr(TR::NotetypesTextField); + let text = i18n.notetypes_text_field(); nt.add_field(text.as_ref()); - let back_extra = i18n.tr(TR::NotetypesBackExtraField); + let back_extra = i18n.notetypes_back_extra_field(); nt.add_field(back_extra.as_ref()); let qfmt = format!("{{{{cloze:{}}}}}", text); let afmt = format!("{}
\n{{{{{}}}}}", qfmt, back_extra); diff --git a/rslib/src/scheduler/timespan.rs b/rslib/src/scheduler/timespan.rs index 14479cf6c..957daf6cb 100644 --- a/rslib/src/scheduler/timespan.rs +++ b/rslib/src/scheduler/timespan.rs @@ -23,7 +23,7 @@ pub fn answer_button_time(seconds: f32, i18n: &I18n) -> String { pub fn answer_button_time_collapsible(seconds: u32, collapse_secs: u32, i18n: &I18n) -> String { let string = answer_button_time(seconds as f32, i18n); if seconds == 0 { - i18n.tr(TR::SchedulingEnd).into() + i18n.scheduling_end().into() } else if seconds < collapse_secs { format!("<{}", string) } else { diff --git a/rslib/src/stats/card.rs b/rslib/src/stats/card.rs index c8d260d9c..8a8950756 100644 --- a/rslib/src/stats/card.rs +++ b/rslib/src/stats/card.rs @@ -131,66 +131,54 @@ impl Collection { let mut stats = vec![(i18n.card_stats_added().into(), cs.added.date_string())]; if let Some(first) = cs.first_review { - stats.push(( - i18n.tr(TR::CardStatsFirstReview).into(), - first.date_string(), - )) + stats.push((i18n.card_stats_first_review().into(), first.date_string())) } if let Some(last) = cs.latest_review { - stats.push(( - i18n.tr(TR::CardStatsLatestReview).into(), - last.date_string(), - )) + stats.push((i18n.card_stats_latest_review().into(), last.date_string())) } match cs.due { Due::Time(secs) => { - stats.push((i18n.tr(TR::StatisticsDueDate).into(), secs.date_string())); + stats.push((i18n.statistics_due_date().into(), secs.date_string())); } Due::Position(pos) => { - stats.push(( - i18n.tr(TR::CardStatsNewCardPosition).into(), - pos.to_string(), - )); + stats.push((i18n.card_stats_new_card_position().into(), pos.to_string())); } Due::Unknown => {} }; if cs.interval_secs > 0 { stats.push(( - i18n.tr(TR::CardStatsInterval).into(), + i18n.card_stats_interval().into(), time_span(cs.interval_secs as f32, i18n, true), )); } if cs.ease > 0 { - stats.push((i18n.tr(TR::CardStatsEase).into(), format!("{}%", cs.ease))); + stats.push((i18n.card_stats_ease().into(), format!("{}%", cs.ease))); } stats.push(( - i18n.tr(TR::CardStatsReviewCount).into(), + i18n.card_stats_review_count().into(), cs.reviews.to_string(), )); - stats.push(( - i18n.tr(TR::CardStatsLapseCount).into(), - cs.lapses.to_string(), - )); + stats.push((i18n.card_stats_lapse_count().into(), cs.lapses.to_string())); if cs.total_secs > 0.0 { stats.push(( - i18n.tr(TR::CardStatsAverageTime).into(), + i18n.card_stats_average_time().into(), time_span(cs.average_secs, i18n, true), )); stats.push(( - i18n.tr(TR::CardStatsTotalTime).into(), + i18n.card_stats_total_time().into(), time_span(cs.total_secs, i18n, true), )); } - stats.push((i18n.tr(TR::CardStatsCardTemplate).into(), cs.card_type)); - stats.push((i18n.tr(TR::CardStatsNoteType).into(), cs.note_type)); - stats.push((i18n.tr(TR::CardStatsDeckName).into(), cs.deck)); - stats.push((i18n.tr(TR::CardStatsCardId).into(), cs.cid.0.to_string())); - stats.push((i18n.tr(TR::CardStatsNoteId).into(), cs.nid.0.to_string())); + stats.push((i18n.card_stats_card_template().into(), cs.card_type)); + stats.push((i18n.card_stats_note_type().into(), cs.note_type)); + stats.push((i18n.card_stats_deck_name().into(), cs.deck)); + stats.push((i18n.card_stats_card_id().into(), cs.cid.0.to_string())); + stats.push((i18n.card_stats_note_id().into(), cs.nid.0.to_string())); let revlog = cs .revlog @@ -199,14 +187,14 @@ impl Collection { .map(|e| revlog_to_text(e, i18n)) .collect(); let revlog_titles = RevlogText { - time: i18n.tr(TR::CardStatsReviewLogDate).into(), - kind: i18n.tr(TR::CardStatsReviewLogType).into(), + time: i18n.card_stats_review_log_date().into(), + kind: i18n.card_stats_review_log_type().into(), kind_class: "".to_string(), - rating: i18n.tr(TR::CardStatsReviewLogRating).into(), - interval: i18n.tr(TR::CardStatsInterval).into(), - ease: i18n.tr(TR::CardStatsEase).into(), + rating: i18n.card_stats_review_log_rating().into(), + interval: i18n.card_stats_interval().into(), + ease: i18n.card_stats_ease().into(), rating_class: "".to_string(), - taken_secs: i18n.tr(TR::CardStatsReviewLogTimeTaken).into(), + taken_secs: i18n.card_stats_review_log_time_taken().into(), }; Ok(CardStatsTemplate { @@ -223,11 +211,11 @@ fn revlog_to_text(e: RevlogEntry, i18n: &I18n) -> RevlogText { let dt = Local.timestamp(e.id.as_secs().0, 0); let time = dt.format("%Y-%m-%d @ %H:%M").to_string(); let kind = match e.review_kind { - RevlogReviewKind::Learning => i18n.tr(TR::CardStatsReviewLogTypeLearn).into(), - RevlogReviewKind::Review => i18n.tr(TR::CardStatsReviewLogTypeReview).into(), - RevlogReviewKind::Relearning => i18n.tr(TR::CardStatsReviewLogTypeRelearn).into(), - RevlogReviewKind::EarlyReview => i18n.tr(TR::CardStatsReviewLogTypeFiltered).into(), - RevlogReviewKind::Manual => i18n.tr(TR::CardStatsReviewLogTypeManual).into(), + RevlogReviewKind::Learning => i18n.card_stats_review_log_type_learn().into(), + RevlogReviewKind::Review => i18n.card_stats_review_log_type_review().into(), + RevlogReviewKind::Relearning => i18n.card_stats_review_log_type_relearn().into(), + RevlogReviewKind::EarlyReview => i18n.card_stats_review_log_type_filtered().into(), + RevlogReviewKind::Manual => i18n.card_stats_review_log_type_manual().into(), }; let kind_class = match e.review_kind { RevlogReviewKind::Learning => String::from("revlog-learn"), diff --git a/rslib/src/storage/deck/mod.rs b/rslib/src/storage/deck/mod.rs index e2f76e88a..171e29a78 100644 --- a/rslib/src/storage/deck/mod.rs +++ b/rslib/src/storage/deck/mod.rs @@ -9,7 +9,7 @@ use crate::{ decks::immediate_parent_name, decks::{Deck, DeckCommon, DeckID, DeckKindProto, DeckSchema11, DueCounts}, err::{AnkiError, DBErrorKind, Result}, - i18n::{I18n, TR}, + i18n::I18n, timestamp::TimestampMillis, }; use prost::Message; @@ -339,7 +339,7 @@ impl SqliteStorage { let mut deck = Deck::new_normal(); deck.id.0 = 1; // fixme: separate key - deck.name = i18n.tr(TR::DeckConfigDefaultName).into(); + deck.name = i18n.deck_config_default_name().into(); self.add_or_update_deck_with_existing_id(&deck) } diff --git a/rslib/src/storage/deckconf/mod.rs b/rslib/src/storage/deckconf/mod.rs index 17facb35d..e2ba266f8 100644 --- a/rslib/src/storage/deckconf/mod.rs +++ b/rslib/src/storage/deckconf/mod.rs @@ -5,7 +5,7 @@ use super::SqliteStorage; use crate::{ deckconf::{DeckConf, DeckConfID, DeckConfSchema11, DeckConfigInner}, err::Result, - i18n::{I18n, TR}, + i18n::I18n, }; use prost::Message; use rusqlite::{params, Row, NO_PARAMS}; @@ -116,7 +116,7 @@ impl SqliteStorage { pub(super) fn add_default_deck_config(&self, i18n: &I18n) -> Result<()> { let mut conf = DeckConf::default(); conf.id.0 = 1; - conf.name = i18n.tr(TR::DeckConfigDefaultName).into(); + conf.name = i18n.deck_config_default_name().into(); self.add_deck_conf(&mut conf) } diff --git a/rslib/src/template.rs b/rslib/src/template.rs index 4b792f5d6..28f1f8741 100644 --- a/rslib/src/template.rs +++ b/rslib/src/template.rs @@ -253,7 +253,7 @@ fn template_error_to_anki_error(err: TemplateError, q_side: bool, i18n: &I18n) - TR::CardTemplateRenderingBackSideProblem }); let details = localized_template_error(i18n, err); - let more_info = i18n.tr(TR::CardTemplateRenderingMoreInfo); + let more_info = i18n.card_template_rendering_more_info(); let info = format!( "{}
{}
{}", header, details, TEMPLATE_ERROR_LINK, more_info @@ -566,14 +566,14 @@ pub fn render_card( tr_args!["number"=>card_ord+1] ), TEMPLATE_BLANK_CLOZE_LINK, - i18n.tr(TR::CardTemplateRenderingMoreInfo) + i18n.card_template_rendering_more_info() )) } else if !is_cloze && !qtmpl.renders_with_fields(context.nonempty_fields) { Some(format!( "
{}
{}
", - i18n.tr(TR::CardTemplateRenderingEmptyFront), + i18n.card_template_rendering_empty_front(), TEMPLATE_BLANK_LINK, - i18n.tr(TR::CardTemplateRenderingMoreInfo) + i18n.card_template_rendering_more_info() )) } else { None