From 64fe8fc6c92228c18b638c2dce32d775ab7295b1 Mon Sep 17 00:00:00 2001 From: DanS Date: Sun, 7 Jun 2026 09:34:14 -0500 Subject: [PATCH] i18n(mining): route xmrig updater strings through TR() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the English string literals in the miner-update dialog + the "Update miner…" mining-tab button/tooltip with TR() keys, and register their English text in i18n.cpp's loadBuiltinEnglish() (the in-code English fallback that non-English locales overlay). Reuses the existing cancel/close/ retry keys. Labeled values use a "%s %s" literal format with a TR'd label (no -Wformat-security risk). Non-English locales fall back to English for the new xmrig_* keys until translations are added to res/lang/*.json. Both variants build; suite passes; hygiene clean. Co-Authored-By: Claude Opus 4.8 --- src/ui/windows/mining_tab.cpp | 4 +- src/ui/windows/xmrig_download_dialog.h | 54 +++++++++++++------------- src/util/i18n.cpp | 22 +++++++++++ 3 files changed, 51 insertions(+), 29 deletions(-) diff --git a/src/ui/windows/mining_tab.cpp b/src/ui/windows/mining_tab.cpp index e5cfdf5..8c8013d 100644 --- a/src/ui/windows/mining_tab.cpp +++ b/src/ui/windows/mining_tab.cpp @@ -1582,11 +1582,11 @@ static void RenderMiningTabContent(App* app) if (s_pool_mode) { const bool minerBusy = state.pool_mining.xmrig_running; ImGui::BeginDisabled(minerBusy); - if (TactileButton("Update miner…", ImVec2(availWidth, 0))) + if (TactileButton(TR("xmrig_update_button"), ImVec2(availWidth, 0))) XmrigDownloadDialog::show(app); ImGui::EndDisabled(); if (minerBusy && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) - ImGui::SetTooltip("Stop mining before updating the miner."); + ImGui::SetTooltip("%s", TR("xmrig_stop_mining_first")); ImGui::Dummy(ImVec2(0, gap)); } diff --git a/src/ui/windows/xmrig_download_dialog.h b/src/ui/windows/xmrig_download_dialog.h index 07eb5c8..836bf96 100644 --- a/src/ui/windows/xmrig_download_dialog.h +++ b/src/ui/windows/xmrig_download_dialog.h @@ -15,6 +15,7 @@ #include "../../app.h" #include "../../config/settings.h" #include "../../resources/embedded_resources.h" // resources::getDaemonDirectory() +#include "../../util/i18n.h" #include "../../util/xmrig_updater.h" #include "../material/draw_helpers.h" #include "../material/type.h" @@ -45,7 +46,7 @@ public: } using namespace material; const float dp = Layout::dpiScale(); - if (BeginOverlayDialog("Update Miner", &s_open, 480.0f, 0.94f)) { + if (BeginOverlayDialog(TR("xmrig_update_title"), &s_open, 480.0f, 0.94f)) { const auto p = s_updater->getProgress(); using St = util::XmrigUpdater::State; switch (p.state) { @@ -77,7 +78,7 @@ private: using namespace material; if (s_app->isPoolMinerRunning()) { Type().textColored(TypeStyle::Caption, OnSurfaceMedium(), - "Stop mining before updating the miner."); + TR("xmrig_stop_mining_first")); return; } if (TactileButton(label, ImVec2(fullW(), 0))) @@ -86,49 +87,48 @@ private: static void renderChecking(float, const Progress&) { using namespace material; - Type().text(TypeStyle::Body2, "Checking for the latest miner…"); + Type().text(TypeStyle::Body2, TR("xmrig_checking")); } static void renderUnavailable(float, const Progress& p) { using namespace material; - Type().text(TypeStyle::Subtitle2, "Miner updates unavailable"); + Type().text(TypeStyle::Subtitle2, TR("xmrig_unavailable_title")); ImGui::Spacing(); ImGui::TextWrapped("%s", p.status_text.empty() - ? "No miner build is available for this platform." + ? TR("xmrig_unavailable_body") : p.status_text.c_str()); ImGui::Spacing(); - if (TactileButton("Close", ImVec2(fullW(), 0))) s_open = false; + if (TactileButton(TR("close"), ImVec2(fullW(), 0))) s_open = false; } static void renderPrompt(float, const Progress& p) { using namespace material; const std::string installed = p.installed_tag.empty() ? "none" : p.installed_tag; if (p.state == St::UpdateAvailable) { - Type().text(TypeStyle::Subtitle2, "A new miner is available"); + Type().text(TypeStyle::Subtitle2, TR("xmrig_update_available")); ImGui::Spacing(); - ImGui::Text("Latest: %s", p.latest_tag.c_str()); - ImGui::Text("Installed: %s", installed.c_str()); + ImGui::Text("%s %s", TR("xmrig_latest"), p.latest_tag.c_str()); + ImGui::Text("%s %s", TR("xmrig_installed"), installed.c_str()); ImGui::Spacing(); - Type().textColored(TypeStyle::Caption, OnSurfaceMedium(), - "The download is checked against the release's published SHA-256 checksum before install."); + Type().textColored(TypeStyle::Caption, OnSurfaceMedium(), TR("xmrig_verify_note")); ImGui::Spacing(); - installAction("Download & install"); + installAction(TR("xmrig_download_install")); } else { - Type().text(TypeStyle::Subtitle2, "The miner is up to date"); + Type().text(TypeStyle::Subtitle2, TR("xmrig_up_to_date")); ImGui::Spacing(); - ImGui::Text("Installed: %s", p.latest_tag.c_str()); + ImGui::Text("%s %s", TR("xmrig_installed"), p.latest_tag.c_str()); ImGui::Spacing(); - installAction("Reinstall"); + installAction(TR("xmrig_reinstall")); } ImGui::Spacing(); - if (TactileButton("Close", ImVec2(fullW(), 0))) s_open = false; + if (TactileButton(TR("close"), ImVec2(fullW(), 0))) s_open = false; } static void renderProgress(float dp, const Progress& p) { using namespace material; - const char* title = p.state == St::Downloading ? "Downloading…" - : p.state == St::Verifying ? "Verifying…" - : "Installing…"; + const char* title = p.state == St::Downloading ? TR("xmrig_downloading") + : p.state == St::Verifying ? TR("xmrig_verifying") + : TR("xmrig_installing"); Type().text(TypeStyle::Subtitle2, title); ImGui::Spacing(); const float barH = 8.0f * dp; @@ -145,7 +145,7 @@ private: ImGui::Text("%s", p.status_text.c_str()); ImGui::Spacing(); // Cancel aborts the in-flight transfer promptly (the curl progress callback returns abort). - if (TactileButton("Cancel", ImVec2(fullW(), 0))) { + if (TactileButton(TR("cancel"), ImVec2(fullW(), 0))) { s_updater->cancel(); s_open = false; } @@ -160,22 +160,22 @@ private: } s_persisted = true; } - Type().textColored(TypeStyle::Subtitle2, Success(), "Miner installed"); + Type().textColored(TypeStyle::Subtitle2, Success(), TR("xmrig_installed_ok")); ImGui::Spacing(); - ImGui::Text("Version: %s", p.latest_tag.c_str()); + ImGui::Text("%s %s", TR("xmrig_version"), p.latest_tag.c_str()); ImGui::Spacing(); - if (TactileButton("Close", ImVec2(fullW(), 0))) s_open = false; + if (TactileButton(TR("close"), ImVec2(fullW(), 0))) s_open = false; } static void renderFailed(float, const Progress& p) { using namespace material; - Type().textColored(TypeStyle::Subtitle2, Error(), "Update failed"); + Type().textColored(TypeStyle::Subtitle2, Error(), TR("xmrig_update_failed")); ImGui::Spacing(); - ImGui::TextWrapped("%s", p.error.empty() ? "Unknown error." : p.error.c_str()); + ImGui::TextWrapped("%s", p.error.empty() ? TR("xmrig_unknown_error") : p.error.c_str()); ImGui::Spacing(); - installAction("Retry"); + installAction(TR("retry")); ImGui::Spacing(); - if (TactileButton("Close", ImVec2(fullW(), 0))) s_open = false; + if (TactileButton(TR("close"), ImVec2(fullW(), 0))) s_open = false; } static inline bool s_open = false; diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index b65f68a..ec15f3b 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -1036,6 +1036,28 @@ void I18n::loadBuiltinEnglish() strings_["mining_uptime"] = "Uptime"; strings_["mining_yesterday"] = "Yesterday"; + // --- Miner (xmrig) updater --- + strings_["xmrig_update_button"] = "Update miner…"; + strings_["xmrig_update_title"] = "Update Miner"; + strings_["xmrig_stop_mining_first"] = "Stop mining before updating the miner."; + strings_["xmrig_checking"] = "Checking for the latest miner…"; + strings_["xmrig_unavailable_title"] = "Miner updates unavailable"; + strings_["xmrig_unavailable_body"] = "No miner build is available for this platform."; + strings_["xmrig_update_available"] = "A new miner is available"; + strings_["xmrig_up_to_date"] = "The miner is up to date"; + strings_["xmrig_latest"] = "Latest:"; + strings_["xmrig_installed"] = "Installed:"; + strings_["xmrig_version"] = "Version:"; + strings_["xmrig_verify_note"] = "The download is checked against the release's published SHA-256 checksum before install."; + strings_["xmrig_download_install"] = "Download & install"; + strings_["xmrig_reinstall"] = "Reinstall"; + strings_["xmrig_downloading"] = "Downloading…"; + strings_["xmrig_verifying"] = "Verifying…"; + strings_["xmrig_installing"] = "Installing…"; + strings_["xmrig_installed_ok"] = "Miner installed"; + strings_["xmrig_update_failed"] = "Update failed"; + strings_["xmrig_unknown_error"] = "Unknown error."; + // --- Peers Tab --- strings_["peers_avg_ping"] = "Avg Ping"; strings_["peers_ban_24h"] = "Ban Peer 24h";