From db3fadc560bae67b882fabf3022f8d72a3ab3561 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Wed, 22 Feb 2023 00:08:05 +0200 Subject: Improve layout direction/locale automatic selection. (cherry picked from commit 82d7923c653b6328ba279bd4183b63b69e21edfc) --- core/config/project_settings.cpp | 1 + core/string/translation.cpp | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 933b9891cc..f3c0bc2153 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1331,6 +1331,7 @@ ProjectSettings::ProjectSettings() { GLOBAL_DEF_RST(PropertyInfo(Variant::INT, "rendering/occlusion_culling/bvh_build_quality", PROPERTY_HINT_ENUM, "Low,Medium,High"), 2); GLOBAL_DEF(PropertyInfo(Variant::INT, "memory/limits/multithreaded_server/rid_pool_prealloc", PROPERTY_HINT_RANGE, "0,500,1"), 60); // No negative and limit to 500 due to crashes. GLOBAL_DEF_RST("internationalization/rendering/force_right_to_left_layout_direction", false); + GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "internationalization/rendering/root_node_layout_direction", PROPERTY_HINT_RANGE, "Based on Locale,Left-to-Right,Right-to-Left"), 0); GLOBAL_DEF(PropertyInfo(Variant::INT, "gui/timers/incremental_search_max_interval_msec", PROPERTY_HINT_RANGE, "0,10000,1,or_greater"), 2000); diff --git a/core/string/translation.cpp b/core/string/translation.cpp index b9d5d3b538..160bad14ab 100644 --- a/core/string/translation.cpp +++ b/core/string/translation.cpp @@ -712,7 +712,25 @@ String TranslationServer::get_tool_locale() { #else { #endif - return get_locale(); + // Look for best matching loaded translation. + String best_locale = "en"; + int best_score = 0; + + for (const Ref &E : translations) { + const Ref &t = E; + ERR_FAIL_COND_V(t.is_null(), best_locale); + String l = t->get_locale(); + + int score = compare_locales(locale, l); + if (score > 0 && score >= best_score) { + best_locale = l; + best_score = score; + if (score == 10) { + break; // Exact match, skip the rest. + } + } + } + return best_locale; } } -- cgit v1.2.3