1
0
mirror of https://github.com/godotengine/godot.git synced 2025-12-02 16:48:55 +00:00

Merge pull request #110378 from timothyqiu/rtl-preview

Make text-related nodes translation domain aware
This commit is contained in:
Thaddeus Crews
2025-10-16 12:48:05 -05:00
23 changed files with 132 additions and 101 deletions

View File

@@ -32,7 +32,6 @@
#include "core/config/project_settings.h"
#include "core/debugger/engine_debugger.h"
#include "core/string/translation_server.h"
#include "scene/gui/control.h"
#include "scene/theme/theme_db.h"
#include "scene/theme/theme_owner.h"
@@ -2934,12 +2933,9 @@ bool Window::is_layout_rtl() const {
} else if (proj_root_layout_direction == 2) {
return true;
} else if (proj_root_layout_direction == 3) {
String locale = OS::get_singleton()->get_locale();
return TS->is_locale_right_to_left(locale);
return TS->is_locale_right_to_left(OS::get_singleton()->get_locale());
} else {
const Ref<Translation> &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);
return TS->is_locale_right_to_left(_get_locale());
}
}
}
@@ -2948,8 +2944,9 @@ bool Window::is_layout_rtl() const {
return true;
}
#endif
const StringName domain_name = get_translation_domain();
Node *parent_node = get_parent();
while (parent_node) {
while (parent_node && parent_node->get_translation_domain() == domain_name) {
Control *parent_control = Object::cast_to<Control>(parent_node);
if (parent_control) {
return parent_control->is_layout_rtl();
@@ -2967,25 +2964,21 @@ bool Window::is_layout_rtl() const {
} else if (root_layout_direction == 2) {
return true;
} else if (root_layout_direction == 3) {
String locale = OS::get_singleton()->get_locale();
return TS->is_locale_right_to_left(locale);
return TS->is_locale_right_to_left(OS::get_singleton()->get_locale());
} else {
String locale = TranslationServer::get_singleton()->get_tool_locale();
return TS->is_locale_right_to_left(locale);
return TS->is_locale_right_to_left(_get_locale());
}
} else if (layout_dir == LAYOUT_DIRECTION_APPLICATION_LOCALE) {
if (GLOBAL_GET_CACHED(bool, "internationalization/rendering/force_right_to_left_layout_direction")) {
return true;
} else {
String locale = TranslationServer::get_singleton()->get_tool_locale();
return TS->is_locale_right_to_left(locale);
return TS->is_locale_right_to_left(_get_locale());
}
} else if (layout_dir == LAYOUT_DIRECTION_SYSTEM_LOCALE) {
if (GLOBAL_GET_CACHED(bool, "internationalization/rendering/force_right_to_left_layout_direction")) {
return true;
} else {
String locale = OS::get_singleton()->get_locale();
return TS->is_locale_right_to_left(locale);
return TS->is_locale_right_to_left(OS::get_singleton()->get_locale());
}
} else {
return (layout_dir == LAYOUT_DIRECTION_RTL);