From 945645410905e8b23228965e29c2be274cb12645 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Mon, 24 Jan 2022 18:58:16 +0200 Subject: [PATCH] Fix translation with multiple sources for the same language. Remove unnecessary locale length checks. Add "C" -> "en" locale remap. --- core/io/resource_loader.cpp | 2 +- core/string/locales.h | 1 + core/string/translation.cpp | 16 ++++++++-------- editor/editor_settings.cpp | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 3e1c9d2e4a5..21bf566b1b3 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -820,7 +820,7 @@ String ResourceLoader::_path_remap(const String &p_path, bool *r_translation_rem } String l = res_remaps[i].substr(split + 1).strip_edges(); int score = TranslationServer::get_singleton()->compare_locales(locale, l); - if (score > best_score) { + if (score > 0 && score >= best_score) { new_path = res_remaps[i].left(split); best_score = score; if (score == 10) { diff --git a/core/string/locales.h b/core/string/locales.h index 9ef6dee5acb..32d6608ec26 100644 --- a/core/string/locales.h +++ b/core/string/locales.h @@ -42,6 +42,7 @@ static const char *locale_renames[][2] = { { "in", "id" }, // Indonesian { "iw", "he" }, // Hebrew { "no", "nb" }, // Norwegian Bokmål + { "C", "en" }, // Locale is not set, fallback to English. { nullptr, nullptr } }; diff --git a/core/string/translation.cpp b/core/string/translation.cpp index 674098b06c4..355ee238e8e 100644 --- a/core/string/translation.cpp +++ b/core/string/translation.cpp @@ -544,7 +544,7 @@ Ref TranslationServer::get_translation_object(const String &p_local String l = t->get_locale(); int score = compare_locales(p_locale, l); - if (score > best_score) { + if (score > 0 && score >= best_score) { res = t; best_score = score; if (score == 10) { @@ -566,8 +566,6 @@ StringName TranslationServer::translate(const StringName &p_message, const Strin return p_message; } - ERR_FAIL_COND_V_MSG(locale.length() < 2, p_message, "Could not translate message as configured locale '" + locale + "' is invalid."); - StringName res = _get_message_from_translations(p_message, p_context, locale, false); if (!res && fallback.length() >= 2) { @@ -589,8 +587,6 @@ StringName TranslationServer::translate_plural(const StringName &p_message, cons return p_message_plural; } - ERR_FAIL_COND_V_MSG(locale.length() < 2, p_message, "Could not translate message as configured locale '" + locale + "' is invalid."); - StringName res = _get_message_from_translations(p_message, p_context, locale, true, p_message_plural, p_n); if (!res && fallback.length() >= 2) { @@ -617,13 +613,17 @@ StringName TranslationServer::_get_message_from_translations(const StringName &p String l = t->get_locale(); int score = compare_locales(p_locale, l); - if (score > best_score) { + if (score > 0 && score >= best_score) { StringName r; if (!plural) { - res = t->get_message(p_message, p_context); + r = t->get_message(p_message, p_context); } else { - res = t->get_plural_message(p_message, p_message_plural, p_n, p_context); + r = t->get_plural_message(p_message, p_message_plural, p_n, p_context); } + if (!r) { + continue; + } + res = r; best_score = score; if (score == 10) { break; // Exact match, skip the rest. diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 07ebd249b3f..8146f48f918 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -377,7 +377,7 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { lang_hint += locale; int score = TranslationServer::get_singleton()->compare_locales(host_lang, locale); - if (score > best_score) { + if (score > 0 && score >= best_score) { best = locale; best_score = score; if (score == 10) {