Support loading of translations on threads

(cherry picked from commit 5301bbb3a5)
This commit is contained in:
Pedro J. Estébanez 2023-06-27 14:21:31 +02:00 committed by Yuri Sizov
parent f7d1f9e25b
commit ff6229e794
2 changed files with 11 additions and 0 deletions

View File

@ -82,6 +82,15 @@ void Translation::_set_messages(const Dictionary &p_messages) {
void Translation::set_locale(const String &p_locale) { void Translation::set_locale(const String &p_locale) {
locale = TranslationServer::get_singleton()->standardize_locale(p_locale); locale = TranslationServer::get_singleton()->standardize_locale(p_locale);
if (Thread::is_main_thread()) {
_notify_translation_changed_if_applies();
} else {
// Avoid calling non-thread-safe functions here.
callable_mp(this, &Translation::_notify_translation_changed_if_applies).call_deferred();
}
}
void Translation::_notify_translation_changed_if_applies() {
if (OS::get_singleton()->get_main_loop() && TranslationServer::get_singleton()->get_loaded_locales().has(get_locale())) { if (OS::get_singleton()->get_main_loop() && TranslationServer::get_singleton()->get_loaded_locales().has(get_locale())) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_TRANSLATION_CHANGED); OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_TRANSLATION_CHANGED);
} }

View File

@ -47,6 +47,8 @@ class Translation : public Resource {
virtual Dictionary _get_messages() const; virtual Dictionary _get_messages() const;
virtual void _set_messages(const Dictionary &p_messages); virtual void _set_messages(const Dictionary &p_messages);
void _notify_translation_changed_if_applies();
protected: protected:
static void _bind_methods(); static void _bind_methods();