sc/source/core/tool/addincol.cxx |   54 ++++++++++++++++++++++++++++++++-------
 1 file changed, 45 insertions(+), 9 deletions(-)

New commits:
commit 632fdbb7fb9fd296aaa4c473070aecc3c0dd019c
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Mon Apr 3 19:28:59 2023 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Mon Apr 3 21:22:38 2023 +0200

    Resolves: tdf#154582 Obtain English DisplayName before CompatibilityName
    
    ... for Add-Ins from configuration.
    
    Change-Id: If13d692ca7550e69d2f6e3ff72747d17aee3e7f7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149995
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx
index c16f8f3e6f5e..c9db273f54a1 100644
--- a/sc/source/core/tool/addincol.cxx
+++ b/sc/source/core/tool/addincol.cxx
@@ -360,7 +360,8 @@ void ScUnoAddInCollection::ReadConfiguration()
 
     ScAddInCfg& rAddInConfig = SC_MOD()->GetAddInCfg();
 
-    // additional, temporary config item for the compatibility names
+    // Additional, temporary config item for the display names and
+    // compatibility names.
     ScLinkConfigItem aAllLocalesConfig( CFGPATH_ADDINS, 
ConfigItemMode::AllLocales );
     // CommitLink is not used (only reading values)
 
@@ -441,6 +442,35 @@ void ScUnoAddInCollection::ReadConfiguration()
                     nCategory = lcl_GetCategory( aCategoryName );
                 }
 
+                // get English display name
+
+                OUString aDisplayNamePath(aFuncPropPath + CFGSTR_DISPLAYNAME);
+                uno::Sequence<OUString> aDisplayNamePropNames( 
&aDisplayNamePath, 1 );
+
+                uno::Sequence<uno::Any> aDisplayNameProperties = 
aAllLocalesConfig.GetProperties( aDisplayNamePropNames );
+                if ( aDisplayNameProperties.getLength() == 1 )
+                {
+                    uno::Sequence<beans::PropertyValue> aLocalEntries;
+                    if ( aDisplayNameProperties[0] >>= aLocalEntries )
+                    {
+                        for ( const beans::PropertyValue& rConfig : 
std::as_const(aLocalEntries) )
+                        {
+                            // PropertyValue name is the locale ("convert" from
+                            // string to canonicalize).
+                            OUString aLocale( LanguageTag( rConfig.Name, 
true).getBcp47( false));
+                            // PropertyValue value is the localized value 
(string in this case).
+                            OUString aName;
+                            rConfig.Value >>= aName;
+                            // Accept 'en' and 'en-...' but prefer 'en-US'.
+                            if (aLocale == "en-US" && !aName.isEmpty())
+                                aEnglishName = aName;
+                            else if (aEnglishName.isEmpty() && (aLocale == 
"en" || aLocale.startsWith("en-")))
+                                aEnglishName = aName;
+                        }
+                    }
+                }
+                bool bNeedEnglish = aEnglishName.isEmpty();
+
                 // get compatibility names
 
                 ::std::vector<ScUnoAddInFuncData::LocalizedName> aCompNames;
@@ -457,17 +487,23 @@ void ScUnoAddInCollection::ReadConfiguration()
                         for ( const beans::PropertyValue& rConfig : 
std::as_const(aLocalEntries) )
                         {
                             // PropertyValue name is the locale ("convert" from
-                            // string to canonicalize)
+                            // string to canonicalize).
                             OUString aLocale( LanguageTag( rConfig.Name, 
true).getBcp47( false));
-                            // PropertyValue value is the localized value 
(string in this case)
+                            // PropertyValue value is the localized value 
(string in this case).
                             OUString aName;
                             rConfig.Value >>= aName;
-                            aCompNames.emplace_back( aLocale, aName);
-                            // Accept 'en' and 'en-...' but prefer 'en-US'.
-                            if (aLocale == "en-US")
-                                aEnglishName = aName;
-                            else if (aEnglishName.isEmpty() && (aLocale == 
"en" || aLocale.startsWith("en-")))
-                                aEnglishName = aName;
+                            if (!aName.isEmpty())
+                            {
+                                aCompNames.emplace_back( aLocale, aName);
+                                if (bNeedEnglish)
+                                {
+                                    // Accept 'en' and 'en-...' but prefer 
'en-US'.
+                                    if (aLocale == "en-US")
+                                        aEnglishName = aName;
+                                    else if (aEnglishName.isEmpty() && 
(aLocale == "en" || aLocale.startsWith("en-")))
+                                        aEnglishName = aName;
+                                }
+                            }
                         }
                     }
                 }

Reply via email to