i18nlangtag/source/isolang/isolang.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
New commits: commit 7c22bed187c12122fe29459279771ca414799ac8 Author: Eike Rathke <er...@redhat.com> AuthorDate: Wed Dec 15 14:24:39 2021 +0100 Commit: Eike Rathke <er...@redhat.com> CommitDate: Wed Dec 15 19:50:24 2021 +0100 Related: tdf#146228 convertIsoNamesToLanguage() fallback for empty tag An empty tag might be the result of a bad LANGUAGE=":" setting. The old implementation tried an unconditional "-" tag (for both language and country empty) that was wrong anyway. Do not keep the resulting LANGUAGE_SYSTEM as that is exactly what we want to know the actual locale for. Change-Id: I7d6587f59e9a3362c7d877926a325ebcfe7b48db Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126863 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Jenkins diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index bf8c5d4b5d34..36b69f0fe6a6 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -1408,10 +1408,12 @@ LanguageType MsLangId::Conversion::convertIsoNamesToLanguage( std::string_view r // actually call into LanguageTag to create an on-the-fly mapping. if (nLang == LANGUAGE_DONTKNOW) { - nLang = LanguageTag( aLang + "-" + aCountry).getLanguageType(false); + OUString aTag( aCountry.isEmpty() ? aLang : aLang + "-" + aCountry ); + nLang = LanguageTag( aTag).getLanguageType(false); SAL_WARN("i18nlangtag", "convertIsoNamesToLanguage(string_view): on-the-fly for {" - << aLang << "-" << aCountry << "} " << nLang); - if (nLang == LANGUAGE_DONTKNOW) + << aTag << "} " << nLang); + // Do not leave empty as SYSTEM unresolved. + if (nLang == LANGUAGE_DONTKNOW || nLang == LANGUAGE_SYSTEM) { SAL_WARN("i18nlangtag", "convertIsoNamesToLanguage(string_view): on-the-fly bad, using {en-US}"); nLang = LANGUAGE_ENGLISH_US;