desktop/source/app/langselect.cxx |   15 +++++++++++----
 svx/source/dialog/langbox.cxx     |    2 ++
 2 files changed, 13 insertions(+), 4 deletions(-)

New commits:
commit 1497f534c232c2a54e7031afb3088d28698bc5d3
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Mon Oct 18 20:02:55 2021 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue Oct 19 11:00:36 2021 +0200

    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 <er...@redhat.com>
    Tested-by: Jenkins
    (cherry picked from commit aec5312ffab24236876693d7a8b55843847f2a48)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123774
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/desktop/source/app/langselect.cxx 
b/desktop/source/app/langselect.cxx
index 2958ed8786b5..8a07e26c3134 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 fcd9c54e3774..ca9344f32bc7 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 );
     }
 

Reply via email to