From a31bfbe288d4b7468813d7efe95cc5758d82d260 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 1 Feb 2026 03:08:45 +0100 Subject: [PATCH] Properly use system language when language is set to system language, add missing translations --- src/Translation.cpp | 12 +++--------- src/gui/GlobalSettingsPage.cpp | 1 + src/gui/SettingsPage.cpp | 16 ++++++++-------- translations/es.txt | 5 ++++- translations/ru.txt | 4 ++-- translations/template.txt | 5 ++++- translations/uk.txt | 2 +- 7 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/Translation.cpp b/src/Translation.cpp index e0c23eb..9b5212c 100644 --- a/src/Translation.cpp +++ b/src/Translation.cpp @@ -31,13 +31,6 @@ namespace gsr { return "en"; } - std::string Translation::trim(const std::string& str) { - size_t start = str.find_first_not_of(" \t\r\n"); - if (start == std::string::npos) return ""; - size_t end = str.find_last_not_of(" \t\r\n"); - return str.substr(start, end - start + 1); - } - void Translation::process_escapes(std::string& str) { size_t pos = 0; while ((pos = str.find("\\n", pos)) != std::string::npos) { @@ -93,8 +86,6 @@ namespace gsr { std::string line; while (std::getline(file, line)) { - line = trim(line); - if (line.empty() || line[0] == '#') continue; size_t eq_pos = line.find('='); @@ -124,6 +115,9 @@ namespace gsr { } void Translation::init(const char* translations_directory, const char* initial_language) { + if(initial_language && initial_language[0] == '\0') + initial_language = nullptr; + this->translations_directory = translations_directory; load_language(initial_language == nullptr ? get_system_language().c_str() : initial_language); diff --git a/src/gui/GlobalSettingsPage.cpp b/src/gui/GlobalSettingsPage.cpp index b329d7b..115205c 100644 --- a/src/gui/GlobalSettingsPage.cpp +++ b/src/gui/GlobalSettingsPage.cpp @@ -528,6 +528,7 @@ namespace gsr { language_combo_box_ptr = combo_box.get(); combo_box->add_item(TR("System language"), ""); combo_box->add_item("English", "en"); + combo_box->add_item("Español", "es"); combo_box->add_item("Русский", "ru"); combo_box->add_item("Українська", "uk"); combo_box->on_selection_changed = [](const std::string&, const std::string &id) { diff --git a/src/gui/SettingsPage.cpp b/src/gui/SettingsPage.cpp index 730aaaa..898a17b 100644 --- a/src/gui/SettingsPage.cpp +++ b/src/gui/SettingsPage.cpp @@ -1127,7 +1127,7 @@ namespace gsr { std::unique_ptr SettingsPage::create_start_replay_automatically() { // TODO: Support kde plasma wayland and hyprland (same ones that support getting window title) char fullscreen_text[256]; - snprintf(fullscreen_text, sizeof(fullscreen_text), TR("Turn on replay when starting a fullscreen application%s"), gsr_info->system_info.display_server == DisplayServer::X11 ? "" : " (X11 applications only)"); + snprintf(fullscreen_text, sizeof(fullscreen_text), TR("Turn on replay when starting a fullscreen application%s"), gsr_info->system_info.display_server == DisplayServer::X11 ? "" : TR(" (X11 applications only)")); auto radiobutton = std::make_unique(&get_theme().body_font, RadioButton::Orientation::VERTICAL); radiobutton->add_item(TR("Don't turn on replay automatically"), "dont_turn_on_automatically"); @@ -1140,7 +1140,7 @@ namespace gsr { std::unique_ptr SettingsPage::create_save_replay_in_game_folder() { char text[256]; - snprintf(text, sizeof(text), TR("Save video in a folder based on the focused applications name%s"), supports_window_title ? "" : " (X11 applications only)"); + snprintf(text, sizeof(text), TR("Save video in a folder based on the focused applications name%s"), supports_window_title ? "" : TR(" (X11 applications only)")); auto checkbox = std::make_unique(&get_theme().body_font, text); save_replay_in_game_folder_ptr = checkbox.get(); return checkbox; @@ -1153,7 +1153,7 @@ namespace gsr { } std::unique_ptr