Related: tdf#145173 Ensure known supported system and default document locale

For an unsupported locale like {en-IL} that could had ended up as
language-only {en} if the aImplIsoLangEntries map contains such
entry as obtained through
MsLangId::convertUnxByteStringToLanguage() and
Conversion::convertIsoNamesToLanguage(). For the system locale in
SvtSysLocale a proper fallback is used but the default document
language was propagated as is

Other places evaluating MsLangId::getSystemLanguage() are affected
as well, those probably will have to be replaced by a call to
MsLangId::getRealLanguage(LANGUAGE_SYSTEM) or a newly to be
introduced MsLangId::getConfiguredSystemLanguage() and
MsLangId::getSystemLanguage() be made private or accessible only
by LanguageTag.

Change-Id: I87eb9456d5b4ea8d64b0c41fec6bd2739256fb56
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123756
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit aec5312ffab24236876693d7a8b55843847f2a48)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123774
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
diff --git a/desktop/source/app/langselect.cxx b/desktop/source/app/langselect.cxx
index 2958ed8..8a07e26 100644
--- a/desktop/source/app/langselect.cxx
+++ b/desktop/source/app/langselect.cxx
@@ -121,11 +121,18 @@ bool prepareLocale() {
    }
    MsLangId::setConfiguredSystemUILanguage(tag.getLanguageType(false));

    // Note the system language/locale here may or may not be correct before we
    // actually set it below. It is what could be figured from the system
    // setting and may only partially match, like "en" for an unsupported
    // English locale.
    LanguageTag aSysLocTag( MsLangId::getSystemLanguage());
    OUString setupSysLoc(officecfg::Setup::L10N::ooSetupSystemLocale::get());
    LanguageTag::setConfiguredSystemLanguage(
        setupSysLoc.isEmpty()
        ? MsLangId::getSystemLanguage()
        : LanguageTag(setupSysLoc).getLanguageType(false));
    if (!setupSysLoc.isEmpty())
        aSysLocTag.reset( setupSysLoc);
    // Ensure the system locale is set to a known supported locale.
    aSysLocTag.makeFallback();
    LanguageTag::setConfiguredSystemLanguage( aSysLocTag.getLanguageType(false));

    // #i32939# setting of default document locale
    // #i32939# this should not be based on the UI language
    // So obtain the system locale now configured just above and pass it on,
diff --git a/svx/source/dialog/langbox.cxx b/svx/source/dialog/langbox.cxx
index fcd9c54..ca9344f 100644
--- a/svx/source/dialog/langbox.cxx
+++ b/svx/source/dialog/langbox.cxx
@@ -356,6 +356,8 @@ weld::ComboBoxEntry SvxLanguageBox::BuildEntry(const LanguageType nLangType, sal
    else if (nRealLang == LANGUAGE_USER_SYSTEM_CONFIG)
    {
        nRealLang = MsLangId::getSystemLanguage();
        // Whatever we obtained, ensure a known supported locale.
        nRealLang = LanguageTag(nRealLang).makeFallback().getLanguageType();
        aStrEntry += " - " + SvtLanguageTable::GetLanguageString( nRealLang );
    }