From d8cdc53ec003a544d3ec1f3bf0b78dbf104ae770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Mon, 8 Sep 2025 10:22:29 +0300 Subject: [PATCH] Use `language` command line argument to override editor locale. --- editor/settings/editor_settings.cpp | 15 +++++++++++---- editor/settings/editor_settings.h | 2 +- main/main.cpp | 8 +++++++- main/main.h | 1 + 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/editor/settings/editor_settings.cpp b/editor/settings/editor_settings.cpp index 8abb3bb20ad..6960bcc9233 100644 --- a/editor/settings/editor_settings.cpp +++ b/editor/settings/editor_settings.cpp @@ -50,6 +50,7 @@ #include "editor/inspector/editor_property_name_processor.h" #include "editor/project_manager/engine_update_label.h" #include "editor/translations/editor_translation.h" +#include "main/main.h" #include "modules/regex/regex.h" #include "scene/gui/color_picker.h" #include "scene/main/node.h" @@ -79,7 +80,7 @@ bool EditorSettings::_set(const StringName &p_name, const Variant &p_value) { emit_signal(SNAME("settings_changed")); if (p_name == SNAME("interface/editor/editor_language")) { - setup_language(); + setup_language(false); } } return true; @@ -1289,7 +1290,7 @@ void EditorSettings::create() { print_verbose("EditorSettings: Load OK!"); - singleton->setup_language(); + singleton->setup_language(true); singleton->setup_network(); singleton->load_favorites_and_recent_dirs(); singleton->update_text_editor_themes_list(); @@ -1316,13 +1317,19 @@ fail: singleton->set_path(config_file_path, true); singleton->save_changed_setting = true; singleton->_load_defaults(extra_config); - singleton->setup_language(); + singleton->setup_language(true); singleton->setup_network(); singleton->update_text_editor_themes_list(); } -void EditorSettings::setup_language() { +void EditorSettings::setup_language(bool p_initial_setup) { String lang = _EDITOR_GET("interface/editor/editor_language"); + if (p_initial_setup) { + String lang_ov = Main::get_locale_override(); + if (!lang_ov.is_empty()) { + lang = lang_ov; + } + } if (lang == "en") { TranslationServer::get_singleton()->set_locale(lang); diff --git a/editor/settings/editor_settings.h b/editor/settings/editor_settings.h index 78e8aa053de..2059b9e31c9 100644 --- a/editor/settings/editor_settings.h +++ b/editor/settings/editor_settings.h @@ -138,7 +138,7 @@ public: static String get_newest_settings_path(); static void create(); - void setup_language(); + void setup_language(bool p_initial_setup); void setup_network(); static void save(); static void destroy(); diff --git a/main/main.cpp b/main/main.cpp index 62dafe881d4..d847dee799b 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1094,7 +1094,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph arg == "--display-driver" || arg == "--rendering-method" || arg == "--rendering-driver" || - arg == "--xr-mode") { + arg == "--xr-mode" || + arg == "-l" || + arg == "--language") { if (N) { forwardable_cli_arguments[CLI_SCOPE_TOOL].push_back(arg); forwardable_cli_arguments[CLI_SCOPE_TOOL].push_back(N->get()); @@ -3842,6 +3844,10 @@ String Main::get_rendering_driver_name() { return rendering_driver; } +String Main::get_locale_override() { + return locale; +} + // everything the main loop needs to know about frame timings static MainTimerSync main_timer_sync; diff --git a/main/main.h b/main/main.h index bc432d93157..165d657c384 100644 --- a/main/main.h +++ b/main/main.h @@ -71,6 +71,7 @@ public: static Error setup(const char *execpath, int argc, char *argv[], bool p_second_phase = true); static Error setup2(bool p_show_boot_logo = true); // The thread calling setup2() will effectively become the main thread. static String get_rendering_driver_name(); + static String get_locale_override(); static void setup_boot_logo(); #ifdef TESTS_ENABLED static Error test_setup();