Преглед изворни кода

Merge pull request #57133 from bruvzg/fix_multi_file_tr

Rémi Verschelde пре 3 година
родитељ
комит
37472fa2c0
4 измењених фајлова са 11 додато и 10 уклоњено
  1. 1 1
      core/io/resource_loader.cpp
  2. 1 0
      core/string/locales.h
  3. 8 8
      core/string/translation.cpp
  4. 1 1
      editor/editor_settings.cpp

+ 1 - 1
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) {

+ 1 - 0
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 }
 };
 

+ 8 - 8
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.

+ 1 - 1
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) {