diff --git a/core/string/translation_server.cpp b/core/string/translation_server.cpp index cc0351e7af0..0048bd4d107 100644 --- a/core/string/translation_server.cpp +++ b/core/string/translation_server.cpp @@ -381,6 +381,10 @@ String TranslationServer::get_locale() const { return locale; } +void TranslationServer::set_fallback_locale(const String &p_locale) { + fallback = p_locale; +} + String TranslationServer::get_fallback_locale() const { return fallback; } diff --git a/core/string/translation_server.h b/core/string/translation_server.h index a8c927a74dc..48632953ce5 100644 --- a/core/string/translation_server.h +++ b/core/string/translation_server.h @@ -99,6 +99,7 @@ public: void set_locale(const String &p_locale); String get_locale() const; + void set_fallback_locale(const String &p_locale); String get_fallback_locale() const; Ref get_translation_object(const String &p_locale); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 11a60473077..8e0b9adfbf7 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -450,6 +450,11 @@ void EditorNode::_update_from_settings() { Viewport::DefaultCanvasItemTextureRepeat tr = (Viewport::DefaultCanvasItemTextureRepeat)current_repeat; scene_root->set_default_canvas_item_texture_repeat(tr); } + String current_fallback_locale = GLOBAL_GET("internationalization/locale/fallback"); + if (current_fallback_locale != TranslationServer::get_singleton()->get_fallback_locale()) { + TranslationServer::get_singleton()->set_fallback_locale(current_fallback_locale); + scene_root->propagate_notification(Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED); + } RS::DOFBokehShape dof_shape = RS::DOFBokehShape(int(GLOBAL_GET("rendering/camera/depth_of_field/depth_of_field_bokeh_shape"))); RS::get_singleton()->camera_attributes_set_dof_blur_bokeh_shape(dof_shape); diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 0554ffc5c13..d12a87ded4b 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -3519,7 +3519,8 @@ bool Control::is_layout_rtl() const { String locale = OS::get_singleton()->get_locale(); data.is_rtl = TS->is_locale_right_to_left(locale); } else { - String locale = TranslationServer::get_singleton()->get_tool_locale(); + const Ref &t = TranslationServer::get_singleton()->get_translation_object(TranslationServer::get_singleton()->get_locale()); + String locale = t.is_valid() ? t->get_locale() : TranslationServer::get_singleton()->get_fallback_locale(); data.is_rtl = TS->is_locale_right_to_left(locale); } return data.is_rtl; diff --git a/scene/main/window.cpp b/scene/main/window.cpp index b00c48999cc..ec04feca747 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -2883,7 +2883,8 @@ bool Window::is_layout_rtl() const { String locale = OS::get_singleton()->get_locale(); return TS->is_locale_right_to_left(locale); } else { - String locale = TranslationServer::get_singleton()->get_tool_locale(); + const Ref &t = TranslationServer::get_singleton()->get_translation_object(TranslationServer::get_singleton()->get_locale()); + String locale = t.is_valid() ? t->get_locale() : TranslationServer::get_singleton()->get_fallback_locale(); return TS->is_locale_right_to_left(locale); } }