summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/io/resource_loader.cpp2
-rw-r--r--core/string/locales.h1
-rw-r--r--core/string/translation.cpp16
-rw-r--r--editor/editor_settings.cpp2
4 files changed, 11 insertions, 10 deletions
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index 3e1c9d2e4a..21bf566b1b 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 9ef6dee5ac..32d6608ec2 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 674098b06c..355ee238e8 100644
--- a/core/string/translation.cpp
+++ b/core/string/translation.cpp
@@ -544,7 +544,7 @@ Ref<Translation> 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 07ebd249b3..8146f48f91 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -377,7 +377,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> 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) {