diff --git a/core/string/translation.cpp b/core/string/translation.cpp index 191789b38..edd75902c 100644 --- a/core/string/translation.cpp +++ b/core/string/translation.cpp @@ -254,6 +254,10 @@ void TranslationServer::init_locale_info() { } String TranslationServer::standardize_locale(const String &p_locale) const { + return _standardize_locale(p_locale, false); +} + +String TranslationServer::_standardize_locale(const String &p_locale, bool p_add_defaults) const { // Replaces '-' with '_' for macOS style locales. String univ_locale = p_locale.replace("-", "_"); @@ -315,24 +319,26 @@ String TranslationServer::standardize_locale(const String &p_locale) const { } // Add script code base on language and country codes for some ambiguous cases. - if (script.empty()) { - for (int i = 0; i < locale_script_info.size(); i++) { - const LocaleScriptInfo &info = locale_script_info[i]; - if (info.name == lang) { - if (country.empty() || info.supported_countries.has(country)) { - script = info.script; - break; + if (p_add_defaults) { + if (script.empty()) { + for (int i = 0; i < locale_script_info.size(); i++) { + const LocaleScriptInfo &info = locale_script_info[i]; + if (info.name == lang) { + if (country.empty() || info.supported_countries.has(country)) { + script = info.script; + break; + } } } } - } - if (!script.empty() && country.empty()) { - // Add conntry code based on script for some ambiguous cases. - for (int i = 0; i < locale_script_info.size(); i++) { - const LocaleScriptInfo &info = locale_script_info[i]; - if (info.name == lang && info.script == script) { - country = info.default_country; - break; + if (!script.empty() && country.empty()) { + // Add conntry code based on script for some ambiguous cases. + for (int i = 0; i < locale_script_info.size(); i++) { + const LocaleScriptInfo &info = locale_script_info[i]; + if (info.name == lang && info.script == script) { + country = info.default_country; + break; + } } } } @@ -352,8 +358,8 @@ String TranslationServer::standardize_locale(const String &p_locale) const { } int TranslationServer::compare_locales(const String &p_locale_a, const String &p_locale_b) const { - String locale_a = standardize_locale(p_locale_a); - String locale_b = standardize_locale(p_locale_b); + String locale_a = _standardize_locale(p_locale_a, true); + String locale_b = _standardize_locale(p_locale_b, true); if (locale_a == locale_b) { // Exact match. diff --git a/core/string/translation.h b/core/string/translation.h index 650bdcaf6..0e75e21ee 100644 --- a/core/string/translation.h +++ b/core/string/translation.h @@ -123,6 +123,7 @@ public: int compare_locales(const String &p_locale_a, const String &p_locale_b) const; String standardize_locale(const String &p_locale) const; + String _standardize_locale(const String &p_locale, bool p_add_defaults) const; Vector get_all_languages() const; String get_language_name(const String &p_language) const;